PDA

View Full Version : ثبت چند عمليات بصورت كلي



kohyar
یک شنبه 11 بهمن 1388, 15:13 عصر
دوستان من دو تا جدول دارم
كه يكي تعداد كالا را در خودش نگهداري مي كنه و ديگري مربوط به ثبت سفارشات هستش
حالا من زمانيكه يك مشتري يك كالا را سفارش ميده ابتدا يم عدد از موجودي جدول اول كسر مي كنم و يك سفارش به جدول سفارش اضافه مي كنم
در اين قسمت هيچ مشكلي وجو نداره البته اينم بگم من از stored procedure در اس كيو ال سرور براي Insert و update استفاده مي كنم
ولي مشكل اينجاست كه اگر بعد به روز رساني جدول اول به هر دليلي مشكلي پيش بياد و نتونم كالاي كسر شده رو به جدول سفارشات اضافه كنم ميخوام عمل انجام شده اول هم در نظر گرفته نشود
آيا براي اينكار راهي در asp.net وجود دارد
البته شنيدم كه ميشه از transaction اس كيو ال سرور استفاده كرد ولي متاسفانه بلد نيستم
از اساتيد مي خوام راهنمايي ام كنيد
با تشكر

mehdi.mousavi
یک شنبه 11 بهمن 1388, 15:26 عصر
البته شنیدم که میشه از transaction اس کیو ال سرور استفاده کرد ولی متاسفانه بلد نیستم از اساتید می خوام راهنمایی ام کنید با تشکر

سلام.
درست شنیده اید. برای اینکار میتونید از TRANSACTION ها در SQL Server استفاده کنید. روش کار بدین شکل هستش:

BEGIN TRAN
--You can now Select, Update, and/or whatever operation that suits your needs...
--If anything goes wrong, you can call ROLLBACK TRAN to rollback the operations...
--or you can call COMMIT TRAN to commit the changes you've already made.

برای اطلاعات بیشتر میتونید به SQL Server Books Online رجوع کنید (و دنبال Rollback یا Commit بگردید)!

موفق باشید.

پاورقی: اینکارو میتونید از طریق ADO هم انجام بدید که سرانجام هر دو روش یک چیز هست.

ironman
یک شنبه 11 بهمن 1388, 15:30 عصر
سلام!

این آموزش مربوط به کار با Transaction ها در MS SQL Server 2005 هستش!

مقدمه:

در SQL ، TA ها برای انجام عملیات های خاصی استفاده می شود که باید تمام دستورات داخل آن به طور تضمینی اجرا شوند.

دستوراتی که در TA ها قرار می پیرند یا همه با هم اجرا می شوند و یا اگر مشکلی پیش بیاید هیچ یک از دستورات اجرا نشود!

طرزکار :

در MSSQL دستورات به صورت Begin Transaction شروع و با RollBack Transaction و یا Commit Transaction
خاتمه می یابد.

نمونه:




Begin Transaction
Insert into table1 (ID,name) values ( '1','mohammad')
Update Reserve Set number = number -1 where name = '"mohammad"'
Commit Transaction





موتور SQL هنگامی که دستور Begin را می بیند تمامی جداولی که درون بلاکش قرار گرفته اند را لاک می کند!

زمانی که دستور Commit را می بیند جداول لاک شده را آزاد میکند و در فایل لاپ نیز یک رکورد مبنی بر اتمام TA قرار میدهد!

حال اگر به جای دستور Commit دستور Rollback قرار بگیره SQL از طریق همان فایل های Log که ثبت کردها است تمام دستورات را Cancel می کند!

نکته ای که در اینجا مهم اینه که در TA ها خاصیت تشخیص خطا وجود نداره و شما باید با منطق برنامه نویسی این مشکل رو حل کنید!

برای حل این مشکل میتونید از دستور try , catch استفاده کنید.
موفق باشین

kohyar
یک شنبه 11 بهمن 1388, 16:28 عصر
ضمن تشكر از شما
سوال اينجاست كه آيا تو اس كيو ال سرور 2000 اين امكان وجود نداره

mehdi.mousavi
یک شنبه 11 بهمن 1388, 16:28 عصر
ضمن تشکر از شما سوال اینجاست که آیا تو اس کیو ال سرور 2000 این امکان وجود نداره

البته که وجود داره.

ironman
یک شنبه 11 بهمن 1388, 16:34 عصر
ضمن تشکر از شما
سوال اینجاست که آیا تو اس کیو ال سرور 2000 این امکان وجود نداره

درسته وجود داره...

A.S.Roma
یک شنبه 11 بهمن 1388, 18:53 عصر
سلام.
درست شنیده اید. برای اینکار میتونید از TRANSACTION ها در SQL Server استفاده کنید. روش کار بدین شکل هستش:

BEGIN TRAN
--You can now Select, Update, and/or whatever operation that suits your needs...
--If anything goes wrong, you can call ROLLBACK TRAN to rollback the operations...
--or you can call COMMIT TRAN to commit the changes you've already made.

برای اطلاعات بیشتر میتونید به SQL Server Books Online رجوع کنید (و دنبال Rollback یا Commit بگردید)!

موفق باشید.

پاورقی: اینکارو میتونید از طریق ADO هم انجام بدید که سرانجام هر دو روش یک چیز هست.
لطفا" در مورد پاورقیتون توضیح بدید :لبخند:

mehdi.mousavi
یک شنبه 11 بهمن 1388, 19:36 عصر
لطفا" در مورد پاورقیتون توضیح بدید :لبخند:

سلام.
لطفا به این سایت (http://msdn.microsoft.com/en-us/library/system.data.common.dbconnection.begintransaction.a spx) رجوع کنید. در واقع متودهای مزبور، بهتون امکان ایجاد یک Instance از کلاس DbTransaction (http://msdn.microsoft.com/en-us/library/system.data.common.dbtransaction.aspx)رو میدن که می تونید توی کد خودتون، Commit یا Rollback کنید. البته، شما همواره می تونید از TransactionScope هم استفاده کنید که در این حالت، باید برخی از پارامترها رو مد نظر داشته باشید.

موفق باشید.

yakooza2009
جمعه 16 بهمن 1388, 15:53 عصر
شما اگه از شی CONNECTION استفاده کنید
خودش دارای عملیات تراکنش هست
و خوبی این کار اینه که یک عملیات یا به صورت 100 درصد انجام میشه و کنترل برنامه رو میده به شما
یا اصلا انجام نمیشه

yakooza2009
جمعه 16 بهمن 1388, 15:54 عصر
منظورم اینکه که خود شی کانکشن دارای متد های شروع تراکنش و .... هست

asp2.net
دوشنبه 07 تیر 1389, 12:47 عصر
میشه با یک مثال توضیح بدی متشکرم

minaalamshahi
یک شنبه 06 فروردین 1391, 15:32 عصر
کسی میتونه این مبحث رو کامل کنه؟