Visual Studio C#でSQLiteを使ってみる

環境

System.Data.Sqliteにて、VisualStudio2017 C# .NET framework4.6.1でSQLiteを使ってみます。

WPFアプリの作成

NuGetでSystem.Data.SQLiteを取得

NuGetパッケージの管理をクリック

検索テキストボックスにSystem.Data.SQLiteと入力

一番上に出てきたSystem.Data.SQLiteをインストールする

依存関係のあるパッケージも併せてインストールされます

DBとテーブルの作成

using System.Data.SQLite;

を加える

Xaml上にテーブル作成ボタンを配置

イベントに追加

private void B_MakeDB_Click(object sender, RoutedEventArgs e)
{
    // コネクションを開いてテーブル作成して閉じる  
    using (var con = new SQLiteConnection("Data Source=test.db"))
    {
        con.Open();
        using (SQLiteCommand command = con.CreateCommand())
        {
            command.CommandText = "create table t_product(CD INTEGER  PRIMARY KEY AUTOINCREMENT, productname TEXT, price INTEGER)";
            command.ExecuteNonQuery();
        }

        con.Close();
    }
}

 

実行すると、test.dbができている事を確認

DBへの接続

DB接続ボタンを設置

イベントに追加

private void B_Con_Click(object sender, RoutedEventArgs e)
{
    using (SQLiteConnection con = new SQLiteConnection("Data Source=test.db"))
    {
        try
        {
            con.Open();
            MessageBox.Show("接続に成功しました");
        }
        catch (Exception Ex)
        {
            MessageBox.Show(Ex.Message);
        }
    }
}

 

接続確認

データ書き込み

DB書き込み用のテキストボックス準備

using (SQLiteConnection con = new SQLiteConnection("Data Source=test.db"))
{
    con.Open();
    using (SQLiteTransaction trans = con.BeginTransaction())
    {
        SQLiteCommand cmd = con.CreateCommand();

        // インサート
        cmd.CommandText = "INSERT INTO t_product (productname, price) VALUES (@Product, @Price)";

        // パラメータセット
        cmd.Parameters.Add("Product", System.Data.DbType.String);
        cmd.Parameters.Add("Price", System.Data.DbType.Int64);

        // データ追加
        cmd.Parameters["Product"].Value = t_Product.Text;
        cmd.Parameters["Price"].Value = int.Parse(t_Price.Text);
        cmd.ExecuteNonQuery();

        // コミット
        trans.Commit();
    }
}

※めんどくさかったので、テキストボックスのinteger判断などはしてない

A5:SQL Mk-2を使って、テーブルが出来ているか、レコードができているか確認

ちゃんとできている

データ取得

dataGridを配置

<DataGrid x:Name="dataGrid" HorizontalAlignment="Left" Height="164" Margin="336,215,0,0" VerticalAlignment="Top" Width="348"  ItemsSource="{Binding}" AutoGenerateColumns="True" />

xamlにItemSource={Binding} AutoGenerateColumns=”True” を追記

using (SQLiteConnection con = new SQLiteConnection("Data Source=test.db"))
{
    // DataTableを生成します。
    var dataTable = new DataTable();

    // SQLの実行
    var adapter = new SQLiteDataAdapter("SELECT * FROM t_product",con);
    adapter.Fill(dataTable);

    dataGrid.DataContext = dataTable;
}

 

データを取得できたことを確認

パスワード暗号使えない

さて、DBをパスワード暗号化しようと思ったら使えませんでした。どうも、System.Data.Sqliteには標準で組みこまれていないようです。別途ソースコンパイルなどをしないといけないようでめんどくさそう。

そこで簡単に実装できる方法を試してみました。