PDA

View Full Version : مشکل در ذخیره کردن عکس



NIMA_1981
جمعه 08 دی 1391, 19:29 عصر
سلام دوستان من یک برای اضافه کردن کورد ها همیشه اینجوری استفاده میکنم اما الان که یک فیلد image تو دیتابیس دارم وقتی این حوری مینویسم عکس ذحیره میشه اما وقع خوندن خطا میده
string sql = "Insert into users (uname,ufamil,uuser,upass,usemat,uemail,ubirthday, upic,ua1,ua2,ua3,ua4,ua5,ua6,ua7)";
sql += " values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}',' {8}','{9}','{10}','{11}','{12}','{13}','{14}')";
sql = string.Format(sql,this.Name, this.Famil, this.User, this.pass,this.Semat,this.Email,this.Birthdat,this .Pic_arr,
this.Ua1,this.Ua2,this.Ua3,this.Ua4,this.Ua5,this. Ua6,this.Ua7);


اما وقتی اینحوری منویسم درست میشه عکس درست لود میشه

string qry = "insert into users (uname,ufamil,uuser,upass,usemat,uemail,ubirthday, upic,ua1,ua2,ua3,ua4,ua5,ua6,ua7) ";
qry += "values(@uname,@ufamil,@uuser,@upass,@usemat,@uemai l,@ubirthday,@upic,@ua1,@ua2,@ua3,@ua4,@ua5,@ua6,@ ua7)";

//Initialize SqlCommand object for insert.
SqlCommand SqlCom = new SqlCommand(qry, CN);

//We are passing Original Image Path and
//Image byte data as SQL parameters.
SqlCom.Parameters.Add("@upic", SqlDbType.Image);
SqlCom.Parameters["@upic"].Direction = ParameterDirection.Input;
SqlCom.Parameters["@upic"].Value = this.Pic_arr;
//


میشه بگید باید چه تغییری رو کد بالا بدم که درست بشه
با تشکر

danialafshari
جمعه 08 دی 1391, 19:36 عصر
تا اونجایی که میدونم باید عکس به بایت تبدیل بشه

hossein_sh2008
جمعه 08 دی 1391, 20:35 عصر
سلام
دوست عزيز تا جايي كه ممكنه نبايد عكس رو در ديتابيس ذخيره كرد چون حجم ديتابيس به شدت زياد ميشه و كند ميشه به نظر من بهتره كه عكس رو در پوشهاي ذخيره كنيد و آدرس اونو ذخيره كنيد

morika
جمعه 08 دی 1391, 22:01 عصر
البته حرف دوستان کاملا درسته. تا جایی که امکان داره شما نباید فایل عکس رو در دیتابیس ذخیره کنید. اما بهرحال این کد ذخیره عکس در دیتابیس هست
اول با این تابع عکس رو به بایت تبدیل می کنید:
private byte[] ConvertImageToByte(string ImageLocation)
{
byte[] picture = File.ReadAllBytes(ImageLocation);
return picture;
}
بعد با این دستور به فیلد بانک انتقالش می دین. البته دقت کنید که فیلد image تو بانک باید از نوع byte باشه
cmd.Parameters.AddWithValue("@image", ConvertImageToByte(image.Text)
حالا باید دقت کنین که این فیلد بایت به همین راحتی ها مقدار null رو نمی پذیره. واسه زمانی که عکسی برای گذاشتن تو بانک نباشه. باید از این کد استفاده کنید:
cmd.Parameters.Add("@image", SqlDbType.VarBinary).Value = DBNull.Value;
بعد برای خوندن عکس از فیلد بانک از کد زیر استفاده می کنین:
byte[] arrPicture = ((byte[])(dt.Rows[0]["image"]));
MemoryStream ms = new MemoryStream(arrPicture);
pictureBox1.Image = Image.FromStream(ms);

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

NIMA_1981
شنبه 09 دی 1391, 14:38 عصر
نه دوستان مشکل من با تبذیل اطلاعات به بایت نیست این کار رو انجام میدم اما وقتی از حالت اول برای اضافه کردن در بانک استفاده میکنم برنامه نمیتوتنه اون لود کنه اما وتی از حالت دوم استفاده میکنم دسرسته من نیم خوام از
cmd.Parametersاستفاده کنم