PDA

View Full Version : یه مشکل برای ثبت رکورد و همزمانی اطلاعات



alireza244
پنج شنبه 26 مرداد 1385, 09:43 صبح
با سلام

من ASP.NET را تازه شروع کردم و به یه مشکل برخوردم

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

من میخوام یه فاکتور را تو بانکم ثبت کنم برای همین دوتا جدول طراحی کردم
جدول مشخصات فاکتور (سربرگ فاکتور) که کلید او بصورت AutoNumber تعریف شده
جدوا ردیف ها (سفارشات) که در هر ردیف شماره فاکتور و مشخصات کالا ثبت میشود

من وقتی که میخوا فاکتور را ذخیره کنم

اول مشخصات فاکتور را ذخیره میکنم بعد با یه دستور SELECT کد آخرین رکورد ثبت شده را بدست میارم (که همین فاکتور من هست)
بعد کد را که بدست آوردم همراه با مشخصات کالا در جدول ردیف ها ذخیره میکنم


حالا سوال من اینکه آیا این راهی که من رفتم درست است یا نه یعنی شماره فاکتور را که من با دستور SELECT بدست میرام معتبر است و کسی بعد از ثبت من ممکنه که یه رکورد دیگه همون لحضه ثبت کنه

یا راهی وجود داره که من بتونم وقتی که رکورد مشخصات فاکتور را ثبت میکنم کدش را همون لحظه بدون استفاده از دستور SELECT بدست بیارم


نکته : من تمام این کارها را در یک رویداد انجام میدهم



با تشکر
علیرضا

mahdi_negahi
پنج شنبه 26 مرداد 1385, 10:10 صبح
دوست عزیز به قسمت معماری چند لایه در ASP.NET2 بخش 5 آموزش مراجعه کن من در انجا توضیح دادم .

Behrouz_Rad
پنج شنبه 26 مرداد 1385, 11:15 صبح
اگر در جدولت فیلدی از نوع AutoNumber داری (که میگی داری)، می تونی از IDENTITY@@ استفاده کنی. (به شرطی که پایگاه داده در SQL Server باشه!)


@ID int OUTPUT
-- DO INSERT
SET @ID = @@IDENTITY


زمانی که یک Connection به SQL Server برقرار میشه، یک سری متغیر سیستمی براش ایجاد میشه از جمله IDENTITY@@. وقتی چند کاربر به طور همزمان بروی یک جدول Insert انجام میدن، SQL Server میدونه هر Insert توسط کدوم کاربر (Connection) صورت گرفته و Identity که کاربر باعث تولیدش رو در IDENTITY@@ مربوط به خودش قرار میده.

موفق باشید.

alireza244
پنج شنبه 26 مرداد 1385, 16:18 عصر
مرسی آقا بهروز
ولی این @@IDENTITY را چجوری بدست بیارم؟
واین @@IDENTITY همون کدی است که برای رکوردی که من ثبت کرده ام

آخه من این کد را برای یه جدول دیگه لازم دارم.

Behrouz_Rad
پنج شنبه 26 مرداد 1385, 18:13 عصر
IDENTITY@@ پس از اعمالی همانند INSERT، در جدول شما به دنبال فیلدی از نوع AutoNumber میگرده و در صورتی که چنین فیلدی پیدا کرد، مقدار فیلد Auto Number ایجاد شده رو برگشت میده.
به عنوان مثال اگر فیلدی با نام Googooli_Magooli و از نوع AutoNumber داشته باشی و پس از INSERT، مقدار 5 به این فیلد نسبت داده بشه، IDENTITY@@ مقدار 5 رو Return می کنه. (کدش رو در پست قبلی نوشتم)

توضیح دیگه ای وجود نداره.

موفق باشی.

alireza244
جمعه 27 مرداد 1385, 17:26 عصر
آقا بهروز دستت درد نکنه درست شد
از ExecuteScaler استفاده کردم



Sqlcommand cmd=new SqlCommand("INSERT INTO fact (name) VALUES('alireza') SELECT @@IDNTTIY FROM mem",con)
int id=Convert.ToInt32(cmd.ExecuteScaler());


:خجالت: