Форум программистов, компьютерный форум CyberForum.ru

C# и базы данных, ADO.NET

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 267, средняя оценка - 4.68
Петррр
5942 / 3379 / 336
Регистрация: 28.10.2010
Сообщений: 5,926
#1

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

27.06.2011, 17:00. Просмотров 36367. Ответов 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();
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2011, 17:00     Вставка и извлечение изображений из БД.
Посмотрите здесь:
Вставка и извлечение файлов из БД C#
C# Вставка изображений в БД
Вставка изображений в pictureBox и datagridview из базы данных C#
Извлечение картинки из БД C# .NET 4.x
C# Извлечение данных из бд
C# Извлечение данных
Извлечение данных из бд access C#
Извлечение первичного ключа C#
C# Извлечение данных из DataSet
Извлечение данных из DataTable в ListBox C#
C# Извлечение данных из двух таблиц
Извлечение изображения из ячейки в Datagridview C#

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru