ファイルの登録と復元を行うサンプルです。
サンプルでは以下の処理を行っています。
①画像ファイルをバイト配列に読みこむ。
②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)からデータが復元されます。