1. ホーム

Timeout expired , 操作が完了する前に経過したタイムアウト時間、またはサーバー

2022-03-15 12:26:12

EnterpriseLibrary SQL Timeout expired ソリューション

SQL実行タイムアウト例外の操作完了前にタイムアウト時間が経過したか、サーバーが応答しない、インターネットでググってみると、The timeout period elapsed prior to completion of the operation or server is not responding:

server.scīptTimeoutのことです。

2. Connection オブジェクトの CommandTimeOut プロパティ。

3. Command オブジェクトの CommandTimeOut プロパティ。

4. IEブラウザの設定です。

Server.scīptTimeout、デフォルト値は90秒です。

増やすには、aspファイルに以下のような文章を追加してください。

Server.scīptTimeout=999です。

ページのタイムアウトを999秒に設定します。

最初はServer.scīptTimeoutだけを設定しました。

しかし、いくら大きな値を設定しても、タイムアウトエラーが発生します。

コミュニティでcommandTimeoutプロパティに言及した投稿を見かけました。

そこで、Option Packのドキュメントを確認したところ、他にもタイムアウトがあるようです。

ConnectionオブジェクトとCommandオブジェクトの両方に、CommandTimeOutプロパティがあります。

接続タイムアウトは、SqlConnection に対してのみ動作するように接続文字列で設定されています。

SqlCommand.CommandTimeout

コマンドの実行を終了し、エラーを発生させるまでの待ち時間を取得または設定します。

コマンドの実行を待つ時間(秒)を指定します。デフォルトは30秒です。

SqlConnection.ConnectionTimeout

接続を確立しようとする試みを終了し、エラーを発生させるまでの待ち時間を取得します。

接続が開かれるのを待つ時間(秒)。デフォルト値は15秒です。

SqlHelper これはあまり満足のいくものではありません。

最終的に SqlCommand.CommandTimeout プロパティを追加したところ、問題なく動作するようになりました。

/// <summary>ExecuteCommandTimeout</summary> 


private const int TIMEOUT = 999;
public static DataSet GetDataSetByStoredProc(string sqlStoredProcName, List<SqlParameter> parameters) 


        { 


            DataSet ds = new DataSet(); 


            try 


            { 


                Database db = DatabaseFactory.CreateDatabase(); 


                DbCommand dbCommand = null; 


                dbCommand = db.GetStoredProcCommand(sqlStoredProcName); 


                dbCommand.CommandTimeout = TIMEOUT; 


                if (parameters ! = null) 


                { 


                    Addparameter(db, dbCommand, parameters); 


                } 


                ds = db.ExecuteDataSet(dbCommand); 


                if (parameters ! = null) 


                { 


                    FillOutParameter(db, dbCommand, parameters); 


                } 


            } 


            catch (Exception) 


            { 


                throw; 


            } 


            return ds; 


        }

SqlHelperを使用する場合のこの問題の解決策は、SqlConnectionではなく、SqlCommandにタイムアウトを設定することです。

該当するコードは以下の通りです。

[c-sharp】(シーシャープ] 表示プレーン コピー 印刷 ?
  1. private static void PrepareCommand(SqlCommand cmd, SqlConnection conn,  
    SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[]  
    cmdParms, out bool mustCloseConnection)  
    { 
        if (conn.State ! = ConnectionState.Open) 
        { 
            mustCloseConnection = true; 
            conn.Open(); 
        } 
        else 
        { 
            mustCloseConnection = false; 
        } 
        cmd.Connection = conn; 
        cmd.CommandText = cmdText;  
        if (trans ! = null) 
            cmd.Transaction = trans; 
        cmd.CommandType = cmdType;  
        cmd.CommandTimeout = 240; 
        if (cmdParms ! = null)  
        { 
            foreach (SqlParameter parm in cmdParms) 
                cmd.Parameters.Add(parm); 
        } 
        return; 
    } 
    
    

関連リンク

http://bytes.com/topic/asp-net/answers/331693-sqlclient-sqlexception-timeout-expired

http://blog.csdn.net/long2006sky/archive/2007/07/09/1683459.aspx