はじめに
C#におけるDatasetの使用法は、データ操作と処理によく使うことがあると思います。
この記事では、Datasetを使ってデータを効率的に扱う方法から、複雑なデータ操作まで、様々なシナリオを通じて解説します。
初心者でも理解しやすいように基本から応用まで段階的に説明していきますので、最後までご覧ください。
KindleUnlimited会員であれば、全ての本をご覧頂けます。 Linqを理解すれば、C#プログラミングの世界が変わる 第1版
Datasetとは
Datasetは、データベースのテーブルやそれに対応するデータをメモリ内で表現するためのC#のデータ構造です。
ADO.NETの一部として提供されており、複数のDataTableを保持できる容器のようなものです。
Datasetの基本的な使い方
最も基本的なDatasetの使い方を見てみましょう。
まずは、Datasetを作成して、DataTableを追加し、データを操作する基本的な流れです。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System; using System.Data; class Program { static void Main() { // Datasetの作成 DataSet dataSet = new DataSet(); // DataTableの作成と追加 DataTable table = new DataTable("Students"); dataSet.Tables.Add(table); // 列の定義 table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); // データの追加 table.Rows.Add(1, "山田太郎"); table.Rows.Add(2, "鈴木一郎"); // データの表示 foreach (DataRow row in table.Rows) { Console.WriteLine($"ID: {row["ID"]}, Name: {row["Name"]}"); } } } |
出力結果
ID: 1, Name: 山田太郎
ID: 2, Name: 鈴木一郎
DataTableへのデータの追加
DataTableにデータを追加する方法はいくつかあります。
直接Rowsコレクションにアクセスしてデータを追加する方法以外にも、DataRowオブジェクトを使用する方法などがあります。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System; using System.Data; class Program { static void Main() { DataSet dataSet = new DataSet(); DataTable table = dataSet.Tables.Add("Employees"); table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); DataRow row = table.NewRow(); row["ID"] = 1; row["Name"] = "田中次郎"; table.Rows.Add(row); DataRow row2 = table.NewRow(); row2["ID"] = 2; row2["Name"] = "佐藤花子"; table.Rows.Add(row2); foreach (DataRow dr in table.Rows) { Console.WriteLine($"ID: {dr["ID"]}, Name: {dr["Name"]}"); } } } |
出力結果
ID: 1, Name: 田中次郎
ID: 2, Name: 佐藤花子
DataTable間の関係を定義する
複数のDataTable間で関係を定義することで、リレーショナルデータベースのようにデータを扱うことができます。
この機能を利用することで、親子関係を持つテーブル間でのデータ操作が可能になります。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
using System; using System.Data; class Program { static void Main() { DataSet dataSet = new DataSet(); // 親テーブルの定義 DataTable parentTable = dataSet.Tables.Add("Departments"); parentTable.Columns.Add("DeptID", typeof(int)).Unique = true; parentTable.Columns.Add("DeptName", typeof(string)); // 子テーブルの定義 DataTable childTable = dataSet.Tables.Add("Employees"); childTable.Columns.Add("EmpID", typeof(int)).Unique = true; childTable.Columns.Add("EmpName", typeof(string)); childTable.Columns.Add("DeptID", typeof(int)); // リレーションの定義 dataSet.Relations.Add("DeptEmp", parentTable.Columns["DeptID"], childTable.Columns["DeptID"]); // データの追加 parentTable.Rows.Add(1, "IT"); parentTable.Rows.Add(2, "HR"); childTable.Rows.Add(101, "山田太郎", 1); childTable.Rows.Add(102, "鈴木一郎", 1); childTable.Rows.Add(103, "田中花子", 2); foreach (DataRow parentRow in parentTable.Rows) { Console.WriteLine($"DeptID: {parentRow["DeptID"]}, DeptName: {parentRow["DeptName"]}"); foreach (DataRow childRow in parentRow.GetChildRows("DeptEmp")) { Console.WriteLine($"\tEmpID: {childRow["EmpID"]}, EmpName: {childRow["EmpName"]}"); } } } } |
出力結果
DeptID: 1, DeptName: IT
EmpID: 101, EmpName: 山田太郎
EmpID: 102, EmpName: 鈴木一郎
DeptID: 2, DeptName: HR
EmpID: 103, EmpName: 田中花子
データの検索とフィルタリング
DataTable内で特定の条件に合致するデータを検索したり、フィルタリングする方法について解説します。
例えば、特定の列の値に基づいてデータを絞り込みたい場合に便利です。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
using System; using System.Data; class Program { static void Main() { DataSet dataSet = new DataSet(); DataTable table = dataSet.Tables.Add("Employees"); table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); table.Columns.Add("Position", typeof(string)); table.Rows.Add(1, "山田太郎", "Manager"); table.Rows.Add(2, "鈴木一郎", "Engineer"); table.Rows.Add(3, "田中花子", "Engineer"); // フィルタリング string filterExpression = "Position = 'Engineer'"; DataRow[] filteredRows = table.Select(filterExpression); foreach (DataRow row in filteredRows) { Console.WriteLine($"ID: {row["ID"]}, Name: {row["Name"]}, Position: {row["Position"]}"); } } } |
出力結果
ID: 2, Name: 鈴木一郎, Position: Engineer
ID: 3, Name: 田中花子, Position: Engineer
データセットの永続化
データセットの内容をXMLファイルに保存し、必要に応じて読み込む方法を解説します。
これにより、アプリケーションのセッション間でデータを維持することが可能になります。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System; using System.Data; class Program { static void Main() { DataSet dataSet = new DataSet(); DataTable table = dataSet.Tables.Add("Products"); table.Columns.Add("ProductID", typeof(int)); table.Columns.Add("ProductName", typeof(string)); table.Rows.Add(1, "コーヒーメーカー"); table.Rows.Add(2, "電子レンジ"); // XMLに保存 dataSet.WriteXml("ProductsData.xml"); // XMLから読み込み DataSet newDataSet = new DataSet(); newDataSet.ReadXml("ProductsData.xml"); DataTable newTable = newDataSet.Tables["Products"]; foreach (DataRow row in newTable.Rows) { Console.WriteLine($"ProductID: {row["ProductID"]}, ProductName: {row["ProductName"]}"); } } } |
出力結果
ProductID: 1, ProductName: コーヒーメーカー
ProductID: 2, ProductName: 電子レンジ
こちらもCHECK
-
【C# sharp】DataTable型の行の追加、修正、削除の方法
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
まとめ
この記事では、C#のDatasetの基本的な使い方から、より高度なデータ操作の方法まで幅広くカバーしました。
初心者から上級者まで、データ操作のニーズに合わせてDatasetを活用することで、効率的かつ強力なデータ処理が可能になります。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!