PDA

View Full Version : سوال: ذخیره عکس در دیتا بیس



vahdani_d
شنبه 13 اسفند 1390, 11:39 صبح
توی قسمتی از کد گیر کردم و نمیدونم چطور باید ذخیره بشه
یک فرم گذاشتم که دوتا button داره و یک pictureBox و دیتا بیسمم sql server هست
دو تا فیلد داره id , pic که id کلید اصلی و اتوماتیک مقدار میگیره نوع int و pic هم تایپش رو binary(50 انتخاب کردم (توی پستها که سرچ میکردم بچه ها پیشنهاد داده بودن از نوع باینری باشه و .. اگه اشتباست پس چی انتخاب کنم ؟) با دکمه اول عکس رو انتخاب میکنم و توی pictureBox نمایش هم داده میشه اینم کدش

Of.Filter = "BitmapFile|*.Bmp|Jpg File|*.Jpg";
Of.ShowDialog();
if (Of.FileName == string.Empty)
{
return;
}

img = Bitmap.FromFile(Of.FileName);
pictureBox1.Image = Image.FromFile(Of.FileName);
textBox16.Text =Of.FileName;
اما کد دکمه دوم که برای ذخیره کردن در دیتا بیس هست رو نمیدونم چی بنویسم البته این کد رو زدم

SqlConnection opendb = new SqlConnection();
opendb.ConnectionString = "Data Source=VAHDANI-PC;Initial Catalog=DBtest;Integrated Security=True";

SqlCommand cmdinsert = new SqlCommand();
cmdinsert.Connection = opendb;

MemoryStream Memory = new MemoryStream();
pictureBox1.Image.Save(Memory, System.Drawing.Imaging.ImageFormat.Jpeg);
cmdinsert.Parameters.Add("@Pic", SqlDbType.Image).Value = Memory.GetBuffer();
cmdinsert.CommandText = "INSERT INTO pic (Pic) Values(@Pic)";
cmdinsert.ExecuteNonQuery();
cmdinsert.Parameters.Clear();
اما خطا میده که در زیر خطاشو هم قرار دادم لطفا راهنمایی کنید چطور عکسم رو به دیتا بیس انتقال بدم ؟
و مشکل کد من کجاست که کار نمیکنه ؟
http://s2.picofile.com/file/7318505371/ere5.jpg

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

(http://barnamenevis.org/showthread.php?115600-%D9%86%D8%AD%D9%88%D9%87-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%D9%88-%D8%A8%D8%A7%D8%B2%DB%8C%D8%A7%D8%A8%DB%8C-%D8%AA%D8%B5%D8%A7%D9%88%DB%8C%D8%B1-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3/page2&highlight=%D8%B0%D8%AE%DB%8C%D8%B1%D9%87+%D8%B9%DA %A9%D8%B3)
http://barnamenevis.org/showthread.php?330329-%D9%86%D8%AD%D9%88%D9%87-%D8%B0%D8%AE%D9%8A%D8%B1%D9%87-%D8%B9%D9%83%D8%B3-%D8%AF%D8%B1-%D8%A7%D8%B3-%D9%83%D9%8A%D9%88-%D8%A7%D9%84&highlight=%D8%B0%D8%AE%DB%8C%D8%B1%D9%87+%D8%B9%DA %A9%D8%B3

Hybrid
شنبه 13 اسفند 1390, 11:54 صبح
سلام ، الان کانکشن شما بسته هست این خط کد رو بین خط 10و 11اضافه کنین.


opendb.Open();

سپس در خط آخر کانکشن رو ببندین.


opendb.Close();

موفق باشید./

sanay_esh
شنبه 13 اسفند 1390, 12:02 عصر
سلام
به نظر بنده نوع داده را image انتخاب کنید و بدین شکل image را در بانک اطلاعاتی ذخیره نمائید


// Create a byte[] from the input file
int len = Upload.PostedFile.ContentLength;
byte[] pic = new byte[len];
Upload.PostedFile.InputStream.Read (pic, 0, len);
// Insert the image and comment into the database
SqlConnection connection = new
SqlConnection (@"server=local;database=MyDB;uid=sa;pwd=@1234");
try
{
connection.Open ();
SqlCommand cmd = new SqlCommand ("insert into Image "
+ "(Picture, Comment) values (@pic, @text)", connection);
cmd.Parameters.Add ("@pic", pic);
cmd.Parameters.Add ("@text", Comment.Text);
cmd.ExecuteNonQuery ();
}
finally
{
connection.Close ();
}



برای اینکه از دیتابیس بخوانید :


MemoryStream stream = new MemoryStream ();
SqlConnection connection = new
SqlConnection (@"server=local;database=MyDB;uid=sa;pwd=@1234");
try
{
connection.Open ();
SqlCommand command = new
SqlCommand ("select Picture from Image", connection);
byte[] image = (byte[]) command.ExecuteScalar ();
stream.Write (image, 0, image.Length);
Bitmap bitmap = new Bitmap (stream);
Response.ContentType = "image/gif";
bitmap.Save (Response.OutputStream, ImageFormat.Gif);
}
finally
{
connection.Close ();
stream.Close ();
}

vahdani_d
شنبه 13 اسفند 1390, 13:11 عصر
سلام ، الان کانکشن شما بسته هست این خط کد رو بین خط 10و 11اضافه کنین.


opendb.Open();

سپس در خط آخر کانکشن رو ببندین.


opendb.Close();

موفق باشید./

درسته یادم رفته بود این باز و بسته کنم ممنون :قهقهه::قهقهه:
sanay_esh عزیز ممنون درسته image کردم تایپ رو ممنون از راهنماییتون
درضمن کدتون رو دیدم قسمت دوم برای خوندن عکس رو توضیح میدین ؟
متوجه نمیشم چه کار باید کنم ؟ و اصلا کار به چه شکل انجام میشه !!
توی فرم به چه چیزی نیاز دارم فرض کنیم 5 تا عکس رو آپ کرده باشیم مثلا 4رومی رو چطور باید فراخوانی کنم ؟ باید سرچ انجام بشه ؟
من تا حالا عکس توی دیتابیس قرار ندادم اینجوری ذخیره شده درسته ؟!
http://s2.picofile.com/file/7318589672/err6.jpg

vahdani_d
یک شنبه 14 اسفند 1390, 00:47 صبح
برای اینکه از دیتابیس بخوانید :


MemoryStream stream = new MemoryStream ();
SqlConnection connection = new
SqlConnection (@"server=local;database=MyDB;uid=sa;pwd=@1234");
try
{
connection.Open ();
SqlCommand command = new
SqlCommand ("select Picture from Image", connection);
byte[] image = (byte[]) command.ExecuteScalar ();
stream.Write (image, 0, image.Length);
Bitmap bitmap = new Bitmap (stream);
Response.ContentType = "image/gif";
bitmap.Save (Response.OutputStream, ImageFormat.Gif);
}
finally
{
connection.Close ();
stream.Close ();
}



این قسمت مخصوصا اط خط 9 به بعد رو میشه لطفا توضیح بدید ؟
من برای دیدن عکسهای ذخیره شده در دیتابیسم مشکل دارم چکار کنم ؟ اگه بخوام یک عکس خاص رو ببینم و یا بخوام بصورت گروهی همه عکسها رو که در دیتابیس هست رو ببینم

sanay_esh
شنبه 20 اسفند 1390, 10:12 صبح
دقیفا کد رو کپی کن یا نقل قول کن برات توضیح بدم عزیزم!!!

vahdani_d
چهارشنبه 30 فروردین 1391, 12:44 عصر
دوستان سلام این رو من توی ویندوز اپلیکیشن حل کردم اما الان احتیاج دارم که در وب سایتم عکس آپلود کنم و دوباره عکس رو بخونم و نمایش بدم میشه لطفا در این رابطه منو راهنمایی کنید ؟! با تشکر