PDA

View Full Version : سوال: اپدیت کردن پایگاه داده



hamid_73
جمعه 08 فروردین 1393, 17:58 عصر
سلام دوستان من می خوام تو دیتا گرید ویو سطری انتخاب کنم و پایگاه داده ام رو بر اساس مقدار فیلد، ای دی که در اون سطر وجود دارد اپدیت بشه
از این کد استفاده کردم ارور میده میگه خارج از رنج

CreatConnection();
OpenConnection();
string up="";
for (int i = 0; i < dgvInfo.Rows.Count; i++)
{
up = dgvInfo.SelectedRows[i].Cells[0].Value.ToString();

}
cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "UPDATE tbl_Reg SET Count = @Count WHERE ID =" + up;
cmd.Connection = conn;
cmd.Parameters.AddWithValue("@Count", txt_Charj.Text.Trim().ToString());
cmd.ExecuteNonQuery();
CloseConnection();
dgv();
MessageBox.Show("اطلاعات به روز رسانی شد");

این خط رو ارور میده
up = dgvInfo.SelectedRows[i].Cells[0].Value.ToString();

prg_mail
جمعه 08 فروردین 1393, 18:47 عصر
متن خطا رو بفرمایید ؟

hamid_73
جمعه 08 فروردین 1393, 18:50 عصر
http://dl.esfandune.ir/images/3fimmnbjyl6j38jd89l2.png

prg_mail
جمعه 08 فروردین 1393, 18:56 عصر
خوب ببینید ...
یکی از مشکلات اینجوری کد نوشتن اینه که بعضی مواقع اندیس خارج از محدوده for میشه و باعث رخداد خطا میشه دقیقا خطا هم همینه گفته که یا ایندکس منفی دادین (که به نظر نمیرسه) یا ایندکس خارج از محدوده دادین که همینه

دو راه داره :

1-اصولی تر و بهینه تر کد بزنید ( که من خودم اصلا از این روش خوشم نمیاد)
2-با یک try catch از بروز خطا موقعی که اندیس خارج از محدوده میره جلوگیری کنید.

نمونه کد از پروژه های قبلیم خدمت شما »

try {


TextBox10.Text = (string)(DataGrid1[0, 0]);
TextBox2.Text = (string)(DataGrid1[0, 1]);
TextBox3.Text = (string)(DataGrid1[0, 2]);
TextBox4.Text = (string)(DataGrid1[0, 3]);
TextBox5.Text = (string)(DataGrid1[0, 4]);
TextBox6.Text = (string)(DataGrid1[0, 5]);
TextBox7.Text = (string)(DataGrid1[0, 6]);
TextBox8.Text = (string)(DataGrid1[0, 7]);
TextBox9.Text = (string)(DataGrid1[0, 8]);
} catch {}

prg_mail
جمعه 08 فروردین 1393, 19:01 عصر
اونوقت این forی که شما گذاشتی دقیقا کارش چیه ؟ از ابتدا تا انتهای for هی مقدار میریزه توی up بعد دوباره مقدار قبلی رو پاک میکنه بعدی رو میریزه :متعجب: ؟!؟ یا من درست متوجه نشدم

Mahmoud.Afrad
جمعه 08 فروردین 1393, 21:28 عصر
چرا از SelectedRows استفاده کردی؟

winner1
جمعه 08 فروردین 1393, 22:32 عصر
خوب ببینید ...
یکی از مشکلات اینجوری کد نوشتن اینه که بعضی مواقع اندیس خارج از محدوده for میشه و باعث رخداد خطا میشه دقیقا خطا هم همینه گفته که یا ایندکس منفی دادین (که به نظر نمیرسه) یا ایندکس خارج از محدوده دادین که همینه

دو راه داره :

1-اصولی تر و بهینه تر کد بزنید ( که من خودم اصلا از این روش خوشم نمیاد)
2-با یک try catch از بروز خطا موقعی که اندیس خارج از محدوده میره جلوگیری کنید.

نمونه کد از پروژه های قبلیم خدمت شما »

try {


TextBox10.Text = (string)(DataGrid1[0, 0]);
TextBox2.Text = (string)(DataGrid1[0, 1]);
TextBox3.Text = (string)(DataGrid1[0, 2]);
TextBox4.Text = (string)(DataGrid1[0, 3]);
TextBox5.Text = (string)(DataGrid1[0, 4]);
TextBox6.Text = (string)(DataGrid1[0, 5]);
TextBox7.Text = (string)(DataGrid1[0, 6]);
TextBox8.Text = (string)(DataGrid1[0, 7]);
TextBox9.Text = (string)(DataGrid1[0, 8]);
} catch {}

دوست من جسازت نباشه ولی تا جایی که میشه باید از شرط واسه کنترل خطا استفاده کرد نه try دلیلشم اینه تو طول توسعه پروژه ممکن یه سری خطا تو همون بلاک باشه که ما بخاطر try اونو نمیبینیم