PDA

View Full Version : سوال: جلوگیری از خواندن یک رکورد توسط دو کاربر به صورت همزمان



moferferi
یک شنبه 21 تیر 1388, 09:33 صبح
سلام.
ایا میشه به وسیله تراکنش ها کاری کرد که اگه اگه کاربر یه رکوردی را select کرد (حالا به منظور edit یا delete ویا هر کار دیگه)کاربران دیکه نتونن اون رکورد را select کنن.

seven7777777
یک شنبه 21 تیر 1388, 10:44 صبح
البته من منظور شما رو درست متوجه نشدم ولی فکر کنم با یه متغیر bool بتونی یه کارایی بکنی . می تونی این متغیر رو تو دیتابیس بسازی بعد هر بار قبل از دسترسی به یه رکورد اول چک کنی اونو اگه آزاد بود قفل کنی و بخونی .

moferferi
یک شنبه 21 تیر 1388, 11:09 صبح
سلام.
تقریبا یه همچین چیزی میخوام.
فرض کنید یه فروشگاه انلاین درست کردید.موجودی کالای ایکس مثلا 1 عدد است .کاربر اول میاد و میبینه که یکی موجوده کاربر دوم هم وارد میشه و مببینه یکی موجوده .حالا اگه کاربر اول خرید کنه مقدار صفر میشه و وقتی کاربر دوم روی خرید کلیک میکنه با خطا مواجه میشه.

esmaeily-hosein
یک شنبه 21 تیر 1388, 13:33 عصر
مربوط به مبحثی به نام concurrency نه تراکنش ،
تو سایت search کن قبل دربارش بحث شده

moferferi
یک شنبه 21 تیر 1388, 18:59 عصر
بهترين روش چيه؟
ايا اين كه ركورد را قفل كنيم يا اينكه از تريگر ها (كه فعلا بلد نيستم باهاش كار كنم) استفاده كنيم

البته من يه نظري دارم .ميشه بگيد كه اين تز درست هست يا نه؟
من در قشمت شرط متد ويرايش خودم اون فيلد هايي كه ممكنه كاربران تغيير بدن را ميزارم و قبل از زدن دكمه ويرايش دوباره اون ركورد را انتخاب ميكنم اگه اون فيلد مورد نظر كه ميخواهيم تغيير بديم مقدارش با مقدار قبلي فرق ميكرد به كاربر يه پيغام بده كه ايا باز هم قصد تغيير را داريد يا نه و يا اصلا جلوگيري از انجام اين كار بكنيم.

asd_moghadas
سه شنبه 23 تیر 1388, 07:15 صبح
سلام
درقالب کد کسی میتونه کمک کنه دراین زمینه تئوریک زیاد بحث شده

ASKaffash
سه شنبه 23 تیر 1388, 07:59 صبح
سلام
ولی این سئوال وزن SQLServer دارد ولی با این اوصاف میتوانید رکوردهای مورد نظر را برای اعمال تغییرات دیگران قفل کنید:


Set Tran Isolation Level SerializableBegin TranSelect * From Users With (RowLock) Where UserID=...]

asd_moghadas
چهارشنبه 24 تیر 1388, 07:31 صبح
بازهم سلام
من از اس کیو ال 2005 استفاده میکنم از اینکه راهنمایی کردید ممنون حالا اگه ممکنه کمی بیشتر توضیح بدهید که من مبتدی هم متوجه بشم حالا سوالی که برایم پیش امده اینه که این کد را قبل از دستور اپدیت باید بنویسم ؟وچطور استفاده کنم

ASKaffash
چهارشنبه 24 تیر 1388, 08:14 صبح
سلام
شما میتوانید با این روش با یک Select مشروط رکوردهای مورد نظر را قفل کنید و بعد از این دستورات شما دستور Update خود را بنویسید و Connection را که ببندید اتوماتیک قفل رکوردها آزاد میشود.