PDA

View Full Version : خطا هنگام اپدیت دیتابیس



mousa1992
سه شنبه 24 مرداد 1391, 00:25 صبح
سلام دوستان
هنگام اپدیت کردن مقادیر جدول این خطا رو میگیرم (گاهی)




There is already an open DataReader associated with this Command which must be closed first.


که باید به خاطر thread ای باشه که در همون لحظه داره عمل خواندن اطلاعات رو انجام میده
در ارتباط با دیتابیس مشکلات تداخل رو داشتم و تونستم با بررسی شرط هایی (وضعیت کانشکنم) این مشکل رو حل کنم
ایا برای این خطا راهی وجود داره ؟ چطوری میتونم هماهنگ کنم thread ها رو ، وقتی این یک داره میخونه اون صبر کنه و بعد از اتمام کار بیاد کارشو انجام بده (کمتر وقتی پیش میاد ولی خب همون نباید باشه )
تشکر از توجهتون

mousa1992
چهارشنبه 25 مرداد 1391, 00:21 صبح
سلام
راهشو پیدا کردم میگم بدرتون میخوره
با استفاده از یک حلقه ی while و متغیری لز نوع bool و دستور try- catch کنترلش کردم

public DataTable Select(string Command)
{
SqlDataAdapter da = new SqlDataAdapter(Command, DAL.Connection);
DataTable dt = new DataTable();

bool isFill = false;

DAL.Connect();

while (!isFill)
{
try
{
da.Fill(dt);
isFill = true;
}
catch
{
Thread.Sleep(100);
}
}

DAL.DisConnect();

return dt;
}

در صورتی که مشکلی پیش نیاد و جدول از اطلاعات پر بشه از حلقه میاد بیرون گرنه thread مدتی متوثق میشه و باز حلقه تکرار میشه
(فقط باید حواستون باشه اگر از کدتون خطا بگیره وارد حلقه ی بینهایت میشید و برنامه میهنگه :لبخند:) برا زمانی خوبه که اطلاعاتی مشترک وجود داره و چندتا thrad میخوان روی ان ها عملیاتی رو انجام بدن و تداخل بینشون پیش میاد با این کار مشکل حل میشه امیدوارم مفید واقع بشه
ممنون از توجه
موفق

ali.bahrami
چهارشنبه 25 مرداد 1391, 01:20 صبح
دوست عزیز به نظر من خطای کد شما اینه که data reader را نبستی.
شیء data reader هم مانند connection باید صراحتا بسته بشه.
مثلا : dataReader1.Close()

mousa1992
چهارشنبه 25 مرداد 1391, 01:45 صبح
ممنون از توجه
برنامه دستوری رو صادر میکنه جهت بازیابی اطلاعات و این ارور رو میگیرم ! و از قبل هیچ reader ی باز نشده !
ولی با این کار مشکل حل شد و دیگه اون خطا پیش نمیاد
متشکرم