C# SQLite・ファイルの登録と復元(BLOB型 登録と取得)

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

概要説明

ファイルの登録と復元を行うサンプルです。

サンプルでは以下の処理を行っています。

 

①画像ファイルをバイト配列に読みこむ。

②sampleテーブルのBLOB型の項目にバイト配列を登録する。

③sampleテーブルのBLOB型の項目からバイト配列にキャストしてデータを取得する。

④バイト配列を画像ファイルに書き込む。

プログラミング

言語:C#

using System.Data.SQLite;
using System.IO;

/// <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();

        // テーブルを作成する
        string sql = "";
        sql += "CREATE TABLE IF NOT EXISTS sample ";
        sql += "( ";
        sql += "  no INTEGER NOT NULL, ";
        sql += "  title TEXT, ";
        sql += "  file_name  TEXT, ";
        sql += "  file_binary BLOB, ";
        sql += "  PRIMARY KEY(title) ";
        sql += ") ";
        cmd.CommandText = sql;
        cmd.ExecuteNonQuery();

        // データを全て削除する
        sql = "DELETE FROM sample ";
        cmd.CommandText = sql;
        cmd.ExecuteNonQuery();

        // ファイルをバイト配列に変換する
        byte[] file_binary_from = File.ReadAllBytes(@"C:\写真\dog1.jpg");

        // データを挿入する
        sql = $" INSERT INTO sample VALUES (1,'犬', 'dog.jpg' ,@file_binary)";
        cmd.CommandText = sql;
        cmd.Parameters.Add("@file_binary", DbType.Binary).Value = file_binary_from;
        cmd.ExecuteNonQuery();

        // データを取得する
        sql = $" SELECT * FROM sample ";
        cmd.CommandText = sql;
        SQLiteDataReader reader = cmd.ExecuteReader();
        reader.Read();

        // BLOBのファイルをバイト配列に変換する
        byte[] file_binary_to = (byte[])reader["file_binary"];

        // ファイルに書き出す
        File.WriteAllBytes(@"C:\写真\dog2.jpg", file_binary_to);

    }
    finally
    {
        // データベースを切断する
        con.Close();
    }
}

実行結果

C:\写真\dog1.jpg

C:\写真\dog2.jpg

サンプルを実行すると画像ファイル(dog1.jpg)がテーブルに登録されます。

登録後、そのテーブルから取得した画像ファイル(dog2.jpg)からデータが復元されます。

コメント

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