C# SQLite・取得データから値を取り出す

C# サンプルコード プログラミング

概要説明

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}")));
        }

        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のどちらも同じ結果が出力されます。

コメント

タイトルとURLをコピーしました