Сохранение изображений в базе данных Access в WPF и C#

Пример Отображение изображений в Доступ к базе данных в WPF и C# показывает, как вы можете отображать изображения, сохраненные в базе данных Access. Конечно, возникает вопрос: «Как сохранить изображения в базе данных в первую очередь?» В этом примере показан один из способов сделать это.

Когда вы выбираете книгу из ListBox, а затем нажмите кнопку «Установить изображение», выполняется следующий код.

// Установите изображение для этого заголовка.
private void btnSetImage_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog dlg = new OpenFileDialog();
    dlg.Filter =
        "Image files|*.bmp;*.jpg;*.gif;*.png;*.tif|All files|*.*";
    dlg.FilterIndex = 1;

    if (dlg.ShowDialog() == true)
    {
        try
        {
            // Отображение изображения.
            BitmapImage bm =
                new BitmapImage(new Uri(dlg.FileName));
            imgCover.Source = bm;

            // Установите изображение в базе данных.
            // Поле CoverImage имеет тип OLE Object.
            string title =
                lstTitles.SelectedItem.ToString().Replace("'", "''");
            OleDbCommand cmd = new OleDbCommand(
                "UPDATE Books SET CoverImage=@Image WHERE Title='" +
                title + "'",
                Conn);

            // Создаем массив байтов, содержащий изображение.
            byte[] image_bytes = ImageToBytes(bm);

            // Добавьте изображение в качестве параметра.
            OleDbParameter param = new OleDbParameter();
            param.OleDbType = OleDbType.Binary;
            param.ParameterName = "Image";
            param.Value = image_bytes;
            cmd.Parameters.Add(param);

            // Выполнить команду (без возвращаемого значения).
            cmd.Connection = Conn;
            Conn.Open();
            cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            if (Conn.State != ConnectionState.Closed)
                Conn.Close();
        }
    }
}

Этот код начинается с создания OpenFileDialog, устанавливая его свойства Filter и FilterIndex и отображая диалог. Если пользователь выбирает файл, метод создает BitmapImage из файла и отображает его в элементе управления imgCover Image.

Далее код создает инструкцию SQL INSERT для обновления изображения выбранного заголовка. Он вызывает метод ImageToBytes (описанный в скором времени) для преобразования BitmapImage в массив байтов и создает объект параметра для байтов. Затем он вызывает метод ExecuteScalar команды для обновления записи.

В следующем коде показан способ ImageToBytes.

// Преобразование BitmapImage в массив байтов.
private static byte[] ImageToBytes(BitmapImage image)
{
    byte[] data;
    JpegBitmapEncoder encoder = new JpegBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(image));
    using (MemoryStream ms = new MemoryStream())
    {
        encoder.Save(ms);
        data = ms.ToArray();
    }
    return data;
}

Этот метод создает объект JpegBitmapEncoder для кодирования растрового изображения в виде данных JPEG. Он добавляет кадр в кодировщик для представления изображения. Затем он создает MemoryStream и вызывает метод Сохранить кодера, чтобы заставить его записывать свои данные в MemoryStream. Наконец, код вызывает метод MemoryStream ToArray для преобразования данных в массив байтов, который возвращает метод.

Источник: http://csharphelper.com/blog/2015/08/save-images-in-an-access-database-in-wpf-and-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector