今回は前回行を追加したので、追加した行を全部マルッと取得します。


-- 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メソッドが自動で生成してくれてます。