PDA

View Full Version : سوال: خطاي Timeout expired و درستي اتصال من به ديتابيس؟



rana-writes
جمعه 02 دی 1390, 21:10 عصر
سلام دوستان برنامه نويس
در مورد اين خطا
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
سوال داشتم
من تقريبا يك سال و خورده اي هست كه سايتم آپ شده ولي تا حالا همچين خطايي نداشتم.
از امروز اين پيام رو ميگيرم تو سايتم
الانم يكي در ميون اين صفحه خطا مياد. وقتي يه صفحه رو باز ميكنم يه بار خطا ميده و شايد دو سه بار ديگه كه باز ميكنم خطا نميده
يعني ممكنه مشكل از هاست باشه؟
تو سرچي كه كردم توي سايت گفته بودن به علت نبستن كانكشنها بوده و بعد نوشته بودن اگه از using توي كانكشن استفاده بشه اين مشكل حل ميشه
شيوه كدنويسي و اتصالم به ديتابيس رو اينجا ميذارم، ميشه بررسي كنين بگين كارم درسته يا نه؟
و الان بايد براي برطرف شدن اين خطا چكار كنم؟

ممنون از راهنماييتون
من اينطوري متصل ميشم به ديتابيس، يه كلاس ساختم و توش كانكشن استرينگ رو قرار دادم




public static SqlConnection ConnectToMyDb()
{
string ConnectionString = ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString;
SqlConnection connection = new SqlConnection(ConnectionString);

try
{
connection.Open();
}
catch
{
}
return connection;
}






بعد توي يه كلاس ديگه تابعها رو نوشتم مثلا براي درج يا انتخاب از بانك به اين شكل:


//تابع درج نویسنده جدید
public static int InsertAuthor(string FName, string Lname, string BYear, Int16 Type, string Comment)
{
int row = 0;
using (SqlConnection connection = ConnectionManager.ConnectToMyDb())
{
SqlCommand command = new SqlCommand("Pub_InsertAuthor", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@FName", SqlDbType.NVarChar).Value = FName;
command.Parameters.Add("@LName", SqlDbType.NVarChar).Value = Lname;
command.Parameters.Add("@BYear", SqlDbType.Char).Value = BYear;
command.Parameters.Add("@Type", SqlDbType.TinyInt).Value = Type;
command.Parameters.Add("@Comment", SqlDbType.NVarChar).Value = Comment;

row = command.ExecuteNonQuery();
}
return row;
}


//نمایش اطلاعات کتاب
public static SqlDataReader ReadBook(int BookId)
{
SqlConnection connection = ConnectionManager.ConnectToMyDb();
SqlCommand command = new SqlCommand("Pub_ShowBook", connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@BookId", SqlDbType.Int).Value = BookId;

SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection);
return reader;
}


بعد هم توي برنامه اينطوري فراخواني ميكنم:




//فراخواني كتاب

using (SqlDataReader reader = PublishDataAccess.ReadBook(BookId))
{
if (reader.Read())
{
//درج كدهاي فراخواني فيلدهاي مختلف در متغيرها
}
}



توي سايتم هم از گريدويو استفاده كردم كه اون رو با استفاده از استورپروسيجر پر كردم.
آيا اين شيوه اصلا درسته؟
براي برطرف شدن خطاي ايجاد شده بايد چكار كنم؟


ممنون از راهنماييتون

بعدا اضافه شده در ساعت 23:11 :
الان يه اشكال بدتر پيش اومده
من از سرور اكسپلورر ويژوال استوديو به صورت ريمون به ديتابيسم وصل ميشم
دقيقا همين خطا رو اونجا هم دارم.
اشكال الان ديگه قطعا از هاسته درسته؟

rana-writes
شنبه 03 دی 1390, 10:10 صبح
يعني كسي جواب اين سوال رو نمي دونه؟

aserfg
شنبه 03 دی 1390, 11:17 صبح
بعد هم توي برنامه اينطوري فراخواني ميكنم:
سلام ،سعی کنید برای واکشی اطلاعاتی که حجم بالاتری دارند و موجب باز ماندن کانکشن می شوند از دیتا ریدر استفاده نکنید . اطلاعاتتون رو در یک شی غیر متصل داده ای مانند datatable ریخته(چون این اشیاء نیازی به باز ماندن کانکشن ندارند ) و بعد از آن استفاده کنید .
برای بررسی مشکل یک صفحه دیگه روی لوکال ایجاد کرده و با کانکشن هاست بهش وصل بشین و انواع واکشی رو هم با دیتا ریدر و هم با دیتا تیبل تست کنید تا علت خطا بدست بیاد .

myaffa
یک شنبه 07 خرداد 1391, 07:39 صبح
??? من از LINQ استفاده کردم و این مشکلو دارم اول از یه دیتابیس حجیم میخونم و اونو کلا تو یه متغیر var میریزم ولی مرتبا TimeOUT میشه لطفا راهنمایی کنید
فکر کنم از web.config باشه ولی تو قسمت httpRuntime همه چیزو ماکزیمم گزاشتم ولی بازم کار نکرد با دستور Server.ScriptTimeout هم زمانو ماکزیمم گزاشتم ولی باز هم کار نکرد لطفا اگر کسی میدونه راهنمایی کنه مرسی

مهدی کرامتی
یک شنبه 07 خرداد 1391, 08:05 صبح
به نظر می رسد مشکل از دیتابیس سرور هاست تان باشد.