Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/523: Рейтинг темы: голосов - 523, средняя оценка - 4.50
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937

Вставка и извлечение изображений из БД.

27.06.2011, 17:00. Показов 96272. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте.
Достаточно часто возникает вопрос, как вставить/получить изображение из БД. Решил привести пример кода, что бы больше не создавалось подобных тем. Для первого примера я использовал базу данных Microsoft Access 2007
Вставка:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using System;
using System.Data.OleDb;
using System.Drawing;
using System.IO;
 
//Автор: Петррр
 
class Program
{
    static void Main(string[] args)
    {
         /***************************************************** 
         * На диске C:\ находится база данных Microsoft Access 2007
         * В базе данных одна таблица. Название таблицы: tab.
         * Поля:
         * id - Счетчик
         * image - Поле объекта OLE
         * В папке `Мои рисунки` находится файл Alien 1.bmp, который будем вставлять в БД.
         *******************************************************/
        OleDbConnection oleDbConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\db.accdb");  //Подключение к БД.
        OleDbCommand oleDbCommand = new OleDbCommand("INSERT INTO `Tab` ( `image` ) VALUES ( ? ) ", oleDbConnection);         //Запрос на вставку
        OleDbParameter oleDbParameter = new OleDbParameter("image", OleDbType.VarBinary);                                     //Параметр запроса
        string fileName = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + @"\Alien 1.bmp";                  //Путь к файлу
        Image image = Image.FromFile(fileName);                                                                               //Изображение из файла.
        MemoryStream memoryStream = new MemoryStream();                                                                       //Поток в который запишем изображение
        image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);                                                     //Сохраняем изображение в поток.
        oleDbParameter.Value = memoryStream.ToArray();                                                                        //Устанавливаем значение параметра
        oleDbCommand.Parameters.Add(oleDbParameter);                                                                          //Добавляем параметр
        oleDbConnection.Open();                                                                                               //Открываем соединение с БД
        oleDbCommand.ExecuteNonQuery();                                                                                       //Выполняем запрос.
        oleDbConnection.Close();                                                                                              //Закрываем соединение
        memoryStream.Dispose();                                                                                               //Освобождаем память занятую изображением.
    }
}
Получение:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Data.OleDb;
using System.Data.Common;
using System.Drawing;
using System.IO;
 
//Автор: Петррр
 
class Program
{
    static void Main(string[] args)
    {
        /***************************************************** 
         * На диске C:\ находится база данных Microsoft Access 2007
         * В базе данных одна таблица. Название таблицы: tab.
         * Поля:
         * id - Счетчик
         * image - Поле объекта OLE
         * В папке `Мои рисунки` находится файл Alien 1.bmp, который будем вставлять в БД.
         *******************************************************/
        OleDbConnection oleDbConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\db.accdb"); //Создаем подключение
        OleDbCommand oleDbCommand = new OleDbCommand("SELECT image FROM Tab WHERE id = 1", oleDbConnection);                 //Запрос на выборку
        oleDbConnection.Open();                                                                                              //Открываем соединение   
        OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader();                                                      //Делаем выборку
 
        if (oleDbDataReader.HasRows)                                                                                         //Проверяем есть ли в выборке строки
        {
            MemoryStream memoryStream = new MemoryStream();                                                                  //Создаем поток, в котором будем хранить изображение         
            foreach (DbDataRecord record in oleDbDataReader)                                                                 //Цикл для всех записей, полученных в результате выборки
                memoryStream.Write((byte[])record["image"], 0, ((byte[])record["image"]).Length);                            //Пишем в поток
            Image image = Image.FromStream(memoryStream);                                                                    //Получаем изображение из потока
            image.Save(@"C:\alien.BMP");                                                                                     //Сохраняем изображение на диск C:\
            memoryStream.Dispose();                                                                                          //Освобождаем память
        }
        else
            Console.Write("Запрос вернул ноль строк");                                                                       //Вывод сообщения
        oleDbConnection.Close();                                                                                             //Закрываем соединение с БД.
    }
}
________________________________________ ________________________________________ _________
Тоже самое делается и с SQL Server.
Вставка:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
using System;
using System.Data.SqlClient;
using System.Data;
using System.Drawing;
using System.IO;
 
//Автор: Петррр
 
class Program
{
    static void Main(string[] args)
    {
        SqlConnection sqlConnection = new SqlConnection(@"Data Source=COMP\SQLEXPRESS;Initial Catalog=db;Integrated Security=True;Pooling=False");
        SqlCommand sqlCommand = new SqlCommand("INSERT INTO tab ( image ) VALUES ( @img )", sqlConnection);
        SqlParameter sqlParameter = new SqlParameter("@img", SqlDbType.VarBinary);
        string fileName = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + @"\Alien 1.bmp";                  //Путь к файлу
        Image image = Image.FromFile(fileName);                                                                               //Изображение из файла.
        MemoryStream memoryStream = new MemoryStream();                                                                       //Поток в который запишем изображение
        image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
        sqlParameter.Value = memoryStream.ToArray();
        sqlCommand.Parameters.Add(sqlParameter);
        sqlConnection.Open();
        sqlCommand.ExecuteNonQuery();
        sqlConnection.Close();
        memoryStream.Dispose();
    }
}
Получение:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.Data.SqlClient;
using System.Data.Common;
using System.Drawing;
using System.IO;
 
//Автор: Петррр
 
class Program
{
    static void Main(string[] args)
    {
        SqlConnection sqlConnection = new SqlConnection(@"Data Source=COMP\SQLEXPRESS;Initial Catalog=db;Integrated Security=True;Pooling=False");
        SqlCommand sqlCommand = new SqlCommand("SELECT image FROM tab WHERE id = 1", sqlConnection);
        sqlConnection.Open();
        SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
        if (sqlDataReader.HasRows)
        {
            MemoryStream memoryStream = new MemoryStream();
            foreach(DbDataRecord record in sqlDataReader)
                memoryStream.Write((byte[])record["image"], 0, ((byte[])record["image"]).Length);
            Image image = Image.FromStream(memoryStream);
            image.Save(@"C:\1.BMP");
            memoryStream.Dispose();
            image.Dispose();
        }
        else
            Console.WriteLine("Пустая выборка");
        sqlConnection.Close();
    }
}
64
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.06.2011, 17:00
Ответы с готовыми решениями:

Извлечение изображений из БД
В базе есть таблица с изображениями(поле OLE). Пытаюсь извлечь их програмкой(C#) как показано здесь, но этапе Image...

Вставка и извлечение файлов из БД
Добрый день! Проблема в следующем - не могу организовать вставку и извлечение фала из базы данных SQL ссылка ...

Класс Матриц: вставка/извлечение столбца
Добрый вечер, у меня возникла такая проблема. Я только начал изучать классы и дуб дубом, а уже дали задание: Необходимо создать класс...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.06.2011, 17:00
Помогаю со студенческими работами здесь

Сохранение и извлечение изображений в файловой системе с использованием БД MySQL
Любезные, дайте пожалуйста, если у кого есть, ссылку(ки) на хранение, извлечение изображений с применением баз данных MySQL. Имеется ввиду,...

Извлечение данных из txt и вставка в одноименные листы, сохранение и очистка
Здравствуйте. Помогите с решением вопроса. В два разных txt файла - построчно записан текст с датой. В том же каталоге - находится...

Вставка изображений
Здравствуйте! Возникла необходимость вставлять изображение в любое место PictureBox-а по клику мыши. т.е. кликнула мышкой в середину - там...

Вставка изображений
Господа знатоки, кто скажет, отчего Access 2010 при выводе формы либо отчета, вставленную картинку отображает в виде значка? Как заставить...

Вставка изображений в БД
Прочитал тут статейку и решил сам написать код, вот что получилась: public bool ImagePaste() { bool imageresult...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Закрытая тема Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru