PDA

View Full Version : سوال: بدست اوردن مقدار متغیری که Identity ان yes هست



esy2012
پنج شنبه 01 دی 1390, 23:20 عصر
سلام دوستان عزیز

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

http://s2.picofile.com/file/7221616448/11.jpg

من توی نمایش کد فاکتور جدید مشکل دارم ، منظورم اینه که مثلا بعد از این که یک فاکتور ثبت کردم مثلا فاکتور جدیدرا که میخواهم ذخیره کنم مقدار شماره فاکتور جدید را بدست بیاورم تا در فرم های دیگه در کلید خارجی مثلا جدول دریافت چک ذخیره کنم ولی به دللیل اینکه Identity این فیلد yes هست و کلید اصلی هستش نمی تونم قبل از ثبت بدست بیاورم و خودم هم نمی تونم مقداری وارد کنم؟ نمیدونم منظورمو رسوندم:افسرده:

برای ذخیره هم از این دستورات استفاده میکنم


if ( (txtVahed.Text != ""))
{
SqlConnection conn = new SqlConnection("Data Source=ESMAIL-PC\\SQLEXPRESS;Initial Catalog=EJMProject;Integrated Security=True");
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "INSERT INTO TBL_TarifVahedeKala" + "([Vahed])" + "VALUES('" + txtVahed.Text + "' )";
cmd.ExecuteNonQuery();
conn.Close();
FunctionDataGridBinding();
txtCodeVahedAsle.Text = "";
txtVahed.Text = "";
txtCodeVahedAsle.Focus();
}
else
{
MessageBox.Show("لطفا اطلاعات را کامل فرمایید", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}


ممنون میشم اگه کمکم کنید:افسرده:

zarrinnegar
پنج شنبه 01 دی 1390, 23:27 عصر
شما باید دستور
return scope_identity() رو بعد از دستور insert استفاده کنید تا مقدار کد جدید رو برگردونه

البته من با sp توی sql این کار رو میکنم و توی برنامه وقتی sp رو صدا میکنم میریزمش توی یه متغیر ازنوع عددی بعد کد رو دارم هر جا بخوام استفاده میکنم

esy2012
پنج شنبه 01 دی 1390, 23:29 عصر
شما باید دستور
return scope_identity() رو بعد از دستور insert استفاده کنید تا مقدار کد جدید رو برگردونه

البته من با sp توی sql این کار رو میکنم و توی برنامه وقتی sp رو صدا میکنم میریزمش توی یه متغیر ازنوع عددی بعد کد رو دارم هر جا بخوام استفاده میکنم


سلام

دوست عزیز میتونید کمی بیشتر توضیح بدید ؟
کدوم روش بهتره اونو بگید:گریه:

zarrinnegar
پنج شنبه 01 دی 1390, 23:50 عصر
ساخت پروسیجر


Create Procedure TestProcedure
(
@title nvarchar (30)
)
AS
INSERT INTO TBL_TarifVahedeKala([Vahed])VALUES(@title)

return scope_identity()


این هم کد تست کن


SqlConnection conn = new SqlConnection("Data Source=ESMAIL-PC\\SQLEXPRESS;Initial Catalog=EJMProject;Integrated Security=True");
SqlCommand cmd = new SqlCommand("TestProcedure",conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter RetVal =cmd.Parameters.Add("Retval",SqlDbType.Int);
RetVal.Direction = ParameterDirection.ReturnValue;
sqlParameter Title = cmd.Parameters.Add(txtVahed.Text, SqlDbType.nvarchar(30));
conn.Open();
cmd.ExecuteReader();
conn.Close();
FunctionDataGridBinding();
txtCodeVahedAsle.Text = "";
txtVahed.Text = "";
txtCodeVahedAsle.Focus();
messagebox.show(retval.value);