Чтение и запись изображения в базу данных SQLite

И немного рекламы: свадебные салоны - свадебное платье через интернет http://www.novias.com.ua/.

Как-то, в комментарии к одной из моей статей спрашивали, как реализовать запись и чтение изображений в базу данных SQLite? Отвечаю.

Я создал тестовый проект, в котором файл читается с жесткого диска и записывается в базу данных, а затем, сразу, читается и отображается на экране. Общий принцип заключается в том, что необходимо создать поле типа BLOB и в виде массива byte записывать и считывать данные.

Тестовая таблица выглядит так:

CREATE TABLE [test] (
  [id] INTEGER,
  [text] TEXT,
  [img] BLOB);

Поле img имеет тип BLOB, в котором и будет храниться изобраение.

Далее, считываем файл и переводим его в массив Byte.

using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
	BinaryReader br = new BinaryReader(stream);

	long totalBytes = new FileInfo(path).Length;
	byte[] buffer = br.ReadBytes((Int32)totalBytes);
	stream.Close();
	br.Close();
...
}

Переменная buffer и будет хранить необходимы для записи данные.

Запись я выполняю с использованием своей любимой библиотеки dbFacade.

ParametersCollection paramss = new ParametersCollection();
paramss.Add("img", buffer, DbType.Binary);
dbFacade db = new dbFacade(pathToDatabase);
db.Update("test", paramss, "id = " + id);

В итоге у меня получается такой незамысловатый код.

В редакторе можно наблюдать следующую картину.

Чтение еще проще. Читаем данные сразу в массив Byte и заносим в MemoryStream, а от туда уже и в объект Image (с последним уже можно делать все, что угодно).

Select select = new Select().From("test").Columns("img, text").Where("id = " + id);
Byte[] buffer = (Byte[])new dbFacade(pathToDatabase).FetchOneRow(select)["img"];
MemoryStream ms = new MemoryStream(buffer);
return Image.FromStream(ms);

В итоге, код возвращает Image, который я «закидываю» в PictureBox.

Стоит отметить, что таким образом вы можете хранить не только файлы картинок. Это могут быть абсолютно любые файлы.

Популярность: 7%

Теги: , , , , ,

Если у вас возникли вопросы, вы можете оставить их в комментариях

Комментарии к статье

7 Ответов на “Чтение и запись изображения в базу данных SQLite”

Оставить комментарий

(обязательно)

(обязательно)


 

MAXCACHE: 0.32MB/0.00034 sec