MENU

C# DataSetに格納しているデータへアクセスする

C#でデータベース操作やデータ処理を行う際、DataSetは非常に重要な役割を果たします。DataSetは複数のDataTableを含むことができ、関連するデータをまとめて管理するのに適しています。この記事では、C#でDataSetに格納されているデータへアクセスする方法を、初心者の方にも分かりやすく解説します。

目次

DataSetの基本構造

まずは、サンプルのDataSetを作成し、その基本構造を理解しましょう。

using System;
using System.Data;

class Program
{
    static void Main()
    {
        // DataSetの作成
        DataSet companyData = new DataSet("会社データ");

        // 社員テーブルの作成
        DataTable employees = new DataTable("社員");
        employees.Columns.Add("ID", typeof(int));
        employees.Columns.Add("名前", typeof(string));
        employees.Columns.Add("部署ID", typeof(int));

        // 部署テーブルの作成
        DataTable departments = new DataTable("部署");
        departments.Columns.Add("部署ID", typeof(int));
        departments.Columns.Add("部署名", typeof(string));

        // DataSetにテーブルを追加
        companyData.Tables.Add(employees);
        companyData.Tables.Add(departments);

        // データの追加
        employees.Rows.Add(1, "山田太郎", 1);
        employees.Rows.Add(2, "佐藤花子", 2);
        departments.Rows.Add(1, "営業部");
        departments.Rows.Add(2, "開発部");

        // ここからデータアクセスのコードを記述します
    }
}

DataSetのテーブルへのアクセス

DataSet内の特定のテーブルにアクセスするには、Tables[テーブル名]またはTables[インデックス]を使用します。

// 社員テーブルへのアクセス
DataTable employeesTable = companyData.Tables["社員"];

Console.WriteLine("社員一覧:");
foreach (DataRow row in employeesTable.Rows)
{
    Console.WriteLine($"ID: {row["ID"]}, 名前: {row["名前"]}, 部署ID: {row["部署ID"]}");
}

特定の行と列のデータにアクセス

特定の行と列のデータにアクセスするには、インデックスまたは列名を使用します。

// 最初の社員の名前を取得
string firstEmployeeName = employeesTable.Rows[0]["名前"].ToString();
Console.WriteLine($"\n最初の社員の名前: {firstEmployeeName}");

// 部署名を取得(別テーブルの参照)
DataTable departmentsTable = companyData.Tables["部署"];
string getDepartmentName(int departmentId)
{
    DataRow[] result = departmentsTable.Select($"部署ID = {departmentId}");
    return result.Length > 0 ? result[0]["部署名"].ToString() : "不明";
}

Console.WriteLine("\n社員と所属部署:");
foreach (DataRow row in employeesTable.Rows)
{
    int deptId = Convert.ToInt32(row["部署ID"]);
    string deptName = getDepartmentName(deptId);
    Console.WriteLine($"{row["名前"]} - {deptName}");
}

DataRelationを使用した関連テーブルへのアクセス

DataSetでは、テーブル間の関係を定義することができ、これによりデータへのアクセスがより直感的になります。

// テーブル間の関係を定義
DataRelation relation = new DataRelation(
    "社員部署関係",
    departments.Columns["部署ID"],
    employees.Columns["部署ID"]
);
companyData.Relations.Add(relation);

// 関連を使用してデータにアクセス
Console.WriteLine("\n部署とその社員:");
foreach (DataRow deptRow in departmentsTable.Rows)
{
    Console.WriteLine($"{deptRow["部署名"]}の社員:");
    foreach (DataRow empRow in deptRow.GetChildRows(relation))
    {
        Console.WriteLine($"  - {empRow["名前"]}");
    }
}

データの変更と更新

DataSetのデータを変更する場合は、直接行のデータを変更し、必要に応じてAcceptChangesメソッドを呼び出します。

// データの変更
DataRow rowToUpdate = employeesTable.Rows.Find(1); // IDが1の行を検索
if (rowToUpdate != null)
{
    rowToUpdate["名前"] = "山田次郎";
    employeesTable.AcceptChanges();
    Console.WriteLine("\nデータ更新後:");
    Console.WriteLine($"ID: {rowToUpdate["ID"]}, 名前: {rowToUpdate["名前"]}");
}

まとめ

C#でDataSetに格納されているデータへアクセスする方法は様々です。テーブルへのアクセス、特定の行や列のデータの取得、関連テーブル間のデータ参照、そしてデータの更新まで、DataSetは柔軟なデータ操作を可能にします。

初心者の方は、まずは基本的なテーブルアクセスから始めて、徐々に複雑な操作に挑戦してみてください。DataSetの使い方をマスターすることで、C#でのデータ処理スキルが大きく向上し、より効率的なアプリケーション開発が可能になるでしょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次