PDA

View Full Version : سوال: ذخیره تصویر از Memory Stream در بانک



Fastdesign
جمعه 11 مرداد 1392, 16:12 عصر
با سلام خدمت دوستان برنامه نویس
امیدوارم طاعات و عباداتتون مورد قبول درگاه حق تعالی قرار گرفته باشه.

می خوام تصویر را در دیتابیس ذخیره کنم. این کدها رو نوشتم و نمی دونم خطا از چیه :
con.Open();
SqlCommand addquery = new SqlCommand("Insert into Table_1(Fname,Lname,picture)values(@F,@L,@P)", con);
addquery.Parameters.AddWithValue("@F", textBox1.Text.Trim());
addquery.Parameters.AddWithValue("@L", textBox2.Text.Trim());
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
addquery.Parameters.AddWithValue("@P", ms.GetBuffer());
addquery.ExecuteNonQuery();
ds.Clear();
da.Fill(ds, "Table_1");
con.Close();

این هم کد خطا :
String or binary data would be truncated.
The statement has been terminated.


با تشکر

danialafshari
جمعه 11 مرداد 1392, 16:38 عصر
با vs تست نکردم و به صورت دستی اصلاح کردم
ببین درسته؟
con.Open();
SqlCommand addquery = new SqlCommand("Insert into Table_1(Fname,Lname,picture)values(@F,@L,@P)", con);
addquery.Parameters.AddWithValue("@F", textBox1.Text.Trim());
addquery.Parameters.AddWithValue("@L", textBox2.Text.Trim());
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrPic = ms.GetBuffer();
ms.Close();
addquery.Parameters.AddWithValue("@P", arrPic);
addquery.ExecuteNonQuery();
ds.Clear();
da.Fill(ds, "Table_1");
con.Close();
اگه نشد بگو تا اصلاحش کنم

Fastdesign
جمعه 11 مرداد 1392, 16:58 عصر
بازهم خطای قبلی رو میده!!

plus
جمعه 11 مرداد 1392, 17:04 عصر
نوع داده ستون picture رو بررسی کنید.

Fastdesign
جمعه 11 مرداد 1392, 17:11 عصر
نوع داده ستون Picture را binary(150) در نظر گرفتم.

mhsmity
جمعه 11 مرداد 1392, 17:18 عصر
public void SavePic(int P_Id, PictureBox pb)
{
//تبدیل تصویر به مجموعه ای از بایت ها
MemoryStream ms = new MemoryStream();
pb.Image.Save(ms, pb.Image.RawFormat);
byte[] arrpic = ms.GetBuffer();
ms.Close();
// ذخیره تصویر در بانک اطلاعاتی
string StrQuery = "UPDATE Tbl SET PIC = @pic WHERE(ID = @id)";
SqlCommand cmd = new SqlCommand(StrQuery, Con.Con);
Con.Open();
try
{
cmd.Parameters.Add("@id", SqlDbType.NVarChar, 50).Value = P_Id;
cmd.Parameters.Add("@pic", SqlDbType.VarBinary).Value = arrpic;
cmd.ExecuteNonQuery();
}
catch (Exception e) { MessageBox.Show(e.Message, "CommitSavePic"); }
Con.Close();
}


SqlDbType.VarBinary

public void ShowePic(int P_Id, PictureBox pb)
{
try
{
string StrQuery = "SELECT Pic FROM tbl WHERE ID = @ID";
da = new SqlDataAdapter(StrQuery, Con.Con);
da.SelectCommand.Parameters.Add("@ID", SqlDbType.Int).Value = P_Id;
ds = new DataSet();
Con.Open();
da.Fill(ds, "Persons");
Con.Close();
byte[] arrPic = (byte[])(ds.Tables["Persons"].Rows[0]["Pic"]);
MemoryStream ms = new MemoryStream(arrPic);
pb.Image = Image.FromStream(ms);
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message, "ShowePic");
}
}

sohil_ww
جمعه 11 مرداد 1392, 17:21 عصر
نوع فیلد به
varbinary(MAX)

تغییر بده

Fastdesign
جمعه 11 مرداد 1392, 17:45 عصر
دوستان ممنونم از توجه همه تون.
دوستان مشکل از نوع ستون Picture بود با قرار دادن نوع varbinary(MAX) مشکل حل.


با تشکر