Как сохранить несколько изображений в Access на C#
Пример
Чтобы упростить использование базы данных, программа примера включает в себя кнопку «Загрузить все», которая загружает сразу несколько изображений. Он загружает одно изображение для каждой записи в таблице 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.