PDA

View Full Version : مشکل در لود فیلد خالی عکس



shaima
دوشنبه 23 شهریور 1388, 04:10 صبح
سلام
من یه عکس رو تو پایگاه اس کیو ال سیو میکنم، تو سیو و خوندن عکس هیچ مشکلی نیست، ولی اگر فیلد عکس خالی باشه ارور میده، کدم اینه:


byte[] pic = (byte[])dreader["nashr_pic"];
if (pic!= null)
{
if (pic.Length > 1)
{
MemoryStream stream = new MemoryStream();
stream.Write(pic, 0, pic.Length);
Bitmap img = new Bitmap(stream);
tasvir_jeld_picbox.Image = img;
}
else
tasvir_jeld_picbox.Image = null;

}

از کدی که قرمز کردم این ارور رو میگیره:
Unable to cast object of type 'System.DBNull' to type 'System.Byte[]'.

مشکل چیه؟!

atryad
دوشنبه 23 شهریور 1388, 04:24 صبح
سلام
من یه عکس رو تو پایگاه اس کیو ال سیو میکنم، تو سیو و خوندن عکس هیچ مشکلی نیست، ولی اگر فیلد عکس خالی باشه ارور میده، کدم اینه:


byte[] pic = (byte[])dreader["nashr_pic"];
if (pic!= null)
{
if (pic.Length > 1)
{
MemoryStream stream = new MemoryStream();
stream.Write(pic, 0, pic.Length);
Bitmap img = new Bitmap(stream);
tasvir_jeld_picbox.Image = img;
}
else
tasvir_jeld_picbox.Image = null;

}

از کدی که قرمز کردم این ارور رو میگیره:
Unable to cast object of type 'System.DBNull' to type 'System.Byte[]'.

مشکل چیه؟!

خوب دوست عزیز سلام
این عادی هست وقتی که هیچ اطلاعاتی توی فیلد عکس نیست باید error بگیره سیستم که نمیتونه null رو به byte تبدیل کند'System.DBNull' to type 'System.Byte
که بایک try و cath درست میشه
من هم همینطور بود که با کد زیر درست میشه


try
{
MemoryStream ms = newMemoryStream((byte[])(dataGridView1.Rows[dataGridView1.SelectedCells[0].RowIndex].Cells[9].Value));

pictureBox1.BackgroundImage = Image.FromStream(ms);
}
catch
{
MessageBox.Show("عکس ندارد", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}


که خودش میتونه باعث هشدار به کاربر بشه
و یا میتونی هر فیلدی که خالی باشه یه عکس خاص (مثلا یه ضربدر قرمز بزرگ) بذاری تا درست بشه
با تشکر

shaima
دوشنبه 23 شهریور 1388, 05:01 صبح
یعنی واقعا هیچ راهی جز try , catch یا گذاشتن یه عکس ضربدر نیست؟! :متفکر:
خب پس اون موقع ما اجازه null بودنی که تو دیتابیس قرار میدیم به چه دردی میخوره؟!

hozouri
دوشنبه 23 شهریور 1388, 11:15 صبح
با شرط زیر مشکل شما حل میشه :

if(dreader["nashr_pic"] != null)
//statment

shaima
دوشنبه 23 شهریور 1388, 12:22 عصر
با شرط زیر مشکل شما حل میشه :

if(dreader["nashr_pic"] != null)
//statment

سلام
من کدم رو به این شکل تصحیح کردم:


if (dreader["nashr_pic"]!= null)
{
pic=(byte[])dreader["nashr_pic"];
if (pic.Length > 1)
{
MemoryStream stream = new MemoryStream();
stream.Write(pic, 0, pic.Length);
Bitmap img = new Bitmap(stream);
tasvir_jeld_picbox.Image = img;
}
else
tasvir_jeld_picbox.Image = null;

}


ولی بازم از خطی که مشخص کردم همون ارور قبلی رو میگیره! یعنی چه فیلد خالی باشه چه پر وارد دستور if میشه!! و اگر فیلد خالی باشه از این خط ارور میگیره...

hozouri
دوشنبه 23 شهریور 1388, 12:41 عصر
دوست عزیز من نمی دونم شما چه طور کد نوشتید اما باید به شکل زیر مشکل شما حل بشه :



if(dreader["nashr_pic"] != null)
}
byte[] pic = (byte[])dreader["nashr_pic"];
.
.
.
{

shaima
دوشنبه 23 شهریور 1388, 12:50 عصر
دوست عزیز من نمی دونم شما چه طور کد نوشتید اما باید به شکل زیر مشکل شما حل بشه :



if(dreader["nashr_pic"] != null)
}
byte[] pic = (byte[])dreader["nashr_pic"];
.
.
.
{

من پاسخ قبلی رو که داده بودم ویرایش کردم، یه بار دیگه ببینید، من هم دقیقا همین کد رو نوشتم...