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#でのデータ処理スキルが大きく向上し、より効率的なアプリケーション開発が可能になるでしょう。
コメント