PDA

View Full Version : اجرا شدن یا نشدن دستورات یک Transaction در #c



unique1984
پنج شنبه 27 فروردین 1388, 22:00 عصر
سلام
در بخشی از یک برنامه از Transaction استفاده کردم و در این Transaction ، چند دستور Insert در جداول مختلف قرار داره.
فرض کنین ما 4 تا دستور insert داریم ، حالا اگه سه تا Insert اول هیچ مشکلی نداشتند و مشکل در Insert چهارمی باشه ،آیا اون سه تا Insert اولی هم انجام میشند؟ منظورم اینه که آیا قبل از اعمال دستورات موجود در Transaction از صحت عملکرد اونها اطمینان کسب میکنه و بعد اونها رو اجرا میکنه یا نه؟

aminkk
جمعه 28 فروردین 1388, 00:00 صبح
،آیا اون سه تا Insert اولی هم انجام میشند؟ منظورم اینه که آیا قبل از اعمال دستورات موجود در Transaction از صحت عملکرد اونها اطمینان کسب میکنه و بعد اونها رو اجرا میکنه یا نه؟
transaction رو داخل try...catch بنویسید و commit رو در پایان catch بنویسید تا در صورت بروز مشکل هیچ رکوردی ثبت نشه.

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

prankster
جمعه 28 فروردین 1388, 01:23 صبح
وقتی sql server فرمان begin transaction را دریافت می کند، کلیه فرمانهای بعدی تا قبل از commit کردن و یا rollback شدن، در حالت pending قرار می گیرند، به این معنی که مثلا در مثال شما 3 insert اول هیچکدام انجام نمی شوند و جدول هایی که Insert بر روی آنها انجام شده است به حالت قفل شده یا Locked در می آیند و هیچ عمل دیگری را پاسخ نمی دهند. هنگامی که کل عملیات با موفقیت انجام شد با ارسال فرمان commit به sql server کلیه insert ها انجام می شوند. نکته بسیار مهم این است بعد از شروع transaction حتما باید فرمان commit و یا در صورت بروز خطا rollback ارسال شوند در غیر این صورت dead lock برای جدول بوجود می آید
در یک بلوک try...catch دستورات sql را بنویسید، در انتهای try فرمان commit را ارسال کنید و در صورت بروز خطا در بلوک catch فرمان rollback را ارسال کنید تا تغییرات ذخیره نشوند!

hasan_esfahan
جمعه 28 فروردین 1388, 20:23 عصر
استفاده از Transaction در بانک های اطلاعاتی (http://barnamenevis.org/forum/showpost.php?p=474498&postcount=5)