PDA

View Full Version : خالی گذاشتن آیتم عکس و خطا در درج



sattar1
چهارشنبه 08 شهریور 1391, 21:25 عصر
سلام به برنامه نویسان عزیز

بنده یک مشکله کوچکی برام به وجود اومده؟!!

بنده کدهایی رو به صورت زیر نوشتم :

در قسمت Using ها
using System.IO;

در قسمت فرم لود:
doctorTableAdapter1.Fill(dataSet1.doctor);

در قسمت درج اطلاعات:
MemoryStream Mspic = new MemoryStream();
pictureBox1.Image.Save(Mspic, pictureBox1.Image.RawFormat);
byte[] pic = Mspic.ToArray();

doctorTableAdapter1.InsertQuery(Convert.ToInt32(te xtBoxX1.Text.ToString()), textBoxX2.Text.ToString(), Mspic.ToArray());

پایگاه شامل اطلاعات زیر است :
کد از نوع عددی
نام از نوع Nvarchar
عکس از نوع image

توجه : آدرس عکس ذخیره نمیشود بلکه خود عکس را ذخیره میکنیم.

وقتی که یک عکسی را اضافه میکنیم به خوبی اطلاعات درج میشود
اما وقتی که عکسی را در picture box قرار نمیدهم خطا میگیرد


92027


این در حالیه که در پایگاه Sql بخش مربوط به عکس اجازه ی خالی بودن را دارد؟؟؟؟

ممنون میشم که کمک کنید تا این مشکل برطرف بشه.

meisam12
چهارشنبه 08 شهریور 1391, 21:58 عصر
سلام
خوب شما اون دستور را در try ... catch قرار دهید.

sattar1
چهارشنبه 08 شهریور 1391, 22:12 عصر
ممنون از نظرتون
اما این روش هم امتحان کرده بودم اما جواب نداد
تو این حالت روی Mspic.ToArray()
ایراد میگیره و اصلا چیزی ثبت نمیشه

Mahmoud.Afrad
چهارشنبه 08 شهریور 1391, 23:12 عصر
اگر فایلی قراره اضافه بشه تبدیل به آرایه کنید و اگر قرار نیست null رو قرار بدید string pathOfFile = // آدرس فایل
if (!string.IsNullOrEmpty(pathOfFile))
{
byte[] filebyte = System.IO.File.ReadAllBytes(pathOfFile);
doctorTableAdapter1.InsertQuery(Convert.ToInt32(te xtBoxX1.Text), textBoxX2.Text, filebyte);
}
else
doctorTableAdapter1.InsertQuery(Convert.ToInt32(te xtBoxX1.Text), textBoxX2.Text, null);

the king
چهارشنبه 08 شهریور 1391, 23:16 عصر
وقتی که یک عکسی را اضافه میکنیم به خوبی اطلاعات درج میشود
اما وقتی که عکسی را در picture box قرار نمیدهم خطا میگیرد

این در حالیه که در پایگاه Sql بخش مربوط به عکس اجازه ی خالی بودن را دارد؟؟؟؟

ممنون میشم که کمک کنید تا این مشکل برطرف بشه.
منبع شما یک Image ئه، حالا اگر قراره از داخل مشخصه Image ئه PictureBox باشه نباید به هیچ عنوان null باشه چون شیء ای که null که نمی تونه Save و
RawFormat داشته باشه، قبلش چک کنید که اگر pictureBox1.Image برابر null ئه pic تون null باشه و کاری به RawFormat و Mspic نداشته باشه :

byte[] pic;
if (pictureBox1.Image == null)
{
pic = null;
}
else
{
MemoryStream Mspic = new MemoryStream();
pictureBox1.Image.Save(Mspic, pictureBox1.Image.RawFormat);
pic = Mspic.ToArray();
}


امتحان کنید، شاید بجای null یک آرایه خالی بهتر باشه :

byte[] pic;
if (pictureBox1.Image == null)
{
pic = new byte[0];
}
else
{
MemoryStream Mspic = new MemoryStream();
pictureBox1.Image.Save(Mspic, pictureBox1.Image.RawFormat);
pic = Mspic.ToArray();
}

sattar1
چهارشنبه 08 شهریور 1391, 23:47 عصر
ممنون از دو دوست گرامی mafaman2003 و the king

بدین صورت به نتیجه رسیدم :

byte[] pic;
if (pictureBox1.Image == null)
{

doctorTableAdapter1.InsertQuery(Convert.ToInt32(te xtBoxX1.Text), textBoxX2.Text, null);

}
else
{
MemoryStream Mspic = new MemoryStream();
pictureBox1.Image.Save(Mspic, pictureBox1.Image.RawFormat);
pic = Mspic.ToArray();
doctorTableAdapter1.InsertQuery(Convert.ToInt32(te xtBoxX1.Text), textBoxX2.Text, Mspic.ToArray());
}