さらに、DataSetなるものがあって、複数のDataTableをひとつのDataSetで管理できる。
- DataTable = テーブル
- DataSet = スキーマ
のようなものと理解している。
手始めにDataTable#Selectメソッドで
- データのフィルタリング
- データのソート
を行うサンプルを書いてみた。なかなか便利ですね。
using System; using System.Data; namespace sample { public class DataSetSample { public static void Main(string[] args) { new DataSetSample().Run(); } private DataSet createSampleData() { DataSet dataSet = new DataSet(); DataTable dataTable = new DataTable("student"); dataTable.Columns.Add("name"); dataTable.Columns.Add("age"); dataTable.Columns.Add("sex"); dataSet.Tables.Add(dataTable); String[] names = {"taro", "hanako", "jiro", "saburo", "yuka"}; int[] ages = {10, 10, 9, 8, 7}; char[] sex = {'M', 'F', 'M', 'M', 'F'}; for (int i = 0; i < names.Length; i++) { DataRow dataRow = dataTable.NewRow(); dataRow["name"] = names[i]; dataRow["age"] = ages[i]; dataRow["sex"] = sex[i]; dataSet.Tables["student"].Rows.Add(dataRow); } return dataSet; } public void Run() { DataSet dataSet = createSampleData(); // select male students DataRow[] res = dataSet.Tables["student"].Select("sex = 'M'"); foreach (var row in res) { Console.WriteLine("{0} is a {1}-year-old boy.", row["name"], row["age"]); } Console.WriteLine(); // select students of the age 10 or above res = dataSet.Tables["student"].Select("age >= 10"); foreach (var row in res) { Console.WriteLine("{0} is of the age 10 or above.", row["name"]); } Console.WriteLine(); // select students whose name ends with "ro" res = dataSet.Tables["student"].Select("name like '%ro'"); foreach (var row in res) { Console.WriteLine("{0} is one of 'XXro.'", row["name"]); } Console.WriteLine(); // sort students by his/her name res = dataSet.Tables["student"].Select(null, "name"); foreach (var row in res) { Console.WriteLine("{0}", row["name"]); } Console.WriteLine(); } } }
0 件のコメント:
コメントを投稿