Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/40: Рейтинг темы: голосов - 40, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 03.04.2015
Сообщений: 2

Вставка и извлечение файлов из БД

04.06.2015, 12:52. Показов 7525. Ответов 11
Метки нет (Все метки)

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

ссылка https://www.cyberforum.ru/ado-... 26692.html

понятна, но как файл в двоичный массив переделать и обратно??

типа как изменить этот код под файл

C#
1
2
3
Image image = Image.FromFile(fileName);                                                                               //Изображение из файла.
MemoryStream memoryStream = new MemoryStream();                                                                       //Поток в который запишем изображение
image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);
и соответственно

C#
1
2
3
4
5
6
7
8
9
10
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();
        }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2015, 12:52
Ответы с готовыми решениями:

Сохранение различных файлов в теле програмы (в создаваемой нами) и извлечение их(файлов) на локальный диск
Кароч тута такие дела: есть куча разных файликов которые пользователь проги недолжен видеть.При запуске моей проги, она(прога) всю ту туеву...

Извлечение файлов из CAB
Как программно извлечение файл из CAB файла? Заранее благодарю.

Извлечение файлов из папок
На входе мы получаем путь к папке, мы должны вернуть путь ко всем файлам, лежащим в этой папке. Помогите пожалуйста, вообще не понимаю...

11
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
04.06.2015, 12:56
Цитата Сообщение от tregit Посмотреть сообщение
как файл в двоичный массив переделать и обратно??
Пространство имен System.IO, класс File(), методы ReadAllBytes(), WriteAllBytes().
1
 Аватар для wm_leviathan
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
04.06.2015, 12:59
Лучший ответ Сообщение было отмечено tregit как решение

Решение

лови, на примере pdf. Загрузка в базу и выгрузка из базы двоичных файлов.
DatabaseTestApp.rar
3
3 / 3 / 1
Регистрация: 22.03.2013
Сообщений: 63
24.03.2016, 21:59
А есть код для изменения картинки? У кого есть пожалуйста помогите уже 3 день мучаюсь не могу сообразить что до как.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18291 / 14214 / 5368
Регистрация: 17.03.2014
Сообщений: 28,891
Записей в блоге: 1
24.03.2016, 23:31
dimok0007, по идее SqlDbType.VarBinary + значение параметра в виде byte[] должны решить проблему
0
 Аватар для wm_leviathan
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
25.03.2016, 08:58
Цитата Сообщение от dimok0007 Посмотреть сообщение
А есть код для изменения картинки?
а что ты конкретно подразумеваешь ? изменить ее (картинку) на 2ичном уровне ? Вставить в базу одну картинку а вытащить уже измененную ?
1
3 / 3 / 1
Регистрация: 22.03.2013
Сообщений: 63
25.03.2016, 10:12
wm_leviathan, Ну да, есть кнопка редактировать и ты указываешь новый путь к картинке, и текущая картинка заменяется новой. Могу скинуть проект, где я многое чего перепробовал, но в любом случае мне пишет Ошибка синтаксиса Update, хотя что сам запрос правильный, потому что если вместо картинки редактировать текст который есть в этой таблице то запрос срабатывает.
0
3 / 3 / 1
Регистрация: 22.03.2013
Сообщений: 63
25.03.2016, 10:17
Прикрепляю проект. В проекте много лишнего и не нужного, поэтому чтобы посмотреть где что не работает после запуска проекта нажать кнопку Добавить потом выбирается запись из DataGridView и жмем редактировать, и вот там все закоментенное мною испробованное. если может у кого есть 100 % рабочий код, и может скинуть я уже под себя переделаю
Вложения
Тип файла: 7z WindowsFormsApplication1foto.7z (4.10 Мб, 41 просмотров)
0
 Аватар для wm_leviathan
214 / 214 / 73
Регистрация: 12.01.2011
Сообщений: 767
25.03.2016, 10:18
dimok0007, скидывай, правда только вечером посмотрю. У меня линукс щас стоит а с mono не прокатит твой проект.
OwenGlendower, правильно сказал тип должен быть VarBinary, и в принципе с Update'ом проблем не должно быть. Возможно ты Id записи не ловишь. Скинь код чтения\записи картинки из базы и там где кнопка редактирования. Может что на глаз выяснится.
1
3 / 3 / 1
Регистрация: 22.03.2013
Сообщений: 63
25.03.2016, 22:09
OwenGlendower, пробовал и так, что то типо этого:
C#
1
2
3
4
5
6
7
8
9
string fileName = openFileDialog1.FileName;
 
            Byte[] blob;// = null;
            using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                blob = new Byte[fileStream.Length];
                fileStream.Read(blob, 0, blob.Length);
            }
            Update1.Parameters.Add("P_image", OleDbType.Binary, blob.Length).Value = blob;
Добавлено через 2 минуты
wm_leviathan,
Этот запрос 100 % работает с текстовыми полями и другими, но не с картинкой
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
string adres11 = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\ИТИ ИВТ\Бекапы прораммы для дипломки\WindowsFormsApplication1foto\WindowsFormsApplication1foto\bin\Debug\Basefoto.mdb");
                using (cn = new OleDbConnection(adres11))
                {
                    try
                    {
                        OleDbCommand Update1 = new OleDbCommand();
                        Update1.Connection = cn;
                        cn.Open();
                        Update1.CommandText = "Update tab set fio = ?, prodaja = ?, SrokGodn = ? WHERE id =" + idtab1;
                        Update1.Parameters.Add("P_fio", "fio").Value = Convert.ToString(textBox1.Text);    
                        Update1.Parameters.Add("P_prodaja", "prodaja").Value = Convert.ToBoolean(checkBox1.Checked);
                        Update1.Parameters.Add("P_SrokGodn", "SrokGodn").Value = Convert.ToDateTime(dateTimePicker1.Value);
                        Update1.ExecuteNonQuery();
                        cn.Close();
                        MessageBox.Show("Запись успешно отредактированна");
                    }
                    catch (OleDbException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
Добавлено через 7 минут
wm_leviathan,
Далее пробую в этоn запрос подстроить и редактирование картинки и вот что получается:
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
                string adres11 = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\ИТИ ИВТ\Бекапы прораммы для дипломки\WindowsFormsApplication1foto\WindowsFormsApplication1foto\bin\Debug\Basefoto.mdb");
                using (cn = new OleDbConnection(adres11))
                {
                    try
                    {
                        OleDbCommand Update1 = new OleDbCommand();
                        Update1.Connection = cn;
                        cn.Open();
                        Update1.CommandText = "Update tab set image = ?, fio = ?, prodaja = ?, SrokGodn = ? WHERE id =" + idtab1;
 
                       // Показываем диалог выбора файла
            openFileDialog1.ShowDialog();
            // В качестве имени сохраняемого файла устанавлиываем переменную fileName
            string fileName = openFileDialog1.FileName;
 
            Byte[] blob;// = null;
            using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
            {
                blob = new Byte[fileStream.Length];
                fileStream.Read(blob, 0, blob.Length);
            }
                       Update1.Parameters.Add("P_image", OleDbType.Binary, blob.Length).Value = blob;
                       // Update1.Parameters.Add("P_image", "image").Value =blob; //итак пробовал тоже ошибку пишет
                        Update1.Parameters.Add("P_fio", "fio").Value = Convert.ToString(textBox1.Text);
                   
                        Update1.Parameters.Add("P_prodaja", "prodaja").Value = Convert.ToBoolean(checkBox1.Checked);
                        Update1.Parameters.Add("P_SrokGodn", "SrokGodn").Value = Convert.ToDateTime(dateTimePicker1.Value);
 
 
 
                        Update1.ExecuteNonQuery();
                        cn.Close();
                        MessageBox.Show("Запись успешно отредактированна");
                    }
                    catch (OleDbException ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
В итоге пишет ошибка синтаксиса UPDATE

Добавлено через 2 минуты
Вот код добавления картинки в БД, он работает с этим проблем. Для наглядности скидываю:

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
OleDbConnection oleDbConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\ИТИ ИВТ\Бекапы прораммы для дипломки\WindowsFormsApplication1foto\WindowsFormsApplication1foto\bin\Debug\Basefoto.mdb");  //Подключение к БД.
 
 
 
                OleDbCommand oleDbCommand = new OleDbCommand("INSERT INTO `tab` (`image`,`fio`,`prodaja`,`SrokGodn`) VALUES (?,?,?,?) ", oleDbConnection);         //Запрос на вставку
 
                OleDbParameter oleDbParameter = new OleDbParameter("image", OleDbType.VarBinary);
                OleDbParameter oleDbParameter1 = new OleDbParameter("fio", OleDbType.WChar);
                OleDbParameter oleDbParameter2 = new OleDbParameter("prodaja", OleDbType.Boolean);
                OleDbParameter oleDbParameter3 = new OleDbParameter("SrokGodn", OleDbType.Date);
 
                a2 = Convert.ToString(OpenedFile);
                //string fileName = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures) + @"\woman.bmp";
                string fileName = Convert.ToString(a2);
                //-----
 
                Image image = Image.FromFile(fileName);                                                                               //Изображение из файла.
                MemoryStream memoryStream = new MemoryStream();                                                                       //Поток в который запишем изображение
                image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Bmp);                                                     //Сохраняем изображение в поток.
                oleDbParameter.Value = memoryStream.ToArray();                                                                        //Устанавливаем значение параметра
                oleDbParameter1.Value = Convert.ToString(textBox1.Text);
 
                oleDbParameter2.Value = checkBox1.Checked;
                oleDbParameter3.Value = Convert.ToDateTime(dateTimePicker1.Value);
 
                oleDbCommand.Parameters.Add(oleDbParameter);                                                                          //Добавляем параметр
                oleDbCommand.Parameters.Add(oleDbParameter1);
 
                oleDbCommand.Parameters.Add(oleDbParameter2);
                oleDbCommand.Parameters.Add(oleDbParameter3);
 
                oleDbConnection.Open();                                                                                               //Открываем соединение с БД
                oleDbCommand.ExecuteNonQuery();                                                                                       //Выполняем запрос.
                oleDbConnection.Close();                                                                                              //Закрываем соединение
                memoryStream.Dispose();                                                                               //Освобождаем память занятую изображением.
Добавлено через 1 минуту
Вот так извлекаю картинку из базы Acces и вывожу на форму:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  OleDbConnection connection1 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\ИТИ ИВТ\Бекапы прораммы для дипломки\WindowsFormsApplication1foto\WindowsFormsApplication1foto\bin\Debug\Basefoto.mdb");  //Создаем подключение
          
            OleDbCommand command_image = new OleDbCommand("SELECT image FROM tab WHERE id = " + id, connection1);
            connection1.Open();
            OleDbDataReader reader_image = command_image.ExecuteReader();
            while (reader_image.Read())
            {
                byte[] imageBytes = (byte[])reader_image[0];// цифра 2 это означает что 3 поле для храннеия изображений
                MemoryStream ms = new MemoryStream();
                ms.Write(imageBytes, 0, imageBytes.Length);
                Bitmap bmp = new Bitmap(ms);
                pictureBox1.Image = bmp;
            }
            connection1.Close();
Добавлено через 2 минуты
Мелкая поправочка, для тех кто решит этот код где использовать
C#
1
2
byte[] imageBytes = (byte[])reader_image[0];// цифра 0 это означает что поле номер 1  будет для хранения изображения, ну я так думаю
                MemoryStream ms = new MemoryStream();
Добавлено через 10 часов 54 минуты
OwenGlendower, может кто то посмотреть вложенный проект или хотя бы подсказку дать куда копать, бо все перепробовал что можно было?
0
3 / 3 / 1
Регистрация: 22.03.2013
Сообщений: 63
26.03.2016, 22:18
wm_leviathan, Спасибо большущее, очень сильно помог. Ошибка заключалась в основном, что в БД использовал название поля картинки image - а оно является служебным словом, так что используйте нижнее подчеркивание типа _image или как угодно называйте поле imageimg к примеру, но лучше как пользователь wm_leviathan, посоветовал писать так _image, то есть нижнее подчеркивание писать в названии любого поля. Ниже прикрепляю мой проект и проект wm_leviathan, где реализовано добавление, редактирование и удаление картинки.
Вложения
Тип файла: 7z Basefoto.7z (6.84 Мб, 25 просмотров)
Тип файла: rar PicToDB.rar (623.4 Кб, 27 просмотров)
0
3 / 3 / 1
Регистрация: 22.03.2013
Сообщений: 63
26.03.2016, 22:49
Случайно загрузил проекты еще раз)
Вложения
Тип файла: 7z Basefoto.7z (6.84 Мб, 46 просмотров)
Тип файла: rar PicToDB.rar (623.4 Кб, 42 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2016, 22:49
Помогаю со студенческими работами здесь

Извлечение файлов и каталогов
Объясните, каким образом происходит вычисление в цикле, что одно является каталогом а другое файлом. Меня интересует цикл из этого кода,...

Извлечение файлов из архива
Вобщем есть кнопочка, при нажатии которой, извлекается файл в нужной мне директории. Как сделать тихую разархивацию файлов, без всяких...

Извлечение эскизов из файлов
Всем привет! Нужна помощь со следующим: необходимо извлечь эскиз из любого файла (excel, word, рисунок итд) и поместить его в PictureBox,...

Извлечение заголовков из CSV файлов
Доброго времени суток! Столкнулся с задачей - необходимо извлечь информацию из CSV файла вместе с заголовками. Я могу лишь получить...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru