PDA

View Full Version : سوال: مشاهده ثبت اطلاعات در دیتاگرید در runtime با کمک storeproceture



bahareh1368
دوشنبه 10 آبان 1389, 16:56 عصر
باسلام خدمت دوستان عزیزم.
من در فرم ثبت یه دیتاگرید دارم که می خوام همزمان با ثبت،اطلاعات ثبت شده را در دیتاگرید ببینم.این برنامه با کمک storeproceture کار می کنه که من دیتابیس و پروسیچرشو در همون محیط سی شارپ ایجاد کردم.کدم خطا داره.اولا که اصلا عمل ثبت را انجام نمی ده و مطمئنم که در دستور cmd.parameter.add("@Name",sqldbtype.nvarchar,50).value=dgv.currentrow.cell["Name"].tostring();
و مشابه اینها که در زیر نوشتم مشکل داره و دوما خطای زیر را هم می ده:
روی کد بالا زرد رنگ پیغام : "object reference not set to an instance of an object" مشاهده می شه.اینم کدهام:

private void btnsave_Click(object sender, EventArgs e)
{
SqlConnection cn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
cn.ConnectionString = "server=HAMED-PC;Database=Farafan;trusted_connection=true;";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "dbo.Psave";

cmd.Parameters.Add("@Name", SqlDbType.NVarChar,50).Value = dgv.CurrentRow.Cells["Name"].ToString();
cmd.Parameters.Add("@FName", SqlDbType.NVarChar, 50).Value = dgv.CurrentRow.Cells["FName"].ToString();
cmd.Parameters.Add("@FatherName", SqlDbType.NVarChar, 50).Value = dgv.CurrentRow.Cells["FatherName"].ToString();
cmd.Parameters.Add("@DateBirth", SqlDbType.DateTime2, 7).Value = dgv.CurrentRow.Cells["DateBirth"].ToString();
cmd.Parameters.Add("@DateEmployee", SqlDbType.DateTime2, 7).Value = dgv.CurrentRow.Cells["DateEmployee"].ToString();
cmd.Parameters.Add("@Phone", SqlDbType.VarChar, 50).Value = dgv.CurrentRow.Cells["Phone"].ToString();
cmd.Parameters.Add("@Cellphone", SqlDbType.NVarChar, 50).Value = dgv.CurrentRow.Cells["Cellphone"].ToString();
cmd.Parameters.Add("@Address", SqlDbType.NVarChar, 150).Value = dgv.CurrentRow.Cells["Address"].ToString();

da.Fill(dt);
dgv.DataSource = dt;

MessageBox.Show("Information was Saved Succsessfully", "Insert Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
لطفا راهنماییم کنید.

M.YasPro
دوشنبه 10 آبان 1389, 17:08 عصر
سلام
currentRow فقط در صورتی nulll نیست که حتما یه سطر از گرید انتخاب شده باشه .
یه احتمال دیگه هم هست که شاید گرید شما ستونی بهنام name نداشته باشه .
موفق باشید ./

bahareh1368
دوشنبه 10 آبان 1389, 17:14 عصر
سلام
currentRow فقط در صورتی nulll نیست که حتما یه سطر از گرید انتخاب شده باشه .
یه احتمال دیگه هم هست که شاید گرید شما ستونی بهنام name نداشته باشه .
موفق باشید ./

پس می شه بهم بگید باید کدهای مربوط به پروسیچر و دیتاگریدمو چطور بنویسم؟

csharpprogramer88
دوشنبه 10 آبان 1389, 17:16 عصر
سلام
دوست عزيز ، كدهاتونو بين تك code (از نوار ابزار بالا ) قرار بديد تا بهتر قابل خوندن باشه


cmd.Parameters.Add("@Name", SqlDbType.NVarChar,50).Value = dgv.CurrentRow.Cells["Name"].ToString();

از اين شيوه نوشتن چيزي نميدونم ولي از اين روش استفاده كنيد ببينيد چي ميشه :



cmd.Parameters.AddWithValue("Age", txtAgeSearch.Text);

موفق باشيد

شما استوردپروسيجر را چطور استفاده كرديد ؟
من كه در كدتون نام پروسيجر را نديد مثلا



string sql = "sp_Persons_SelectRowByAge";

SqlCommand cmd = new SqlCommand(sql, connection);

M.YasPro
دوشنبه 10 آبان 1389, 17:22 عصر
من در فرم ثبت یه دیتاگرید دارم که می خوام همزمان با ثبت،اطلاعات ثبت شده را در دیتاگرید ببینم

شما می خواید اطلاعاتی رو که توی گرید وارد شده در دیتابیس ثبت کنید ؟ یا بعد از ثبت ، رکورد ثبت شده رو به گرید اضافه کنید ؟

bahareh1368
دوشنبه 10 آبان 1389, 18:00 عصر
نام پروسیچرم "dbo.Psave" در خط پنجم برنامه هست.مشکل باید بین دستورات خط 6 تا 13 باشه.اگه بازم نیاز به توضیح است بفرمایید تا بیشتر توضیح بدم.
در آخر برنامه ام را ضمیمه کردم.




SqlConnection cn = new SqlConnection();
SqlCommand cmd = new SqlCommand();
cn.ConnectionString = "server=HAMED-PC;Database=Farafan;trusted_connection=true;";
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "dbo.Psave";

cmd.Parameters.Add("@Name", SqlDbType.NVarChar,50).Value = dgv.CurrentRow.Cells["Name"].ToString();
cmd.Parameters.Add("@FName", SqlDbType.NVarChar, 50).Value = dgv.CurrentRow.Cells["FName"].ToString();
cmd.Parameters.Add("@FatherName", SqlDbType.NVarChar, 50).Value = dgv.CurrentRow.Cells["FatherName"].ToString();
cmd.Parameters.Add("@DateBirth", SqlDbType.DateTime2, 7).Value = dgv.CurrentRow.Cells["DateBirth"].ToString();
cmd.Parameters.Add("@DateEmployee", SqlDbType.DateTime2, 7).Value = dgv.CurrentRow.Cells["DateEmployee"].ToString();
cmd.Parameters.Add("@Phone", SqlDbType.VarChar, 50).Value = dgv.CurrentRow.Cells["Phone"].ToString();
cmd.Parameters.Add("@Cellphone", SqlDbType.NVarChar, 50).Value = dgv.CurrentRow.Cells["Cellphone"].ToString();
cmd.Parameters.Add("@Address", SqlDbType.NVarChar, 150).Value = dgv.CurrentRow.Cells["Address"].ToString();

da.Fill(dt);
dgv.DataSource = dt;

MessageBox.Show("Information was Saved Succsessfully", "Insert Message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

M.YasPro
دوشنبه 10 آبان 1389, 18:17 عصر
سوال من رو جواب ندادید .
کدتون رو دیدم
شما باید اطللاعات رو از textBox ها بگیرید نه از گرید.
مثلا به اینصورت :


cmd.Parameters.Add("@Name", SqlDbType.NVarChar,50).Value = txtName.Text;

نمونه های زیادی روی سایت هست .
موفق باشید ./

csharpprogramer88
یک شنبه 16 آبان 1389, 22:28 عصر
به اين نگاه كنيد جواب ميده