Сохранение изображения из Form (Visual Studio) в БД (Access)

Загрузку изображения в form выполняю через следующий код:

OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Image Files(*.BMP;*.JPG;*GIF;*.PNG)|*.BMP;*.JPG;*GIF;*.PNG|All files (*.*)|*.*";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    pictureBox1.Image = new Bitmap(ofd.FileName);
                }
                catch
                {
                    MessageBox.Show("Невозможно открыть выбранный файл", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

Скорей всего для данного действия нужны доп. библиотеки. Обычно данные (текстовые) передаю через запрос INSERT INTRO, как здесь верно оформить, не представляю. Заранее спасибо за помощь!


Ответы (1 шт):

Автор решения: Yotic
  1. Проблема в том, что OpenFileDialog должен утилизироваться, в вашем же случае этого не происходит.
  2. В вашем случае нужно использовать StringBase64.
using(OpenFileDialog ofd = new OpenFileDialog())
{
   ofd.Filter = "Image Files(*.BMP;*.JPG;*GIF;*.PNG)|*.BMP;*.JPG;*GIF;*.PNG|All files (*.*)|*.*";
   if (ofd.ShowDialog() == DialogResult.OK)
   {
      try
      {
         Image image = new Bitmap(ofd.FileName);
         using (MemoryStream m = new MemoryStream())
         {
            image.Save(m, image.RawFormat);
            string stringToSave = Convert.ToBase64String(m.ToArray());
         }
      }
      catch
      {
         MessageBox.Show("Невозможно открыть выбранный файл", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
      }
   }
}

Вы будете сохранять В ДБ, не изображение, а строку. Чтобы её конвертировать обратно используйте:

Image image = Image.FromStream(new MemoryStream(Convert.FromBase64String(stringToConvert)));
→ Ссылка