2009-05-08 72 views
9
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 

Source Error: 

Line 91: 
Line 92:    DataSet getData; 
Line 93:    getData = SqlHelper.ExecuteDataset(ConfigurationManager.ConnectionStrings["connstr"].ConnectionString, CommandType.StoredProcedure, "Course_NewReportGet_Get_Sav", objPara); 
Line 94: 
Line 95:    foreach (DataRow dr in getData.Tables[0].Rows) 


Source File: c:\Users\Ryan\bancroft archive\santiago\santiago code\trunk\admin\tools\Optimus.aspx.cs Line: 93 

Stack Trace: 

[SqlException (0x80131904): Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.] 
    System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1950890 
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4846875 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194 
    System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392 
    System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33 
    System.Data.SqlClient.SqlDataReader.get_MetaData() +83 
    System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +297 
    System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32 
    System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141 
    System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12 
    System.Data.Common.DbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +10 
    System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +130 
    System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +287 
    System.Data.Common.DbDataAdapter.Fill(DataSet dataSet) +94 
    Mexico.Data.SqlHelper.ExecuteDataset(SqlConnection connection, CommandType commandType, String commandText, SqlParameter[] commandParameters) +149 
    Mexico.Data.SqlHelper.ExecuteDataset(String connectionString, CommandType commandType, String commandText, SqlParameter[] commandParameters) +93 
    admin_tools_Optimus.GetUsers() in c:\Users\Ryan\bancroft archive\santiago\santiago code\trunk\admin\tools\Optimus.aspx.cs:93 
    admin_tools_Optimus.GetCompanies() in c:\Users\Ryan\bancroft archive\santiago\santiago code\trunk\admin\tools\Optimus.aspx.cs:75 
    admin_tools_Optimus.Proceed(Object sender, EventArgs e) in c:\Users\Ryan\bancroft archive\santiago\santiago code\trunk\admin\tools\Optimus.aspx.cs:43 
    System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111 
    System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110 
    System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 
    System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 
    System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565 
+2

Thuộc tính ConnectionTimeout chỉ đọc. –

Trả lời

14

Có lẽ điều này không áp dụng, nhưng tôi nghĩ nó nên được đề cập không kém. CommandTimeOut mặc định là 30 giây. Điều này sẽ mất rất nhiều thời gian cho bất kỳ hành động nào đang xảy ra trong 99,9% của một ứng dụng web. Trừ khi bạn hoàn toàn chắc chắn rằng hành động sẽ mất nhiều thời gian hơn thế, bạn nên dành thời gian của bạn cố gắng tối ưu hóa sql để nó trở về trong < 30 giây. Lập chỉ mục thích hợp là một nơi tốt để bắt đầu cho điều đó.

+0

điều này thực sự là một thỏa thuận một thời gian, tôi đang cố gắng chuyển đổi dữ liệu khổng lồ nhưng vẫn giữ thời gian, ngay cả sau khi tôi đặt thời gian chờ là 5000 – BigOmega

+1

@Ryan: Nếu đó là thỏa thuận một lần, hãy sử dụng trình quản lý sql để thực hiện truy vấn hoặc truy vấn của bạn. –

+11

Đề nghị tốt, nhưng tiếc là nó không trả lời câu hỏi của OP. Có một số trường hợp khi chạy truy vấn rất dài đối với DB là tùy chọn duy nhất của bạn. Thay đổi SqlCommand.CommandTimeout sẽ làm việc trong trường hợp này. –

1

Bạn có thể thực hiện việc này bằng cách thêm "Kết nối thời gian chờ = 90" vào chuỗi kết nối. Nếu truy vấn của bạn mất hơn 30 giây mặc dù bạn thực sự nên xem xét tối ưu hóa truy vấn bằng cách nào đó. Có thể cần phải thêm chỉ mục hoặc có thể cần tạo một chế độ xem, v.v.

Chỉnh sửa vấn đề chính xác được chỉ ra bởi nhận xét @Stijn.

+2

ConnectionTimeout là thuộc tính chỉ đọc. – Stijn

+1

thêm một "thời gian chờ kết nối" vào chuỗi kết nối sẽ giải quyết các vấn đề với kết nối cơ sở dữ liệu và không hết thời gian chờ trong khi thực hiện lệnh SQL. Bạn sẽ cần phải đặt SqlCommand.CommandTimeout cho rằng – dotnetguy

+0

@Stijn, j0tt là đúng trong đó bạn rất có thể thiết lập thời gian chờ kết nối thông qua chuỗi kết nối. Nhìn vào connectionstrings.com cho các ví dụ – dotnetguy

18

Bạn có thể tăng khoảng thời gian chờ trên lệnh bằng cách đặt thuộc tính SqlCommand.CommandTimeout.

+0

Tôi biết điều này là cũ nhưng tôi muốn bỏ phiếu xuống (nhưng tôi không thể vì danh tiếng thấp của tôi). Anh ta không thể sử dụng 'SqlCommand.CommandTimeout' vì anh ta đang sử dụng lớp SqlHelper của Microsoft.ApplicationBlocks.Data. – Dobermaxx99

3

+1 đến Al vì 30 giây sẽ rất nhiều. Làm cho khoảng thời gian chờ lâu hơn thực sự chỉ là một băng cho vấn đề cơ bản.

Theo kinh nghiệm của tôi, proc được lưu trữ quá đắt 90% thời gian. Khi tôi đã xem xét các lỗi này cuối cùng, tôi đã có một quy tắc chung là không có chi phí proc được lưu trữ nhiều hơn 1.00. Họ càng đắt tiền, càng có nhiều rủi ro trong việc ngăn chặn và tạo ra những ngoại lệ này.

+0

Làm thế nào để bạn biết tiêu chí hiệu suất là gì cho thói quen này? Có lẽ một công việc nền tảng của nó mà làm rất nhiều trong một proc lưu trữ –

+0

Sau đó, rõ ràng lời khuyên này không áp dụng. Emptor caveat. –

8

Sau đó thêm nó vào chuỗi kết nối:

server={servername};database={dbname};uid={username};pwd={password};Connect Timeout=600 
+0

Không phải OP đang cố gắng tìm hiểu cách tăng thời gian chờ lệnh? Bạn không thể thay đổi điều đó từ chuỗi kết nối.Câu trả lời của @JP Alioto là gần nhất với những gì đang được hỏi – dotnetguy

2

truy vấn sử dụng không được tối ưu hóa cho số lượng dữ liệu. Trong trường hợp của chúng tôi, chúng tôi đã xóa dữ liệu chưa sử dụng, nhưng một tùy chọn tốt hơn nên tối ưu hóa truy vấn hoặc để xem xét việc dọn dẹp. Sau hành động chúng tôi không nhận được lỗi nữa. Ofcourse nó phụ thuộc vào tình hình mà bạn nhận được lỗi này và nếu giải pháp này sẽ giúp bạn ra ngoài.

Các vấn đề liên quan