SQLiteはバイナリデータも扱うことができます。
バイナリデータを格納できるので画像ファイルなどをデータベースに格納するといった使い方も可能ですね。
バイナリデータを格納できるテーブルを作成する
バイナリデータを格納したい場合にはテーブルのフィールド型にBLOB(Binary Large OBject)を使用します。
var connectionString = "Data Source=test.db";
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
var sql = "CREATE TABLE test (ID INTEGER, Data1 BLOB)";
using (var command = new SQLiteCommand(sql, connection))
{
command.ExecuteNonQuery();
}
connection.Close();
}
バイナリデータを追加する
テーブルにデータを挿入するためにはSQL文のINSERTを使いますが、バイナリデータをどうやってSQL文に?と思ってしまいますね。パラメータという仕組みを使ってバイナリデータをテーブルに格納する事ができます。
var connectionString = "Data Source=test.db";
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
var data1 = new byte[4];
data1[0] = 0x00;
data1[1] = 0x01;
data1[2] = 0x02;
data1[3] = 0x03;
var sql = "INSERT INTO test (ID,Data1) VALUES(1,@p1)";
using (var command = new SQLiteCommand(sql, connection))
{
var parameter = new SQLiteParameter();
parameter.ParameterName = "@p1";
parameter.DbType = System.Data.DbType.Binary;
parameter.Value = data1;
command.Parameters.Add(parameter);
command.ExecuteNonQuery();
}
connection.Close();
}
上記の例では、SQL文のバイナリデータの値としたい部分に「@p1」という指定がされています。
さらに、15~18行目でSQLiteParameterというオブジェクトを作成していていますね。
SQL文の「@p1」の部分をSQLiteParameterで指定した値に置き換えるという仕組みです。
(名前は@で始める必要があります)
SQLiteParameterの「ParameterName」にSQL文の置き換える名前を指定し、
SQLiteParameterの「DBType」にはデータの型を示すBinaryを指定し、
SQLiteParameterの「Value」に格納したいデータを指定します。
そしてこのSQLiteParameterをSQLiteCommandのParametersへAddするという使い方になります。
バイナリデータを取得する
データベースに格納したバイナリデータを取り出したい場合はSQLiteDataReaderクラスを使って取得できます。
var connectionString = "Data Source=test.db";
using (var connection = new SQLiteConnection(connectionString))
{
connection.Open();
var sql = "SELECT * FROM test";
using (var command = new SQLiteCommand(sql, connection))
{
using (var reader = command.ExecuteReader())
{
while (reader.Read())
{
var data1 = (byte[])reader["Data1"];
}
reader.Close();
}
}
connection.Close();
}
SQLiteDataReaderオブジェクトから該当のフィールドの値をbyte配列にキャストして取り出します。

コメント
コメントを投稿