sampleテーブルに登録されたデータを取得します。
次に取得したデータから値を取り出し、コンソール出力するサンプルです。
①方法1:SQLiteDataReader を使用して値を取得する方法
レコードを順次取り出す方法です。
レコードを読んでいる間はデータベースとの接続を閉じることが出来ません。
・データベースとのやり取りがレコード事に発生する。
・方法2に比べるとメモリの消費は低いかも?
②方法2:SQLiteDataAdapter を使用して値を取得する方法
レコードを全件取得してから処理を行う方法です。
取得後、データベースとの接続を切断してから処理を行えます。
・データベースとのやり取りが1回ですむ。
・方法1に比べるとメモリの消費は高いかも?
プログラミング
言語:C#
using System.Data.SQLite;
/// <summary>
/// button1クリック時処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
// 動物リスト
List<string> animalList = new List<string>() { "犬", "猫", "鳥","猿"};
// EXEの起動パスを取得する
string exePath = System.Windows.Forms.Application.StartupPath;
// DBフルパスを組みたてる
string dbFullPath = System.IO.Path.Combine(exePath, "test.db");
// 接続先データベースを指定する
SQLiteConnection con = new SQLiteConnection(String.Format($"Data Source = {dbFullPath}"));
DataTable dt = new DataTable();
try
{
// データベースと接続する
con.Open();
// SQLコマンドを宣言する
SQLiteCommand cmd = con.CreateCommand();
// テーブルを作成する
cmd.CommandText = " CREATE TABLE IF NOT EXISTS sample " +
" (no INTEGER NOT NULL, title TEXT,PRIMARY KEY(title))";
cmd.ExecuteNonQuery();
// データを全て削除する
cmd.CommandText = "DELETE FROM sample ";
cmd.ExecuteNonQuery();
// 動物リストを追加する
cmd.ExecuteNonQuery();
for (int i = 0; i < animalList.Count; i++)
{
// データを挿入する
cmd.CommandText = $" INSERT INTO sample VALUES ({i},'{animalList[i]}')";
cmd.ExecuteNonQuery();
}
Console.WriteLine("■ 方法1:SQLiteDataReader を使用して値を取得する方法");
cmd.CommandText = $" SELECT * FROM sample ";
SQLiteDataReader reader = cmd.ExecuteReader();
while (reader.Read() == true)
{
int no = int.Parse(reader["no"].ToString());
string title = reader["title"].ToString();
Console.WriteLine((String.Format($"no:{no} title:{title}")));
}
reader.Close();
Console.WriteLine("■ 方法2:SQLiteDataAdapter を使用して値を取得する方法");
// データを全件取得する
SQLiteDataAdapter adapter = new SQLiteDataAdapter("SELECT * FROM sample", con);
// adapterからdtにデータを読み込む
adapter.Fill(dt);
}
finally
{
// データベースを切断する
con.Close();
}
// 上記で取得したdtから値を取得する
foreach (DataRow dr in dt.Rows)
{
int no = int.Parse(dr["no"].ToString());
string title = dr["title"].ToString();
Console.WriteLine((String.Format($"no:{no} title:{title}")));
}
}
実行結果
方法1、方法2のどちらも同じ結果が出力されます。