PDA

View Full Version : سوال: ایجاد وقفه برای ارسال اطلاعات به sql



vaheeed
شنبه 05 بهمن 1392, 12:25 عصر
سلام
یه برنامه دارم که اطلاعات تحلیل میشه و به sql ارسال میشه ، اگر زمان تحلیل زیاد باشه بعد از 60 ثانیه خطا میده که : شما 60 ثانیه پردازش انجام دادید بدون اینکه اطلاعات رو پمپ کنید
در حال حاضر برای اینکه کارم راه بیفته یه دیالوگ باکس گذاشتم که بعد از هر تحلیل 100 میلی ثانیه نمایش داده بشه و بعد بسته بشه که اون فرصت برای انتقال اطلاعات به برنامه داده بشه ، میخواستم بدونم راه حل بهتر چیه که خودش هر زمان به مرز پر شدن رسید یه وقفه ایجاد کنه یا یک کاری کنه و اطلاعات رو ارسال کنه ؟؟

vaheeed
یک شنبه 06 بهمن 1392, 09:06 صبح
روش یا دستوری رو پیشنهاد نمیدن دوستان؟؟

saeedr22
یک شنبه 06 بهمن 1392, 09:29 صبح
روش یا دستوری رو پیشنهاد نمیدن دوستان؟؟
نمی دونم منظورتونو درست متوجه شدم یا نه..ولی می تونین از
Thread.Sleep(2000);
هم استفاده کنید

shahryari
یک شنبه 06 بهمن 1392, 10:06 صبح
سلام
چرا بعداز 60 ثانیه خطا میده ؟؟ تایمر گذاشتید؟؟

nathan
دوشنبه 07 بهمن 1392, 09:04 صبح
ببینین می تونین از یک متغیر bool استفاده کنین. به صورت پیش فرض false باشه حالا یک تایمر می خواید که هر 60 ثانیه یه پالس بده و در رخداد پالس اون ذخیره سازی تحلیل شما رو انجام بده . حالا باید متغیر رو در داخل متدی که تحلیل و پمپ رو انجام میده بعد از اتمام مراحل true کنین. با توجه به زمان 60 ثانیه اگر در زمان پالس متغیر شما هنوز false باشه می تونید پیغام مورد نظر رو نمایش بدین.

nathan
دوشنبه 07 بهمن 1392, 09:07 صبح
البته باید این رو هم اضافه کنم که پیش از فراخوانی متد مربوط به تحلیل باید خصوصیت enabled تایمر رو true کنین و در پایان همون متد enabled تایمر رو دوباره false کنین.

vaheeed
سه شنبه 08 بهمن 1392, 13:33 عصر
1- با sleep موضوع حل نمیشه ، چون کل نخ اصلی (برنامه) میخوابه پس ارسال اطلاعات هم صورت نمیگیره
2- نه تایمر نذاشتم یه حلقه for هست که دائم داره تکرار میشه و در پایان حلقه باید دستور آپدیت رو به پایگاه بفرسته که یک سطر آپدیت بشه ، حالا وقتی زمان کل حلقه از 60 ثانیه بیشتر بشه اون خطا میاد
3- نمیخوام پیغامی نمایش داده بشه ، فقط الان برای اینکه کارم راه بیفته یه پیغام نشون میدم و با خودش میبندمش تا مشکل حل بشه ، در کل میخوام فقط وقتی که نیاز به ارسال اطلاعات شد (یعنی به حدود 60 ثانیه رسید) خودش خود به خود برنامه یه استراحت داشته باشه تا اطلاعات به پایگاه ارسال شود
این خود حلقه هست ، البته از این حلقه چند بار دیگه بصورت مشابه استفاده میشه ولی همین هم اگه تعدادش خیلی زیاد بشه همون خطا میاد
for (double j = Start; j <= End - 0.5; j += 0.5)
{
cmd.Parameters.Clear();
cmd.CommandText = "update " + tBNameProgram.Text + "F" + " set f" + Circle + "=" + frq*10 + " where Radif='" + j + "'";
cmd.ExecuteNonQuery();

}

frmWait frmwait3 = new frmWait();
frmwait3.ShowDialog();

دو خط آخر رو هم در حال حاضر گذاشتم که همون فورم رو بیاره که اطلاعات ارسال بشه یا هر اتفاق دیگه ای که باید بیوفته که من نمیدونم چی هست

vaheeed
شنبه 12 بهمن 1392, 08:49 صبح
اینم متن خطا

plus
شنبه 12 بهمن 1392, 17:08 عصر
Application.DoEvents باعث میشه تا Windows Message ها Pump بشن.فکر میکنم مشکل شما رو حل کنه.

for (double j = Start; j <= End - 0.5; j += 0.5)
{
cmd.Parameters.Clear();
cmd.CommandText = "update " + tBNameProgram.Text + "F" + " set f" + Circle + "=" + frq*10 + " where Radif='" + j + "'";
cmd.ExecuteNonQuery();
Application.DoEvents();
}

پ.ن:
سعی کنید اگه میشه (که احتمالا با توجه به کد شما میشه) به طریقی بجای اجرای متعدد دستورات SQL، دستورSQL رو طوری بنویسید که با یکبار اجرا نتیجه بده.
اجرای دستورات SQL، به صورت پشت سر هم در حلقه روش مناسبی نیست.

vaheeed
دوشنبه 14 بهمن 1392, 09:43 صبح
البته برنامه رو جوری نوشتم که حداقل الان نمیتونم تغیر بدم و کلش رو یک دستور کنم ولی با کدی شما مشکلم کاملا برطرف شد و زمان پردازش از 30 دقیقه به 3 دقیقه کاهش پیدا کرد !!! واقعاا ممنون