2009-05-08 18 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

ConnectionTimeoutプロパティは読み取り専用です。 –

答えて

14

おそらくこれは当てはまりませんが、それほど言及する必要はありません。デフォルトのCommandTimeOutは30秒です。これは、Webアプリケーションの99.9%で起こっているすべてのアクションに対して、十分な時間が必要です。アクションがそれよりも時間がかかることが絶対に確実でない限り、SQLを最適化しようとすると、<に戻ります。適切なインデックス作成は、それを開始するのに適しています。

+0

これは実際には1回限りの取引ですが、大量のデータ変換を実行しようとしていますが、タイムアウトを5000に設定してもタイムアウトします。 – BigOmega

+1

@ Ryan:1回限りの取引の場合は、クエリを実行します。 –

+11

お勧めですが、残念ながらOPの質問には答えません。 DBに対して非常に長いクエリを実行することが唯一の選択肢であるケースがいくつかあります。この場合、SqlCommand.CommandTimeoutを変更すると動作します。 –

1

「接続タイムアウト= 90」を接続文字列に追加することでこれを達成できます。クエリが30秒以上かかる場合は、何とかクエリを最適化することを検討する必要があります。インデックスを追加する必要があるか、ビューを作成する必要があるかもしれません。

@Stijnコメントで指摘されている問題を修正するために編集されています。

+2

ConnectionTimeoutは読み取り専用のプロパティです。 – Stijn

+1

接続文字列に「接続タイムアウト」を追加すると、データベース接続の問題が解決され、SQLコマンド実行中のタイムアウトは解決されません。そのためにSqlCommand.CommandTimeoutを設定する必要があります。 – dotnetguy

+0

@Stijn、接続文字列を使用して接続タイムアウトを設定することができます。例についてはconnectionstrings.comをご覧ください – dotnetguy

18

SqlCommand.CommandTimeoutプロパティを設定すると、コマンドのタイムアウト時間を長くすることができます。

+0

私はこれが古いことを知っていますが、私はダウン投票を望んでいます(しかし、私の低い評判のせいで私はできません)。彼はMicrosoft.ApplicationBlocks.DataでSqlHelperクラスを使用しているため、 'SqlCommand.CommandTimeout'は使用できません。 – Dobermaxx99

3

Alは30秒間が多くなければならないためです。タイムアウト期間を長くすることは、基本的な問題の包帯に過ぎません。

私の経験では、ストアドプロシージャは時間の90%も高価です。これらのエラーを最後に見直していたとき、私はストアドプロシージャのコストが1.00を超えないという一般的なルールを持っていました。彼らがより高価なほど、これらの例外をブロックして生成するリスクが大きくなります。

+0

このルーチンのパフォーマンス基準はどのように分かりますか?たぶん、その中でたくさんのバックグラウンドの仕事があります。ストアドプロシージャ –

+0

明らかにこのアドバイスは当てはまりません。買い手責任負担。 –

8

そして、接続文字列でそれを追加します。

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

OPがコマンドタイムアウトを増やす方法を見つけようとしていませんか?これは接続文字列から変更することはできません。@JP Aliotoの答えは、尋ねられていることに最も近い – dotnetguy

2

使用したクエリは、データの量のために最適化されていませんでした。私たちのケースでは、未使用のデータをパージしましたが、より良い選択肢は、クエリを最適化するか、ハウスキーピングを調べることです。アクションの後、私たちはエラーをもう受信しませんでした。もちろん、それはあなたがこのエラーを受け取った状況と、この解決策があなたを助けるかどうかによって決まります。

関連する問題