PDA

View Full Version : تمام شدن زمان انجام دادن پرس وجو در برنامه ام



Mehrali_ali
سه شنبه 17 مرداد 1391, 18:52 عصر
سلام
من یک query دارم که سنگین هستش و موق انجام اون در برنامه ام Error:Timeout expiredمیده .
اما همین queryدر خود sql که اجرا میکنم مشکلی نداره و جواب میده.
حالا باید چطور این زمان رو بیشتر کنم تا این خطا رو ندهد.
مرسی

veniz2008
سه شنبه 17 مرداد 1391, 19:44 عصر
سلام. کلا" دستوراتی که فقط در sql اجرا میشن طبیعی هست که سریعتر اجرا بشه ( چون زمانیکه ویژوال رو هم درگیر میکنی بین sql و ویژوال باید ارتباط برقرار بشه). اما در مورد سوالتون. از منوی toolbox یک شی backgroundworker رو به فرمت اضافه کن. این شی زمانیکه میخوای کارهای سنگین و زمان بر رو انجام بدی موثر هست. دو تا رویداد مهم داره که به سادگی مقدار دهی میشن( در واقع همون کدهای همیشگی هستن فقط نحوه قرار گرفتنش تغییر میکنه).
1. رویداد DoWork : عملیات اصلی برنامه اینجا نوشته میشه.
2. رویداد RunWorkerCompleted : زمانیکه عمل در پس زمینه با موفقیت انجام میشه، اونوقت در این مرحله نتیجه کار قابل مشاهده خواهد بود.
فرض کن میخوای 200 هزار رکورد رو درون گریدویو نمایش بدی.اگر از روش معمول استفاده کنی احتمالش زیاده که یا برنامه هنگ کنه یا خیلی برنامه کند بارگذاری بشه. واسه چنین مواقعی همونطور که گفتم از شی Backgroundworker استفاده میکنی.
اینم کدش:
ابتدا رویداد Dowork رو کدنویسی میکنیم:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
SqlConnection con = new SqlConnection("Data Source = (local);Initial Catalog = dastresy;Integrated security = True");
SqlDataAdapter da = new SqlDataAdapter("select * from karbaran", con);
dt.Clear();
da.Fill(dt);
}
حالا هم رویداد RunWorkerCompleted :

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
dataGridView1.DataSource = dt;
}
حالا هم درون دکمه ای که قراره با کلیک کردنش محتویات گرید رو نمایش بدی،این شی رو صدا میزنی. به اینصورت:

private void btnshow_Click(object sender, EventArgs e)
{
if (!backgroundWorker1.IsBusy)
backgroundWorker1.RunWorkerAsync();
}
موفق باشی دوست من.

veniz2008
سه شنبه 17 مرداد 1391, 19:49 عصر
شی backgrounworker رو از toolbox و از تب components میتونی روی فرم بندازی.
موفق باشی.

Mahmoud.Afrad
چهارشنبه 18 مرداد 1391, 00:35 صبح
اگر متن خطا را کامل تر قرار میدادید بهتر بود.
اگر خطا مربوط به sql باشه فکر کنم از کانکشن استرینگ باشه. زمان timeout را در کانشکن استرینگ افزایش بدید یا کلا حذف کنید.