DataTableとDataSetを使ってデータを扱う
C#のDataTableについての備忘録です。DataTable, DataSetクラスを使うとデータを表形式のように格納することができます。DataSetがデータベースのようなものを表し、DataTableはテーブルを表します。DataTableクラスには各データ行を表すDataRowと、列を表すDataColumnがあります。サンプルコードはコンソールアプリです。
目次 Table of Contents
DataTableでテーブルを作成しデータを表示する
基本的なテーブル作成の流れです。
//テーブル作成
DataTable dt = new DataTable(“students”);
//列(カラム)作成
dt.Columns.Add(“name”, typeof(string));
dt.Columns.Add(“number”, typeof(int));
dt.Columns.Add(“authenticity”, typeof(bool));
dt.Columns.Add(“description”, typeof(string));
//行(DataRow)作成
//1行目
DataRow dr;
dr = dt.NewRow();
dr[“name”] = “Taro”;
dr[“number”] = 1;
dr[“authenticity”] = true;
dr[“description”] = “Hello C#”;
//行をテーブルに追加
dt.Rows.Add(dr);
//2行目
dr = dt.NewRow();
dr[“name”] = “Koji”;
dr[“number”] = 2;
dr[“authenticity”] = false;
dr[“description”] = “Hello Java”;
dt.Rows.Add(dr);
//3行目
dr = dt.NewRow();
dr[“name”] = “Hanako”;
dr[“number”] = 3;
dr[“authenticity”] = true;
dr[“description”] = “Hello JavaScript”;
dt.Rows.Add(dr);
//データテーブルの結果を出力
for(int i_r = 0; i_r < dt.Rows.Count; i_r++)
{
for(int i_c = 0; i_c < dt.Columns.Count; i_c++)
{
Console.Write(dt.Rows[i_r][i_c].ToString());
}
Console.WriteLine();
}
Add()の引数はカラムの順番と合わせる必要があります。
こちらの記述で行を追加しても、前章と同じくforで出力できます。またforeachを使った出力もできます。
//forで出力
for(int i_r = 0; i_r < dt_fruits2.Rows.Count; i_r++)
{
for(int i_c = 0; i_c < dt_fruits2.Columns.Count; i_c++)
{
Console.Write(dt_fruits2.Rows[i_r][i_c].ToString() + ” “);
}
Console.WriteLine();
}
//foreachで出力
foreach(DataRow row in dt_fruits2.Rows)
{
foreach(DataColumn column in dt_fruits2.Columns)
{
Console.Write(row[column] + ” “);
}
Console.WriteLine();
}
DataRowを使っていませんが、Rowsのインデックスが設定されるようですね。
foreachの出力でわかると思いますが、 DataRow[DataColumn] の形でも出力できます。DataRowは DataTable.Rows[行インデックス] で、DataColumnは DataTable.Columns[“カラム名”] です。公式では、DataColumnは列のスキーマを表す、と簡単に説明してありますが、DataTableのデータをあれこれ操作するなら列インデックスよりもこちらを使った方がわかりやすそうに思います。列スキーマをあらかじめ変数として宣言しておけばよさそうです。
DataSetビジュアライザ―を使ってテーブルを確認する(VisualStudio)
Visual Studioのデバッグ機能の中にDataSetビジュアライザ―があります。DataSetにセットした各テーブルデータを表形式で確認できます。サンプルコードでは2つのDataTableを作成し、DataSetにそれらをセットしています。
//テーブル作成
DataTable dt = new DataTable(“students”);
//列(カラム)作成
dt.Columns.Add(“name”, typeof(string));
dt.Columns.Add(“number”, typeof(int));
dt.Columns.Add(“authenticity”, typeof(bool));
dt.Columns.Add(“description”, typeof(string));
//行(DataRow)作成
//1行目
DataRow dr;
dr = dt.NewRow();
dr[“name”] = “Taro”;
dr[“number”] = 1;
dr[“authenticity”] = true;
dr[“description”] = “Hello C#”;
//行をテーブルに追加
dt.Rows.Add(dr);
//2行目
dr = dt.NewRow();
dr[“name”] = “Koji”;
dr[“number”] = 2;
dr[“authenticity”] = false;
dr[“description”] = “Hello Java”;
dt.Rows.Add(dr);
//3行目
dr = dt.NewRow();
dr[“name”] = “Hanako”;
dr[“number”] = 3;
dr[“authenticity”] = true;
dr[“description”] = “Hello JavaScript”;
dt.Rows.Add(dr);
//fruitsテーブルを作成
DataTable dt_fruits = new DataTable(“fruits”);
dt_fruits.Columns.Add(“name”, typeof(string));
dt_fruits.Columns.Add(“price”, typeof(int));
dt_fruits.Columns.Add(“japanesename”, typeof(string));
DataRow dr_fruits;
dr_fruits = dt_fruits.NewRow();
dr_fruits[“name”] = “apple”;
dr_fruits[“price”] = 120;
dr_fruits[“japanesename”] = “りんご”;
dt_fruits.Rows.Add(dr_fruits);
dr_fruits = dt_fruits.NewRow();
dr_fruits[“name”] = “orange”;
dr_fruits[“price”] = 100;
dr_fruits[“japanesename”] = “オレンジ”;
dt_fruits.Rows.Add(dr_fruits);
dr_fruits = dt_fruits.NewRow();
dr_fruits[“name”] = “banana”;
dr_fruits[“price”] = 220;
dr_fruits[“japanesename”] = “バナナ”;
dt_fruits.Rows.Add(dr_fruits);
//2つのテーブルをDataSetに格納
DataSet ds = new DataSet();
ds.Tables.Add(dt);
ds.Tables.Add(dt_fruits);
Console.WriteLine();
DataSetにテーブルをセットしたあとの行にブレークポイントをおき、F5でデバッグを開始します。
DataSetの部分にポインタを合わせるとメニューがでますので、虫眼鏡をクリックしビジュアライザーをクリックします。
DataSetにセットされたテーブルが表形式で表示されました。