Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Robin Bad на форуме
237 / 237 / 194
Регистрация: 14.12.2010
Сообщений: 513

Недопустимый параметр при считывании изображения из БД

18.05.2016, 00:37. Показов 1966. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Прошерстил сотни тем в поисках ответа, так и не нашёл. Не надо меня перекидывать на известные темы "Вставка" и "Получение" изображений из Базы данных.
Суть такова: Есть база данных с двумя таблицами. В каждой три поля (Не считая поле "Код"). Два - текстовых, одно - поле OLE. В полях OLE храню изображения .bmp (Именно изображения, а не адрес. Изначально хранил изображения .jpg). Получаю информации через команды пространства OleDB. Считывание текстовых данных проходит в обычном режиме, как только считываю изображение, так сразу ошибка.

Использовал и эту конструкцию:

C#
1
2
3
4
5
6
 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();
И эту:

C#
1
2
3
4
5
6
7
8
OleDbCommand cmd = new OleDbCommand("SELECT Picture FROM Rus WHERE Код = " + ... + "", conn); //Picture - столбец изображений, Rus - таблица
                OleDbDataReader read = cmd.ExecuteReader();
                while (read.Read())
                {
                    MemoryStream ms = (MemoryStream)read.GetStream(0);
                    bmp = new Bitmap(ms);
                }
                read.Close();
Ни один из найденных в интернете макетов не работает. Все вылетают на использовании MemoryStream:

C#
1
bmp = new Bitmap(ms);
или

C#
1
Image image = Image.FromStream(memoryStream);
Возможно, это как-то зависит от того, в каком формате я кидаю свои изображения в поле Picture?
Не думаю, что мой код потребуется, но если надо, готов приложить один из неработающих вызовов.

P.S. Резюме: Access 2007. Поле OLE с изображениями .bmp. Требуется считать в проект C# в виде Image или Bitmap
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2016, 00:37
Ответы с готовыми решениями:

Недопустимый параметр при создании таблицы
Заливается изображение успешно, все отлично. При выводе пишет "Недопустимый параметр". Можете подсказать где ошибка. create table...

Ошибка «недопустимый параметр» при динамическом создании элементов
Есть ли какие-то ограничения при создании элементов динамически? У меня вылетает ошибка "недопустимый параметр" если пытаюсь...

Ссылка на объект не указывает на экземпляр объекта при считывании байтов с изображения
Помогите решить данный вопрос: Я читаю байты с изображения начиная с 54 байта и эти байты по отдельности сохраняю в переменную типа...

5
 Аватар для NetFR
46 / 46 / 32
Регистрация: 10.05.2013
Сообщений: 180
18.05.2016, 01:25
Не разбираюсь в данной теме, но попробую чем-нибудь помочь, может хоть тему подниму. Описанный выше код без проблем выполняется, погуглил OLE и хранение в нем bmp, нашел инфу о том, что в случае не программного добавления первое некоторое количество байт сам заголовок, после - bmp со своим заголовком, а после этого еще и послесловие, и при попытке преобразования потока в рисунок обычным методом вылетает ошибка.

Кликните здесь для просмотра всего текста
Как прочитать правильный bitmap картинки из таблицы БД MS Access,
которая была сохранена там не програмно, а с помощью Microsoft Access 2000
Application из офис-пакета? Application сохраняет в поле таблицы:
информацию о файле + (сам bitmap stream) + еще какую-то дополнительную информацию
Потому, когда из данных blob-поля получаешь данные и создаешь Stream, то его размер
получается большим, чем размер FileStream файла, из которого картинка была сохранена
в базе и в результате получаем ошибку "Bitmap image is not valid". Как из базы прочитать
(отделить) имеено bitmap stream? Помогите, если это вообще возможно.

Многие запрашивали инфу на структуру OLE-поля, чтобы извлечь чистый bmp с заголовком, возможно проблема в этом? Извиняюсь, если понял неверно.
1
Robin Bad на форуме
237 / 237 / 194
Регистрация: 14.12.2010
Сообщений: 513
18.05.2016, 07:19  [ТС]
NetFR, спасибо. Схоже ли это с типом "Вложение"? Во вложении примерно такая же структура, насколько я знаю. Если так, то получается здесь надо писать не просто image, а image.БмпСоСвоимЗаголовком.

C#
1
memoryStream.Write((byte[])record["image"], 0, ((byte[])record["image"]).Length);
Осталось только найти, как это вложенное поле называется.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
18.05.2016, 08:19
Цитата Сообщение от marshal Посмотреть сообщение
В полях OLE храню изображения .bmp
У вас по одному изображению на запись? Если так, храните там не само изображение, а массив байт, которое оно из себя представляет. При выводе преобразуйте его в изображение. Примеров на форуме миллион.
1
Robin Bad на форуме
237 / 237 / 194
Регистрация: 14.12.2010
Сообщений: 513
18.05.2016, 15:34  [ТС]
insite2012, да, одно. То есть, в случае полей OLE и одной картинки надо хранить двоичные данные изображения в полях?

И ещё, есть такой тип вложения, существует ли и приветствуется ли работа с изображениями, сохранёнными во вложениях?

P.S. Простите за профанские вопросы, возможно, вы посоветуете какую-то конкретную книгу для программирования с access. Потому что только здесь получил информацию по поводу хранения изображений в самих БД, в многочисленных примерах про массивы байт ничего не говорится. Видимо, подразумевается, что где-то об этом уже известно изначально.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
18.05.2016, 17:33
Цитата Сообщение от marshal Посмотреть сообщение
надо хранить двоичные данные изображения в полях?
По крайней мере, так гораздо проще.
Цитата Сообщение от marshal Посмотреть сообщение
есть такой тип вложения
Есть такой. Помню была тема, кто-то с ним тут бился. Победил или нет - не помню.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2016, 17:33
Помогаю со студенческими работами здесь

Exception "Недопустимый параметр" при вызове конструктора Bitmap(Image)
Image diff() { if (curr == null || prev == null) return null; Bitmap rszCurr = new Bitmap(curr, new...

Недопустимый параметр
Как решить?

Недопустимый параметр : ArgumentException
RotateImage(image, image, (float) angle); Bitmap bm = new Bitmap(image); после поворота выводит ошибку здесь Bitmap bm = new...

Недопустимый параметр connectionstring
Есть вот такой код, пытаюсь вывести в датарид содержимое таблицы из базы данных. Но вываливается ошибка. Код взял из соседних тем, но не...

ShowDialog Недопустимый параметр
Доброе время суток! Добавил в проект класс DataGridViewEx.cs public class DataGridViewEx : System.Windows.Forms.DataGridView ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru