Как сохранить несколько изображений в Access на C#

Пример Сохранить изображения в базе данных Access в C# включает базу данных Access. К сожалению, если вы сохраняете несколько изображений в базе данных и затем открываете базу данных в Access, Access удаляет изображения. Он просто не понимает данные изображения.

Чтобы упростить использование базы данных, программа примера включает в себя кнопку «Загрузить все», которая загружает сразу несколько изображений. Он загружает одно изображение для каждой записи в таблице Books. Для загрузки этих изображений программа использует следующий код.

// Загрузка изображений для всех записей.
private void btnLoadAll_Click(object sender, EventArgs e)
{
    string[] titles =
    {
        "Advanced Visual Basic Techniques",
        "Beginning Database Design Solutions",
        ...
    };
    string[] filenames =
    {
        @"Images\avbts.jpg",
        @"Images\db_design_s.jpg",
        ...
    };

    this.Cursor = Cursors.WaitCursor;

    string image_dir = Path.GetFullPath(
        Path.Combine(Application.StartupPath, "..\\..")) + "\\";
    
    // Загружаем изображения.
    for (int i = 0; i < titles.Length; i++)
    {
        LoadRecordImage(titles[i], image_dir + filenames[i]);
    }

    this.Cursor = Cursors.Default;
    MessageBox.Show("Loaded " + titles.Length + " images.");
}

Метод начинается с создания двух массивов, один из которых содержит названия книг, а другой - имена файлов изображений. Изображения сохраняются в подкаталоге Images проекта, поэтому имена файлов начинаются с Images \.

После определения массивов программа использует метод Combine класса Path для объединения пути запуска приложения с относительным путем .. \ .. для поиска каталога проекта. (Тот, который содержит код, а не исполняемый файл.) Затем он использует GetFullPath, чтобы превратить комбинированный путь в действительный полностью определенный путь.

Этот код проходит через названия книг, вызывая метод LoadRecordImage, показанный в следующем коде для каждого названия и имени файла.

// Загрузите изображение одной записи.
private void LoadRecordImage(string title, string filename)
{
    try
    {
        // Получить изображение.
        Bitmap bm = new Bitmap(filename);

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

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

        // Добавьте изображение в качестве параметра.
        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
    {
        Conn.Close();
    }
}
 // Загрузите изображение одной записи.
private void LoadRecordImage (название строки, имя файла строки)
{
    пытаться
    {
        // Получить изображение.
        Bitmap bm = новый битмап (имя файла);

        // Установите изображение в базе данных.
        title = title.Replace ("'", "' '");
        OleDbCommand cmd = новый OleDbCommand (
            "UPDATE Books SET CoverImage = @ Image WHERE Название = '" +
            title + "'",
            Штат Коннектикут);

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

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

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

...

Для этого он создает объект OleDbParameter для растрового изображения, определяет его свойства соответствующим образом и выполняет оператор UPDATE.

Источник: http://csharphelper.com/blog/2017/05/save-several-images-into-access-in-c/

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