برنامه نویسی

برنامه نویسی

وبلاگ برنامه نویسی
برنامه نویسی

برنامه نویسی

وبلاگ برنامه نویسی

Transactionهای پیشرفته و سطوح level isolation

اینجا، مرز transactionها نیست. همانطور که قبلا در توصیف از خصوصیات ACID گفتم، transactionها، لزوما با دقسق ترین تعریف isolated هماهنگ نیست. دلیلش این است که وقتی شما transaction را ایجاد می کنید، می توانید سطح isolation یک transaction را configure کنید.

چرا می خواهید این کار را بکنید؟ performance. در حالی که isolation در تئوری بسیار جالب است، کمونیزم همه اینگونه بود. در واقعیت، قفل کردن گروهی از ردیف ها وقتی که یک transaction روی آن کار می کند، ممکن است به خاطر performance شدنی نباشد. لزوما نباید هر reader را از خواندن یک جدول متوقف کنید، زیرا transaction شما همه چیز را قفل می کند.

برای سبک کردن این نگرانی، .NET دارای قابلیت تعیین کردن سطوح isolation هنگام ایجاد یک transaction است. انجام این کار فقط نیاز به supply کردن یک System.Data.IsolationLevel value به متد BeginTransaction است. Valueهای در دسترس برای SQL عبارتند از:

ادامه مطلب ...

Transaction های دات نت

در .NET،transactionها با کلاس System.Data.SqlClient.SqlTransaction کنترل می شوند. باز هم یک transaction روی یک object SqlConnection وجود دارد و بدین ترتیب شما همه objectهای SqlCommand را با استفاده از آن اتصال ایجاد می کنید. بایید نگاهی به این مثال بیاندازیم.

ادامه مطلب ...

یک Transaction چیست؟

در یک application database، اغلب با موقعیتی روبرو می شوید که نیاز به اجرای دو یا چند فرمان SQL دارید، به طوریکه اگر یکی از عبارات اجرا نشود، آنگاه هیچ عبارت دیگری قادر به تغییر database نخواهد بود. مثال کلاسیک این مورد، انتقال پول از یک حساب بانکی به حساب دیگر است.

UPDATE Accounts SET Balance = Balance □ 10 WHERE Customer = 1;
UPDATE Accounts SET Balance = Balance + 10 WHERE Customer = 2;

اگر قرار بود عبارت اول SQL، اجرا شود و عبارت دوم SQL اجرا نشود، آنگاه 10 دلار از حساب مشتری اول کم می شود، اما هرگز به حساب مشتری دوم واریز نمی شود. وقتی 10 دلار به طور کلی ناپدید شود، زیاد جالب نیست.

یک راه برای مقابله با این مشکل، کنترل وضعتت در database access codeتان است. می توان این کار را توسط گرفتن System.Data.SqlClient.SqlException هنگام انجام database access، انجام دهید. اما این موقعیت آنقدر که ابتدا به نظر می رسد آسان نیست. ممکن است عبارات SQL در جاهایی اجرا نشود:

  • قبل از اینکه اولین عبارت SQL اجرا شود.
  • بعد از اینکه اولین عبارت SQL اجرا شود.
  • بعد از اینکه دومین عبارت SQL اجرا شود.
ادامه مطلب ...