rashmi singhai Ответов: 1

Аргумент несовместим с изображения


гл.PoojaBarcode =Система.Текст.Кодирование.Юникод.GetString(BarcodeImage (clsvaboj.Штрих-код))
здесь изображение штрих-кода найти, но когда я вставляю в таблицу
затем я получил ошибку
аргумент несовместим с изображения
а в базе данных poojabarcode (columnname)уже есть тип изображения.

Что я уже пробовал:

аргумент несовместим с изображения

Garth J Lancaster

если вы хотите сохранить изображение в столбце NVarChar, я думаю, вам придется преобразовать байты изображения в base64 (символы) ... это не самый лучший вариант - VarBinary или Binary-лучшие варианты для типа столбца - взгляните на это https://msdn.microsoft.com/en-us/library/ms187752.aspx

У меня также возникли бы серьезные вопросы о дизайне базы данных и о том, нужно ли хранить изображения в базе данных, а не в файловой системе и т. д., И если вам действительно нужно хранить изображения в БД, оптимизируя таблицу для хранения изображений

1 Ответов

Рейтинг:
1

OriginalGriff

Проблема в том, что то, что вы пытаетесь вставить в столбец изображения базы данных, является string - который является NVARCHAR - и столбец требует VARBINARY данных, или byte массив.
Разница в том, что string изготовлен из char значения, которые являются 16-битными значениями, которые не обязательно допускают все возможные значения. С другой стороны byte данные являются 8-битными и допускают полный диапазон значений в этих восьми битах: от 0 до 255 включительно.
Что вам нужно сделать, так это преобразовать ваше изображение в байтовые данные вместо строки, и я не могу точно сказать вам, как это сделать, так как понятия не имею, что возвращает ваш метод BarcodeImage.
Однако это может помочь: Почему я получаю " параметр недопустим." исключение, когда я читаю изображение из своей базы данных?[^]- он показывает, как преобразовать изображение в массив байтов и передать его в БД.


rashmi singhai

я использовал для BarcodeImage метод
BarcodeLib.Штрих-кода б = новый BarcodeLib.Штрих-код();
#регион генерирует штрих-код
private byte[] BarcodeImage(string barcodenum)
{
Система.Окна.Формы.PictureBox pic = новая система.Окна.Формы.Элемент управления PictureBox();

типа var = BarcodeLib.Тип.Неуточненные;
тип = BarcodeLib.Тип.CODE128;
если (тип != BarcodeLib.Тип.Неуточненные)
{

фильм.Image = b. Encode(тип, штрих-код, система.Рисование.Цвет.Черный, Система.Рисование.Цвет.Белый, 250, 40);
}
MemoryStream ms = новый MemoryStream();
фильм.Изображение.Сохранить (ms, System.Рисование.Изображений.ImageFormat.ПНГ);
Byte[] данные = МС.GetBuffer();

возвращать данные.Метод toArray();
}
#endregion

OriginalGriff

Итак (не обращая внимания на то, что вы преобразуете байтовый массив в байтовый массив), он возвращает данные, которые вы хотите сохранить: так почему же вы затем преобразуете их в строку, чтобы сохранить в двоичный столбец? Это уже двоичные данные в правильном формате, которые можно напрямую передать в вашу БД через параметр.