PDA

View Full Version : حرفه ای: خطای آپدیت دو جدول جوین شده



cisco ++
دوشنبه 22 مهر 1392, 10:47 صبح
من بعضی فیلدهای دو تا جدول رو با دستور زیر توی گریدویو نشون داده ام:


SqlDataAdapter objda = new SqlDataAdapter("select TblKharid.id, TblKharid.factor_id, TblKharid.DrugName, TblKharid.tedad, TblKharid.cost, TblKharid.total , TblFactor.dateof from TblKharid INNER JOIN TblFactor on TblKharid.factor_id =TblFactor.factor_id", objcon);


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


using (SqlCommand objcom = new SqlCommand())
{
int i = 0;
i = dataGridView1.CurrentRow.Index;
var row = dataGridView1.Rows[i].Cells[0].Value.ToString();
var factorID = dataGridView1.Rows[i].Cells[1].Value.ToString();
var DrugID = dataGridView1.Rows[i].Cells[2].Value.ToString();
var DrugName = dataGridView1.Rows[i].Cells[3].Value.ToString();
var tedad = dataGridView1.Rows[i].Cells[4].Value.ToString();
var cost = dataGridView1.Rows[i].Cells[5].Value.ToString();
var total = dataGridView1.Rows[i].Cells[6].Value.ToString();

objcom.CommandText = @"update TblKharid set factor_id=@u1 , DrugName=@u2 , DrugName=@u3 , tedad=@u4 , cost=@u5 , total=@u6 where id=@id";
objcom.Parameters.AddWithValue("@id", row);
objcom.Parameters.AddWithValue("@u1", factorID );
objcom.Parameters.AddWithValue("@u2", DrugID );
objcom.Parameters.AddWithValue("@u3", DrugName );
objcom.Parameters.AddWithValue("@u4", tedad);
objcom.Parameters.AddWithValue("@u5", cost );
objcom.Parameters.AddWithValue("@u6", total);
objcom.Connection = objcon;
objcon.Open();
objcom.ExecuteNonQuery();

خطاها متنوع هستن . یعنی وقتی میخوام نام دارو رو آپدیت کنم میگه نوع داده ات درست نیست.
وقتی میخوام تعداد دارو رو تغییر بدم واسه کلید اصلی خطا میده

:متفکر: درضمن گزینه cascade update هم تیک داره

درکل فیلدها هماهنگی ندارن با هم.

میتونید بگید چه تغییری بدم؟

saied_max
دوشنبه 22 مهر 1392, 11:08 صبح
بعد تعاریف
objcom.Parameters.clear();

را حتما بنویس و بعد از اینکه پارامتر ها رو تعریف کردی دستور commandText رو بنویس؟!

cisco ++
شنبه 27 مهر 1392, 11:13 صبح
بعد تعاریف
objcom.Parameters.clear();

را حتما بنویس و بعد از اینکه پارامتر ها رو تعریف کردی دستور commandText رو بنویس؟!

اون کد رو نوشته ام ، اگه دقت کنید توی نمونه کد ها دیده میشه

Reza_Yarahmadi
شنبه 27 مهر 1392, 13:01 عصر
ترتیب ستونهایی که توی Select اومده (با توجه به گرید) با ترتیب مقادیر Update متفاوته! برای مثال dateof ستون هفتم دستور Select شماست در حالی که total ستون هفتمی است که از گرید میخونید.
درضمن یه مشکل دیگه اینه که ستون DrugName رو 2 بار توی دستور Update آوردید.

cisco ++
شنبه 27 مهر 1392, 16:54 عصر
ترتیب ستونهایی که توی Select اومده (با توجه به گرید) با ترتیب مقادیر Update متفاوته! برای مثال dateof ستون هفتم دستور Select شماست در حالی که total ستون هفتمی است که از گرید میخونید.
درضمن یه مشکل دیگه اینه که ستون DrugName رو 2 بار توی دستور Update آوردید.

ممنون از راهنمایی تون ، مورد دوم رو درست کردم ولی در مورد اولی باید بگم : در جدول 7 تا فیلد دارم که اولی id (کلید اصلی )به صورت اتوماتیک هست و اون رو در قسمت set آورده ام . بخاطر همین یکی کم دیده میشه . مگه نه ؟
خطایی که حین اجرا میده بخاطر نوع داده هست. مثلا وقتی نام دارو رو تغییر میدم میگه اینجا باید int وارد کنی ! درواقع فیلدها پس و پیشه انگار؟
(ضمنا جهت یادآوری باید بگم که factor_id و Drug_id که اشتباهی به جاش DrugName رو نوشته بودم کلیدهای خارجی هستند)
:افسرده:

cisco ++
شنبه 27 مهر 1392, 17:03 عصر
ای بابا فهمیدم منظور شما چی بود آقای یار احمدی
توی دستور جوین یه فیلد بیشتر از اونی که توی دستور آپدیت آورده ام جوین گرده ام....
الان اونو بررسی میکنم
مرسی