3流プログラマのメモ書き

元開発職→現社内SEの三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.NET)DataReaderで取得したデータをDataTableとしてもつ方法

接続型でDBにクエリを実行した場合、結果はDateReaderで取得することになるかと思います。
その結果をさくっとDataTableに変換したいという場合は、DataTable.Loadメソッドを使うといいようです。
例えば System.Data.SQLite ライブラリを使った場合はこんな感じ。

SQLiteConnection sqlite_con = new SQLiteConnection();
//SQLite接続文字列定義
sqlite_con.ConnectionString = "Version=3;Data Source=test.sqlite;Compress=True;";
//DB接続
sqlite_con.Open();
SQLiteCommand sqlite_cmd = sqlite_con.CreateCommand();
sqlite_cmd.CommandText = "SELECT id , name , value FROM tbl WHERE name LIKE @nameparam ";
//クエリのパラメータ設定
sqlite_cmd.Parameters.Add("nameparam", DbType.String);
sqlite_cmd.Parameters["nameparam"].Value = "hoge%";
//クエリ実行 結果はDataReaderで取得
SQLiteDataReader reader = sqlite_cmd.ExecuteReader();

//結果を保存するDataTable
DataTable tbl = new DataTable();
//DataReaderをDataTableに読み込む。
tbl.Load(reader);

//結果表示
foreach (DataRow row in tbl.Rows)
{
    foreach (object item in row.ItemArray)
    {
         Console.Write(item.ToString() + ",");
    }
    Console.WriteLine(" ");
}


/* DataReaderでループして読み込む場合は以下のようにする。
while (reader.Read())
{
    Console.WriteLine(reader["id"] + "," + reader["name"] + "," + reader["value"] );
}*/


//接続終了
sqlite_con.Close();

参考:
MSDN:ADO.NET 2.0 の新しい DataSet 機能