На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Заливка и извлечение изображений из базы sqlite на C#


Так интересно совпало, что я сейчас одновременно работаю над двумя очень похожими проектами. Одно из похожих их свойств – это хранение данных в базе sqlite. И в этом материале я расскажу вам, как заливать в данную базу картинки, а также извлекать и отображать без потери качества.

Как подключать sqlite к проекту C#, мы научились, теперь научимся остальному. Мы в прошлых проектах напрямую закидывали переменные в базу, без приведения типов, надеясь, что там все само разберется. Очень часто это так и есть, но для вообще такой вариант подходит больше для отладки, нежели для релизной программы.

Итак, кидаем на форму кнопку и элемент picturebox, даем ему имя, к примеру, pbFoto. Также добавляем элемент openFileDialog1. По нажатию кнопки должен у нас выполняться вот такой код:

private void button3_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "JPEG файлы (*,.jpg)|*.jpg|Bitmap файлы (*.bmp)|*.bmp|Все файлы (*.*)|*.*";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
pbFoto.ImageLocation = openFileDialog1.FileName;
}
}
То есть мы выбираем файл с нужным фильтром, затем изменяем свойство ImageLocation – чтобы картинка отобразилась в элементе. Далее интересный момент. Нам надо это изображение перевести в массив байт и засунуть в базу. Если мы возьмем этот же ImageLocation и проведем вот такую операцию:

byte[] bData = File.ReadAllBytes(pbFoto.ImageLocation);
File.WriteAllBytes(pbFoto.ImageLocation, bData);
То массив байт мы получим и сможем его залить в базу. Однако, качество изображения у данного способа будет неважным. Поэтому мы пойдем другим способом. Добавим метод:

       public byte[] imageToByteArray(System.Drawing.Image imageIn)
        {
            MemoryStream ms = new MemoryStream();
  imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            return ms.ToArray();
        }
И используем его так:

  byte[] bData = imageToByteArray(pbFoto.Image);
 
Далее вставляем картинку в базу по букварю, а не как мы делали раньше:

   using (SQLiteCommand command = new SQLiteCommand(m_dbConn))
                    {
                        command.CommandText = "insert into Chapter (id, img) VALUES (@id, @img)";
                        command.Parameters.Add("@id", DbType.Int32).Value = 4;
                        command.Parameters.Add("@img", DbType.Binary).Value = bData;
                        command.ExecuteNonQuery();
                    }
Извлекаем вот так:

       m_sqlCmd.CommandText = "SELECT * FROM Chapter WHERE id ='" + id + "'";
            try
            {
                SQLiteDataReader r = m_sqlCmd.ExecuteReader();
                r.Read();
    MemoryStream stmBLOBData = new MemoryStream((byte[])r["img"]);
    pbFoto.Image = Image.FromStream(stmBLOBData);
                pbFoto.Refresh();
                r.Close();
                r.Dispose();
            }
            catch (SQLiteException ex)
            {
                MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
Все просто, не правда ли?






тегизаметки, си шарп, изображения, базы данных, sqlite





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




Как побороть нервозность и раздражительность
Как начинается работа с готовым сайтом


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.