今回は前回行を追加したので、追加した行を全部マルッと取得します。
-- code ---------------
/*
テーブル名がTests
カラムが
TestID (インクリメント)
Memo varchar(2000)
InputDate datetime
*/
using (SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=MySample;Integrated Security=True")) {
try {
SqlCommand com = new SqlCommand();
com.CommandText = "SELECT * FROM Tests";
com.Connection = conn;
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = com;
DataSet ds = new DataSet();
adapter.Fill(ds, "Tests");
foreach(DataRow row in ds.Tables["Tests"].Rows){
Console.WriteLine("[{0}]\r\n{1}\r\n", dr["InputDate"], dr["Memo"]);
}
}
catch (Exception ex) {
Console.WriteLine(ex);
}
}
----------------------
タイトルにもあるインメモリは、簡単に言うとメモリ内でデータベースを構築することです。
データベースはDataSet型です。
DataSetはDataTableを保持し、DataTableはDataRowを保持します。
DataRowがデータベースの行に相当します。
SqlDataAdapterでDataSet内に指定したSQLで自動でDataTableを作成してます。
後は、一行づつ呼び出して、日付とメモを出力してます。
ちなみに、ConnectionをOpenしていないですが・・・SqlDataAdapterのFill内でOpenしていない場合は自動でOpenからCloseまでをやってくれます。
ただし、Fillを2回も3回も呼び出す場合は、都度OpenとCloseを繰り返すので最初にOpenをしておくとオーバヘッドを減らすことができます。
DataTableの定義は、もちろんコードで書くこともできますが、Fillメソッドが自動で生成してくれてます。