PDA

View Full Version : رخ دادن IndexOutOfRangeException بعد از اعمال Update در دیتابیس



amir11205
شنبه 21 خرداد 1390, 15:05 عصر
سلام
در زمان انجام عمل Insert در دیتابیس کار به صورت صحیح انجام شده و عمل Binding دیتاگرید صورت می گیرد
اما پس از انجام عمل Update تغییرات انجام گرفته ولی عمل Binding با مشکل مواجه می شود.
فکر کنم اگه به کد زیر توجه کنید منظورمو بفهمین:

if (upFlag == true)
{
str = "UPDATE personel SET pe_id=" + peIdMtxt.Text + ", fname=N'" + fNameTxt.Text + "', lname=N'" + lNameTxt.Text +
"', employmentdate='" + dt1.ToShortDateString() + "', birthdayDate='" + dt.ToShortDateString() + "', habitat=N'" + habitatTxt.Text +
"', birthlocate=N'" + birthAreaTxt.Text + "', basejob=N'" + baseJobTxt.Text + "', baseorg=N'" + baseOrgTxt.Text + "', baseadj=N'" + baseAdjTxt.Text + "', subjob=N'" + subJobTxt.Text + "', suborg=N'" + subOrgTxt.Text + "', subadj=N'" + subAdjTxt.Text + "', degree=" + degree + ", sex='" + sex.ToString() +
"' WHERE pe_id=" + id1;
DBClass.InsUpDelCommand(str);
MessageBox.Show(" ");
}
else
{
str = "INSERT INTO personel (pe_id, fname, lname, employmentdate, birthdayDate, habitat, birthlocate, basejob, baseorg, baseadj, subjob, suborg, subadj, degree, sex) VALUES("
+ peIdMtxt.Text + ", N'" + fNameTxt.Text + "', N'" + lNameTxt.Text + "', '" + dt1.ToShortDateString() + "', '" + dt.ToShortDateString() + "', N'" + habitatTxt.Text + "', N'" +
birthAreaTxt.Text + "', N'" + baseJobTxt.Text + "', N'" + baseOrgTxt.Text + "', N'" + baseAdjTxt.Text + "', N'" + subJobTxt.Text + "', N'" + subOrgTxt.Text + "', N'" + subAdjTxt.Text + "', " + degree + ", '" + sex.ToString() + "')";
DBClass.InsUpDelCommand(str);
MessageBox.Show(" ");
}
string strsql;
strsql = "SELECT pe_id, fname, lname, basejob, baseorg from personel order by degree ";
ds.Clear();
ds = DBClass.SelectCommand(con, strsql, "personel");
personelDgv.DataBindings.Clear();
personelDgv.DataBindings.Add(new Binding("DataSource", ds, "personel"));

ma.rad
شنبه 21 خرداد 1390, 15:36 عصر
خوب دوست عزیز میگه سطری با مشخصات وارد شده برا آپدیت وجود نداره-یا اصلا سطری در دیتابیس وجودنداره

Directx
شنبه 21 خرداد 1390, 15:39 عصر
بیا این خططو اصلاح کردم


dgv.DataBindings.Add(new Binding("DataSource", ds.Tables[0], "personel"));

amir11205
شنبه 21 خرداد 1390, 15:49 عصر
خوب دوست عزیز میگه سطری با مشخصات وارد شده برا آپدیت وجود نداره-یا اصلا سطری در دیتابیس وجودنداره
ممنون از پاسختون
اما اگه به کد دقت کنید بعد از یه شرط عمل Insert یا Update انجام میگیره
یعنی اگه شرط برقرار باشه عمل Update و اگه برقرار نباشه عمل Insert صورت میگیره و بعد از اون عمل Binding دیتاگرید.
سواله من اینه که چرا Binding دیتاگرید، بعد از Insert انجام میشه اما بعد از Update با خطا مواجه میشه؟

amir11205
شنبه 21 خرداد 1390, 15:53 عصر
بیا این خططو اصلاح کردم


dgv.DataBindings.Add(new Binding("DataSource", ds.Tables[0], "personel"));


ممنون از جوابی که دادید اما به نظرتون کدی که دادین اشتباه نیست؟

Directx
شنبه 21 خرداد 1390, 16:01 عصر
فکر نکنم اشتباه باشه امتحان کردید؟
معادل این کده

dgv.DataSource = ds.Tables[0];


با این تفاوت که بالایی یه فیلدشو بایند می کنه

amir11205
شنبه 21 خرداد 1390, 16:31 عصر
فکر نکنم اشتباه باشه امتحان کردید؟
معادل این کده

dgv.DataSource = ds.Tables[0];


با این تفاوت که بالایی یه فیلدشو بایند می کنه
دوست عزیز اشتباه از هردومون بود
البته اشتباه در نحوه درک سوال از شما و نحوه درک جواب از من
جواب شما صحیح است اما شما personel را یک فیلد درنظر گرفته اید در حالی که personel یک تیبل است.اما مشکل من در بایند کردن است .چرا بایند کردن بعد از عمل Insert بدون مشکل است اما بعد از عمل Update با مشکل مواجه است؟؟؟؟

Directx
شنبه 21 خرداد 1390, 16:52 عصر
خب این کد در ظاهر هیچ مشکل خاصی نداره اگه بخواییم جواب بدیم باید با ساختار بعضی متدها یی که به کار بردین آشنا بشیم مثلا ما الان دقیقا نمی دونیم این خط چه کار میکنه که به احتمال 90 درصد خطا از این خطه
DBClass.InsUpDelCommand(str)

و اینکه پیشنهاد می کنم gride تون رو به روش پست قبلی بایند کنید