PDA

View Full Version : lock کردن table



minaalamshahi
سه شنبه 22 فروردین 1391, 10:55 صبح
با سلام
من در کدهام از
using (TransactionScope transactionScope = new TransactionScope())
{
ds.Clear();
ds=admin.SearchAllHighSelectByTeacherIdIsNotTemp(l ong.Parse(Session["HighTeacherId"].ToString()),long.Parse(Session["HighSetting_Id"].ToString()),out except);

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
ErrorCode = admin.ChangeCapacityHighSelect(long.Parse(ds.Table s[0].Rows[i]["HighSchool_Id"].ToString()), long.Parse(ds.Tables[0].Rows[i]["HighCatena_Id"].ToString()), long.Parse(ds.Tables[0].Rows[i]["HighLesson_Id"].ToString()), ds.Tables[0].Rows[i]["HighSelect_Level"].ToString(), long.Parse(ds.Tables[0].Rows[i]["HighTeacher_Id"].ToString()), long.Parse(ds.Tables[0].Rows[i]["HighSetting_Id"].ToString()), out except);
if (ErrorCode == 0)
{
//nothing
}
else
{
State = true;
}
}
if (State == false)
transactionScope.Complete();
}

استفاده کردم تا چندین سطر ویرایش بشن یا اصلا نشن
اما احتیاج دیگه ای که هست اینه که اگر دو کاربر دروس یکسانی رو انتخاب کنن و این دستور رو کلیک کنند درس برای کسی درج بشه که کلیه خطوط بالا براش اجرا شده
یعنی اگر کاربری درس 1و2و3
کاربر 2 درس 2و4و5
رو بگیرن
و کاربر 1 زودتر کلید رو زد
درس 1و2و3 برای کاربر 1 درج بشه و در حین اینکار هیچ چیزی برای 2 درج نشه بعد کاربر 2 وارد میشه میبینه درس 1 قبلا اخد شده پس هیچ درسی براش درج نشه و از حلقه خارج بشه
یکی از دوستان گفت transaction خودش قفل کردن برای کاربر 1 رو انجام میده اما توصیه دیگران رو استفاده از دستوری به اسم lock هست
اگر باید دیتابیس lock بشه ممنون میشم منو راهنمایی کنید با توجه به اینکه درام از transaction هم استفاده می کنم

d_derakhshani
سه شنبه 22 فروردین 1391, 12:02 عصر
transaction ها lock که شما می خواهید رو انجام نمیده. برای lock کردن table باید از دستور مربوطه اش در sql استفاده کنید. در نتیجه مربوط به تالار sql میشه. لطفا سوال خودتون رو اونجا مطرح کنید

C#.net
سه شنبه 22 فروردین 1391, 15:27 عصر
1- یک breakpoint در خط 18 قبل از transactionScope.Complete بذارید
2- برنامه رو اجرا کنید
3- در SQL Server سعی کنید به جدول های درگیر در تراکنش دسترسی پیدا کنید (مثلا select یا insert)

خواهید دید جدول ها lock هستند