ورود

View Full Version : دسترسی به مقدارفیلدIdentity



a3mooneabi22
چهارشنبه 18 شهریور 1388, 11:56 صبح
سلام دوستان
من بااستفاده ازکدزیرمقادیری راکه کاربردرکنترلهای روی فرم(مثلtextbox,combobox,…)واردمیکن دبااستفاده از دستورinsert درجدولtblDvtalab میریزم.تااینجای کارمشکلی ندارم.



SqlConnection con = new SqlConnection(constring);
con.Open();SqlCommand comm = new SqlCommand("insert into tblDavtalab (esme-tamame-fildha-be-joz- DID)values(maghdire-kontrolhaie-roie-form)", con);
comm.CommandType = CommandType.Text;
SqlDataAdapter adap = new SqlDataAdapter(comm);
DataSet ds = new DataSet();
adap.Fill(ds, "select * from tblDavtalab");
con.Close();


میخواهم بعد ازاینکه رکوردموردنظردرجدولtblDavtalab درج شد،به مقدارفیلدکددواطلب(DID)که ازنوع int می باشدویصورت اتوماتیک تولیدمیشود(یعنی ازنوع Identity,autonumber است )وکاربرآنراواردنمیکند،دست سی داشته باشم وآنرادرون یک متغیربریزم،چون بعدابراساس کدداوطلب باید کارهایی راانجام دهم.
بایدبرای دسترسی به مقدارفیلدکدداوطلب چکارکنم؟
***********************************************
باتشکرازتمام دوستان برنامه نویس
پ.ن :تاپیک ريختن اطلاعات يك فيلد درون متغير به من کمکی نکرد

محمد سلیم آبادی
چهارشنبه 18 شهریور 1388, 12:21 عصر
با استفاده از متغیر سیستمی (یا تابع) زیر می توانید این کار را کنید:


Select @@identity

a3mooneabi22
چهارشنبه 18 شهریور 1388, 16:46 عصر
دوست عزیزمیشه بگیددقیقا بایدچه مراحلی راانجام بدم؟
یااینکه یک مثال بگذارید
خیلی ممنون

Reza_Yarahmadi
پنج شنبه 19 شهریور 1388, 12:13 عصر
اگر قصد داری بعد از درج یه رکورد جدید این مقدار رو بدست بیاری از همون دستور دوستمون میتونی استفاده کنی ولی اگر بعد از اجرای برنامه و قبل از درج هیچ رکوردی میخوای این مقدار رو داشته باشی باید توی بانک یه جستجو بزنی و بزرگترین مقدارش رو بدست بیاری.
Select Max(DID) From tblDavtalab
یه نمونه کد برای حالت اول:
Cmd.CommandText = "Insert into tblDavtalab ...";
Conn.Open();
Cmd.ExecuteNonQuery();
Cmd.CommandText = "Select @@identity";
int DID = Convert.ToInt32(Cmd.ExecuteScalar());
Conn.Close();
فقط توجه داشته باش قبل از بسته شدن کانکشن باید مقدار identity@@ رو بخونی. چون اگر بسته بشه و این دستور رو اجرا کنی مقدار null رو برمیگردونه.

محمد سلیم آبادی
پنج شنبه 19 شهریور 1388, 13:41 عصر
اگر قصد داری بعد از درج یه رکورد جدید این مقدار رو بدست بیاری از همون دستور دوستمون میتونی استفاده کنی ولی اگر بعد از اجرای برنامه و قبل از درج هیچ رکوردی میخوای این مقدار رو داشته باشی باید توی بانک یه جستجو بزنی و بزرگترین مقدارش رو بدست بیاری.
فقط توجه داشته باش قبل از بسته شدن کانکشن باید مقدار identity@@ رو بخونی. چون اگر بسته بشه و این دستور رو اجرا کنی مقدار null رو برمیگردونه.

با استفاده از تابع زیر نیز می توانیم آخرین مقدار یک ستون از نوع Identity را بدست آوریم:


select IDENT_CURRENT('Table_1');


البته اگر سطر آخر را حذف کنیم این مقدار ثابت باقی می ماند. در واقع این تابع آخرین identity که در جدول درج شده است را نمایش می دهد.