PDA

View Full Version : نمایش image درون db در picturebox



shirin_h
سه شنبه 11 دی 1386, 22:21 عصر
سلام
من در این مورد search کردم و به نتایج خوبی هم رسیدم کدی که براتون می زارم تو خیلی جاها مثل همین رو گذاشتن ولی نمی دونم چرا برا من error می ده .اگه ممکنه راهنماییم کنین


MemoryStream stream = newMemoryStream();
conn = newSqlConnection(constr);
string ct = "SELECT photo FROM student where (" +
"نام=@نام and نام_خانوادگی=@نام_خانوادگی" +
")";
SqlCommand command = new
SqlCommand(ct, conn);
command.Parameters.Add("@نام", SqlDbType.NVarChar, 50).Value = comboBox1.SelectedValue.ToString();
command.Parameters.Add("@نام_خانوادگی", SqlDbType.NVarChar, 50).Value = comboBox2.SelectedValue.ToString();
try
{
conn.Open();

byte[] image = (byte[])command.ExecuteScalar();
stream.Write(image, 0, image.Length);
Bitmap bitmap = newBitmap(stream);
//Response.ContentType = "image/gif";
//bitmap.Save(Response.OutputStream, ImageFormat.Gif);
pictureBox1.Image = bitmap;


}
finally
{
conn.Close();
stream.Close();
}

تو خط bitmap =new bitmap(stream )
error می ده که Parameter is not valid.
باید چه کار کنم؟
:ناراحت:

alirzn
سه شنبه 11 دی 1386, 22:46 عصر
این رو ببین کارتو راه میندازه.

shirin_h
سه شنبه 11 دی 1386, 23:45 عصر
کدی که تو برنامتون بود به صورت زیر نوشتم


try
{
conn.Open();
conn = newSqlConnection(constr);
string ct = "SELECT photo FROM student where (" +
"نام=@نام and نام_خانوادگی=@نام_خانوادگی" +
")";
SqlCommand command = new
SqlCommand(ct, conn);
command.Parameters.Add("@نام", SqlDbType.NVarChar, 50).Value = comboBox1.SelectedValue.ToString();
command.Parameters.Add("@نام_خانوادگی", SqlDbType.NVarChar, 50).Value = comboBox2.SelectedValue.ToString();
empadap = newSqlDataAdapter();
empadap.SelectCommand = command;
dset = newDataSet("dset");
empadap.Fill(dset);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
DataTable dataTable = dset.Tables[0];
//if there is an image in pctbox then delete it
if (pictureBox1.Image != null)
{
pictureBox1.Image.Dispose();
}
//using filestream object read the column as bytes and store it as an image
FileStream FS = newFileStream("image.jpg", FileMode.Create);
foreach (DataRow dataRow in dataTable.Rows)
{
//if(dataRow[1].ToString() == comboBox1.SelectedItem.ToString())
{
byte[] blob = (byte[])dataRow[0];
FS.Write(blob, 0, blob.Length);
FS.Close();
FS = null;
pictureBox1.Image = Image.FromFile("image.jpg");
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox1.Refresh();
}
}

برا این هم تو خط
FileStream FS = newFileStream("image.jpg", FileMode.Create);
error می ده که out of memory
همین image.jpg" رو باید بنویسم یا به جاش چیز دیگه ای بزارم؟

alirzn
چهارشنبه 12 دی 1386, 07:03 صبح
نه فرقی نمی کن که چی باشه.این کد می خواد اون byte هایی که از database آورده رو به یک فایل تبدیل کنه و فایل رو بسازه. مهم نیست اون اسم چی باشه. ببین type فیلد درون database که عکس درونش هست image هست؟ و اینکه باید یک فایل با اسمimage.jpg در کنار فایل اجرایی برنامت ایجاد بشه. اینون تست کن

shirin_h
چهارشنبه 12 دی 1386, 08:05 صبح
هم کنار فایل اجرایی برنامم یک فایل با اسمimage.jpg به وجود می یاد. هم type فیلد درون database که عکس درونش هست image هست.
حالا باید چی کار کنم؟
لطفآ کمکم کنین.
مرسی.

hassan razavi
چهارشنبه 12 دی 1386, 08:11 صبح
بجای ذخیره کردن تصویر بر هارد ، مستقیم از MS تصویر رو به کنترل بدید . اینجوری :


byte[] blob = (byte[])dataRow[0];
MemoryStream ms=new MemoryStream(blob ,0,blob .Lenght);
Image im=Image.FromStream(ms);
pictureBox1.Image =im;

shirin_h
چهارشنبه 12 دی 1386, 08:26 صبح
برا کد شما هم تو سطر

Image im = Image.FromStream(ms);

می گه parameter is not valid
همیشه یکی از این دو error بالا رو می ده به نظر هم کدام غیر منطقی نمی یاد
من از دیروز کارم شده ایجاد پروژه جدید و کپی پیست کردن کدهام چون بعد یه مدت که برنامم کار کرد رو بعضی فرم ها یا کنترل ها موقع اجرا error می ده که فایل source برنامت نیست از کجا وارد کنم؟
نمی دونم برا این مشکل چی کار باید بکنم
لطفآ کمکم کنین.
error ای که برا show کردن image هم می ده از این مشکل ناشی می شه؟

alirzn
چهارشنبه 12 دی 1386, 11:04 صبح
پس مشکل جای دیگست. اون proje که من فرستادم هم دقیقا همین error رو میده؟البته اصلا تغیرش نده. ببین همین error رو میده؟


برا کد شما هم تو سطر

Image im = Image.FromStream(ms);

می گه parameter is not valid
همیشه یکی از این دو error بالا رو می ده به نظر هم کدام غیر منطقی نمی یاد
من از دیروز کارم شده ایجاد پروژه جدید و کپی پیست کردن کدهام چون بعد یه مدت که برنامم کار کرد رو بعضی فرم ها یا کنترل ها موقع اجرا error می ده که فایل source برنامت نیست از کجا وارد کنم؟
نمی دونم برا این مشکل چی کار باید بکنم
لطفآ کمکم کنین.
error ای که برا show کردن image هم می ده از این مشکل ناشی می شه؟

hassan razavi
چهارشنبه 12 دی 1386, 11:23 صبح
اگه از خط Image im = Image.FromStream خطا میگیره ممکنه متغیر blob شما خالی باشه و از بانک چیزی استخراج نشده باشه. لطفا برنامه رو Trace کنید ببینید متغیر مقدار دهی میشه یا نه؟

shirin_h
چهارشنبه 12 دی 1386, 17:03 عصر
ممنونم که دانسته هاتونو دریغ نمی کنین
واقعآ ممنونم
با وجود این سایت و کسایی مثل شما میشه به ایرانی بودنمون افتخار کنیم و بگیم انقدر دنیامون کوچیک نیست که با کمک کردن واطلاعات دادن به دیگران از بین بره بلکه دنیامون بزرگتر هم میشه به وسعت همه آدمای خوب و غیر تنگ نظر.:لبخندساده:
امیدوارم به زودی که پروژمو تحویل دادم تا جایی که می تونم منم به دوستام کمک کنم
هر چند من سوادم اندازه شما نیست:خجالت:
ok
بگذریم
من جایی خوندم که برا image فرق نمی کنه که نوع داده تو db مون image باشه یا varbinary
ولی کدای بالا همه درست بودند ولی برا نوع داده varbinary جواب نمی دادند.نوعش رو image کردم و از اول insert کردم و بعد خوندم error ای نداد و تو picturebox ام نشون داد.
بازم ممنون که راهنماییم کردین.