PDA

View Full Version : Timeout expired



maxpayn2
چهارشنبه 28 آذر 1386, 10:26 صبح
سلام
پروژم درست کار میکرد ولی الان این خطا رو میده :


Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.


مشکل چیه ؟

shahab_ksh
چهارشنبه 28 آذر 1386, 10:38 صبح
http://www.15seconds.com/issue/040830.htm

maxpayn2
چهارشنبه 28 آذر 1386, 12:54 عصر
یکی از روش هایی که تو این مقاله پیشنهاد کرده اینه که connection ها رو توی try قرار بدیم و تو finaly اونها رو close کنیم ، سوال اینه که باید هر connection رو تو یک try بزاریم یا میشه همه connection ها رو تو یک try قرار داد ؟

hamedgh
چهارشنبه 28 آذر 1386, 14:36 عصر
یکی از روش هایی که تو این مقاله پیشنهاد کرده اینه که connection ها رو توی try قرار بدیم و تو finaly اونها رو close کنیم ، سوال اینه که باید هر connection رو تو یک try بزاریم یا میشه همه connection ها رو تو یک try قرار داد ؟

فرقی نمی کنه مهم این است که در finaly حتما بسته شود

maxpayn2
چهارشنبه 28 آذر 1386, 14:51 عصر
فکر کردم فرق کنه چون من همه کانکشن ها رو تو یه try گذاشتم ولی جواب نداد ، الان دارم برای هر کامکشن یه try میذارم ببینم چی میشه ؟ راستی تعداد try ها روی performance تاثیری نداره ؟

Nightbat
چهارشنبه 28 آذر 1386, 22:19 عصر
از using هم میتونی استفاده کنی. خوبیش اینه که کارت که تموم شه خودش همه چی رو میبنده

hamedgh
پنج شنبه 29 آذر 1386, 10:16 صبح
در یک try می شه چند تا کانکشن زد ولی کاری درستی نیست !!!!!
مگر چکار می خواهی بکنی این همه کانکشن داری
مگر سه لایه نمی نویسی یک بار کانکش در یک کلاس دیگر اجرا می شود

یک کلاس بنویسی که Sqlcommand را بگیرد بعد ان را اجراکند نتیجه را بگوید
دیگر فقط یک کانکشن و یک try در کل پروژه ات داری این همه درد سر هم نداری

maxpayn2
یک شنبه 02 دی 1386, 12:43 عصر
از using هم میتونی استفاده کنی. خوبیش اینه که کارت که تموم شه خودش همه چی رو میبنده

میشه بیشتر توضیح بدید ، چی رو using کنم ؟



یک کلاس بنویسی که Sqlcommand را بگیرد بعد ان را اجراکند نتیجه را بگوید
دیگر فقط یک کانکشن و یک try در کل پروژه ات داری این همه درد سر هم نداری

میشه بیشتر توضیح بدید ، من از حدود 30 تا Stored Procedure که هر کدوم متغیر مخصوص به خودش رو داره

hamedgh
یک شنبه 02 دی 1386, 19:45 عصر
پس از ست کردن نام Stored procedure و مقدار دادن ان اخر سر کامند را به جایی می فرستی
که ان را اجرا کند


cmd.CommandText="";
cmd.parameter.add("").value= "";
executecomand.nonqurey( cmd );


بعد در کلاس executecomand می توانی
انرا اجراکنی
خواستم یک لینک بهت بدم ولی چون احتیاج به لوگین دارد مهندس گفته این لینک ها تبلیغات است بی خیالش شدم مشکلی داشتی اولش بیشتر روش فکر کن بعد
بگو حلش کنیم

maxpayn2
دوشنبه 03 دی 1386, 09:00 صبح
من الان اینجوری مینویسم :




try

{
cnn1.ConnectionString = "Data Source=.;Database=database;Integrated Security=SSPI";
cnn1.Open();
SqlCommand cmd1 = newSqlCommand("select_page_title", cnn1);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.AddWithValue("@id", id);
SqlDataReader dr1 = cmd1.ExecuteReader();
if (dr1.Read())
{
Page.Title = dr1[0].ToString();
}
else

{
Label1.Text = "­ه¥ى êی©§ ëâ© ی¤ی§ ë§ں©§ یں ںھ «ی«¢ê ¥¨ه ¬§ى ں«¢";
}
cnn1.Close();



حالا باید اینو چی کارش کنم که اونجوری بشه ؟ میشه نمونه کد کلاس کانکشن رو هم بفرمایید

Nightbat
دوشنبه 03 دی 1386, 09:03 صبح
using (SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionSt rings["ConnStr"].ConnectionString)) {

CODE

}

maxpayn2
دوشنبه 03 دی 1386, 09:30 صبح
خیلی خیلی ممنون ، فقط یه سوال ، شما گفتید خوبیش اینه که کارت که تموم شد خودش همه چی رو میبنده ، یعنی نیازی به conn.close نیست ؟

Nightbat
دوشنبه 03 دی 1386, 09:35 صبح
خیلی خیلی ممنون ، فقط یه سوال ، شما گفتید خوبیش اینه که کارت که تموم شد خودش همه چی رو میبنده ، یعنی نیازی به conn.close نیست ؟
نه، در حقیقت هر چیزی که توی using استفاده می کنی فقط در همون scope معتبر ه و بعدش dispose می شه. conn ما هم بعد از استفاده بسته می شه و از بین میره.

maxpayn2
دوشنبه 03 دی 1386, 10:16 صبح
حالا فقط میمونه پاسخ پست شماره 10

Nightbat
دوشنبه 03 دی 1386, 11:35 صبح
حالا فقط میمونه پاسخ پست شماره 10

ببین، یه پروسیجر بنویس که توش همون کدهایی باشه که خودت نوشتی.
برای کلاست یه پارامتر ورودی در نظر بگیر که از نوع SqlCommand باشه.
از تو کدت اونجایی رو که داری command میسازی حذف کن و هر جا که داری ازش استفاده می کنی، از پارامتری ورودیت استفاده کن.

کلاست آمادست ( البته یه کارایی داره مثل اینکه اگه می خوای sqlreader برگردون که دیگه اینا رو خودت انجام بده )

هر جا که می خوای یه command اجرا کنی، بسازش و بفرست تو این پروسیجر.

maxpayn2
دوشنبه 03 دی 1386, 15:26 عصر
باز هم ممنون ، خدا خیرت بده