PDA

View Full Version : ثبت و ویرایش عکس در رکورد دیتابیس



farnoosh66
جمعه 20 آذر 1394, 02:05 صبح
سلام دوستان
دوتا کد زیر ببینید
اولی که insert درست کار میکنه
ولی دومی update خطا نمیده ولی منطقی خطا میده



//sqlCom.CommandText = "insert into tblsoal (TextSoal_Pic) values(@TextSoal_Pic)";
//byte[] b = ReadFileToByte();
//sqlCom.Parameters.AddWithValue("@TextSoal_Pic",b);
//con.Open();
//sqlCom.ExecuteNonQuery();
//con.Close();
//FMessegeBox.FarsiMessegeBox.Show("کاربر گرامی", "عکس مورد نظر با موفقیت ذخیره شد");





////////////////////update//////////////////////////////
byte[] b = ReadFileToByte();
int x = sql.search("select Max(id)+1 from TblSoal ");
sqlCom.CommandText = "Update TblSoal Set TextSoal_Pic='" + b + "' where id=" + x + ""; //sqlCom.Parameters.AddWithValue("@TextSoal_Pic", b); "'Where id=" + d1 + "";


con.Open();
sqlCom.ExecuteNonQuery();
con.Close();
FMessegeBox.FarsiMessegeBox.Show("تصویر مورد نظر برای این سوال با موفقیت ثبت شد", "کاربر گرامی");
/////////////////////////////update//////////////////////////////

AmiN0012
جمعه 20 آذر 1394, 08:17 صبح
سلام دوست من من دو تا تابع درج و ویرایش خودمو بت میدم :

//---------------------------این زیر برنامه برای درج همراه با عکس استفاده می شود------------------------------------
public bool Insertpic( string table_name, PictureBox pic, ArrayList data, params int[] key_digit)
{
//تصویر باید آخرین فیلد باشد
string sqlstr = "";
for (int i = 0; i < data.Count; i++)
{
bool flag = false;
foreach (int j in key_digit)
{
if (j == i)
{
flag = true;
break;
}
}
if (flag)
{//digit
if (data[i].ToString() == "")
sqlstr += "0";
else
sqlstr += data[i].ToString().Trim();
}
else
sqlstr += "N'" + data[i].ToString().Trim() + "'";
if (i != data.Count - 1)
sqlstr += ",";
}
///////////////////////////////picture///////////////
string s1 = "";
byte[] arrpic = null;
if (pic != null && pic.Image == null)
{
pic = null;
s1 = ",null";
}
if (pic != null)
{
MemoryStream mp = new MemoryStream();
pic.Image.Save(mp, pic.Image.RawFormat);
arrpic = mp.GetBuffer();
mp.Close();
s1 = ",@pic";
}

sqlstr += s1;
//////////////////////////////////////////////////////////////////
sqlstr = "insert into " + table_name + " values (" + sqlstr + ")";
try
{


SqlCommand c2 = new SqlCommand(sqlstr, my_cn);
if (pic != null)
c2.Parameters.Add("@pic", SqlDbType.VarBinary).Value = arrpic;

c2.ExecuteNonQuery();





return true;
}
catch (Exception e)
{
MessageBox.Show(e.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
}
نحوه فراخوانی تابع:

mydb.Insertpic(table, pictureBox1, a, 15);//15 tedad fieldaye mast to form


برای ویرایش:

//---------------------------این زیر برنامه برای ویرایش همراه با عکس استفاده می شود------------------------------------
public bool updatepic(string table_name, PictureBox pic, string field_pic_name, string command, string condition)
{
//----------------------
string s1 = command;
byte[] arrpic = null;
if (pic != null && pic.Image == null)
{
pic = null;
s1 = ","+field_pic_name+"=null";
}
if (pic != null)
{
MemoryStream mp = new MemoryStream();
pic.Image.Save(mp, pic.Image.RawFormat);
arrpic = mp.GetBuffer();
mp.Close();
s1 = s1+"," + field_pic_name + "=@pic";
}

//----------------------
string sqlstr;


//------------------------------
sqlstr = "Update " + table_name + " set " + s1 + " where " + condition;


//try
//{
SqlCommand c2 = new SqlCommand(sqlstr, my_cn);
if (pic != null)
c2.Parameters.Add("@pic", SqlDbType.VarBinary).Value = arrpic;

c2.ExecuteNonQuery();

return true;
//}
//catch (Exception e)
//{
// MessageBox.Show(e.Message, "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
// return false;
//}
}





پارامترهای command و condition همون نوشتن دستورات sql ما هست.یعنی درج ویرایش سلکت.
موفق باشی

farnoosh66
جمعه 20 آذر 1394, 10:22 صبح
ممنون از پاسخت دوست عزیز
ولی به دلایلی نمی تونم کدای خودمو تغییر بدم
اینم خطایی که میده
137390

محمد رضا فاتحی
جمعه 20 آذر 1394, 10:31 صبح
دوست عزیز چرا برای آپدیت از پارامتر استفاده نمی کنید؟
در حال حاضر دارید به فیلد binary به صورت رشته ای مقدار دهی می کنید به خاطر همین داره خطا میده
همانند insert برای آپدیت هم پارامتر در نظر بگیرید