PDA

View Full Version : سوال: خطا در هنگام خواندن تصویر از دیتابیس



k1csharpdeveloper
جمعه 31 شهریور 1391, 17:05 عصر
دوستان عزیز من براحتی تصویر رو insert میکنم ولی موقع خواندن به خطای زیر برمیخورم و به این شکل عکس رو میخونم راهنمایی بفرمایید
خطا:
An unhandled exception of type 'System.ArgumentException' occurred in System.Drawing.dll

Additional information: Parameter is not valid.
کد نوشته شده برای خواندن از دیتابیس:
private void fillImage(int Id)
{

DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand("select * from tblBimaran where Id=@Id ", con);
cmd.Parameters.AddWithValue("@Id", Id);
da.SelectCommand = cmd;
con.Open();
da.Fill(ds, "tblBimaran");
byte[] b = (byte[])ds.Tables["tblBimaran"].Rows[0][23];
MemoryStream mem = new MemoryStream(b);

Image im = Image.FromStream(mem);

DataView dv = new DataView(ds.Tables["tblBimaran"]);
con.Close();
}
کد نوشتن در دیتابیس که مشکلی نداره ظاهرا:
private void btnImage_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
Image im = null;
dlg.Filter = "All Pictures|*.bmp;*.gif;*.jpg|Bitmaps|*.bmp|GIFs|*.gi f|JPEGs|*.jpg";
if (dlg.ShowDialog() == DialogResult.OK)
im = new Bitmap(dlg.FileName);
pictureBoxBimar.Image = null;
pictureBoxBimar.Image = im;
MemoryStream mstr = new MemoryStream();
im.Save(mstr, im.RawFormat);
arrImage = mstr.GetBuffer();
im.Dispose();


}

SharpSabre
جمعه 31 شهریور 1391, 20:36 عصر
در قسمت دوم : کد نوشتن در دیتابیس که فقط عکس رو تو arrImage ذخیره می کنه نه دیتابیس !
در قسمت اول هم عکس رو از دیتابیس فراخوانی می کنی که معلوم نیست عکسی باشه یا نه باید یک شرط بذاری که اگر بود ..

ehsanprog
جمعه 31 شهریور 1391, 21:33 عصر
یک نصیحت دوستانه خدمت شما : به جای ذخیره ی تصویر ، از ذخیره ی ادرس تصویر استفاده کنید ؛ روش بهینه تره.
اگر هم نگران بهم ریخته بودن مکان تصاویر هستید ، می تونید همه ی تصاویری که کاربر انتخاب می کنه رو در پوشه ای کنار برنامه داشته باشید و یک کپی از تصویر در ان قرار بدید ؛ این روش اسان ، سریع و مطمئن !

تصمیم باشماست.

k1csharpdeveloper
شنبه 01 مهر 1391, 00:45 صبح
من اون arrayImage رو فرستادم به متود insert و ذخیره هم کرده و مشکلی نیست من توی msdn جستجو کردم زده بحث stack overflow پیش اومده نمیدونم چرا درحالی که از این روش تو جای دیگه از برنامه استفاده کردم و مشکلی نبوده ولی اینجا مشکل بوجود اومده دوستمون هم پیشنهاد داده عکسها رو کنار روت برنامه بذارم بد نیست ولی منهمین الان تمام icon هایی رو هم که استفاده کردم بجای اینکهaddresource کنم local import کردم از توی bin..debug و امکان این هم هست که از آدرس استفاده کنم فقط میخوام کدی بنویسیم که امکان حذف تصاویر رو بگیره مگر اینکه برنامه uninstall بشه اگه بعدا ستاپی ساختم و توی اون مسیر دادم چون وحشت ناک نرم افزارم به تصاویر وابسته هست و اگه تصاویر نباشه نرم افزارم میخوابه

SharpSabre
شنبه 01 مهر 1391, 01:45 صبح
خوب همین که اقا احسان فرمودند آدرس رو بزار تو دیتابیس بعد برای حذفش هم ، آدرس رو حذف کن بهمراه فایل .