Рейтинг:
1
OriginalGriff
Ошибка довольно ясна:
can't cast system.DBNull type to System.Byte[];
Значение, возвращаемое из вашей базы данных, не является данными - это null. Это означает, что либо вы не вставили изображение в этот столбец при сохранении строки, либо это неправильный столбец.
Учитывая, что вы используете
SELECT * FROM
а затем получить доступ к вашим столбцам численно, начиная с 1, это наиболее вероятно.
Никогда не использовать
SELECT *
- всегда перечисляйте нужные вам столбцы. Таким образом, изменения в порядке столбцов БД не приведут к сбою вашего приложения, и вы не получите информацию, которая вам не нужна.
Так что попробуй:
SELECT PNM, Desc, Qty, PRC, Picture FROM Stock_tab ...
И используйте имя столбца для доступа к DataReader:
if (dr.Read())
{
txtpnm.Text = (string) dr["PNM"];
txtdesc.Text = (string) dr["Desc"];
txtqty.Text = dr["Qty"].ToString();
txtprc.Text = dr.["PRC"].ToString();
byte[] img = (byte[])dr["Picture"];
MemoryStream ms1 = new MemoryStream(img);
pbproduct.Image = Image.FromStream(ms1);
}
Member 11572517
спасибо, сэр, я постараюсь переодеться в соответствии с вами.
Member 11572517
Сэр, в соответствии с u я изменил его, но та же ошибка генерируется в Memorystream ms1 = new memorystream(img);, будет ли ошибка связана с изображением для хранения в БД и извлечения из него?
OriginalGriff
Что такое точное сообщение об ошибке?
Member 11572517
крайне сожалею, сэр, вот святой месяц Рамазан так, что я не мог ответить на него; ошибка: InvalidCastException была необработана:
Невозможно привести объект типа " System.DBNull", чтобы ввести " Syste. byte []".
еще раз крайне сожалею, сэр..
OriginalGriff
Все в порядке - никаких проблем.
Сообщение об ошибке означает, что значение, возвращаемое из вашей БД, равно NULL - в этом поле этой строки нет информации об изображении.
Итак, начните с этого: проверьте свою БД и свой код вставки, чтобы выяснить, почему ваша БД ничего не содержит, когда вы ожидаете, что у нее есть данные.
Если не имеет значения, что изображения нет, то сравните значение DB с DBNull.Значение перед тем, как вы попытаетесь его разыграть, и установите вместо него изображение по умолчанию.
Member 11572517
Сэр, в БД я использовал тип данных OLE Object для поля изображения, согласно исследованиям на разных сайтах, правильно это или нет? возможно, именно по этой причине изображение не может храниться в БД.
Member 11572517
Сэр, в БД я использовал тип данных OLE Object для поля изображения, согласно исследованиям на разных сайтах, правильно это или нет? возможно, именно по этой причине изображение не может храниться в БД.
OriginalGriff
Изображения могут храниться в БД, это не проблема (хотя на самом деле doign это может быть проблемой для некоторых людей):
http://www.codeproject.com/Tips/465950/Why-do-I-get-a-Parameter-is-not-valid-exception-wh
Показывает, как это сделать для SQL Server, но версия OleDb такая же.
Дело не в том, что изображение *не может* храниться в БД - они могут, а иногда вам это нужно, - но в том, что по крайней мере в одной строке вы *не* сохранили изображение или что-то еще. Это может быть допустимо в вашей системе, я не знаю. Но если это так, то вам нужно кодировать, когда это произойдет, используя DBNull.Ценность
Если это не так, то вам нужно посмотреть, как строка была создана без него, а затем исправить вашу БД, прежде чем двигаться дальше (и удалить нулевое разрешение из столбца БД, чтобы это не повторилось).
Member 11572517
Я думаю, сэр, это трудно понять, но я постараюсь понять, усвоить новый урок.
OriginalGriff
Это все, о чем мы можем просить! :)