web-dev-qa-db-ja.com

SQL Serverのタイムアウト設定

VSTS 2008 + ADO.Net + C#+ .Net 3.5 + SQL Server 2008を使用しています。クライアント側でADO.Netを使用してデータベースサーバーに接続し、ストアプロシージャを実行してから、ストアプロシージャから結果を返します。

これが私のコードです。タイムアウトについて2つの問題があります。

  1. データベースサーバーへの接続について、タイムアウト関連の設定を明示的に設定しない場合、タイムアウト設定はありますか(たとえば、デフォルトの期間データベースサーバーに接続できない場合、タイムアウト例外が発生しますか?)

  2. ストアプロシージャの実行のためにタイムアウト関連の設定を明示的に設定しない場合、タイムアウト設定はありますか(たとえば、デフォルトの時間内にサーバーからADO.Netクライアントに結果を取得できない場合、タイムアウトが発生します)例外?)?

        using (SqlConnection currentConnection = new SqlConnection("Data Source=.;Initial Catalog=TestDB;Trusted_Connection=true;Asynchronous Processing=true"))
        {
            // check current batch conut
            currentConnection.Open();
            using (SqlCommand RetrieveOrderCommand = new SqlCommand())
            {
                RetrieveOrderCommand.Connection = currentConnection;
                RetrieveOrderCommand.CommandType = CommandType.StoredProcedure;
                RetrieveOrderCommand.CommandText = "prc_GetOrders";
                RetrieveBatchCountCommand.Parameters.Add("@Count", SqlDbType.Int).Direction = ParameterDirection.Output;
                RetrieveBatchCountCommand.ExecuteNonQuery();
                int rowCount = Convert.ToInt32(RetrieveOrderCommand.Parameters["@Count"].Value);
            }
        }
    
24
George2

既に述べたように、タイムアウトには2つのタイプがあります。

1)接続タイムアウト:これは接続文字列によって制御されます:

Data Source=.;Initial Catalog=TestDB;
   Trusted_Connection=true;Asynchronous Processing=true

この文字列にConnect Timeout=120を追加すると、接続は120秒間開かれてから切断されます。

Data Source=.;Initial Catalog=TestDB;
   Trusted_Connection=true;Asynchronous Processing=true;
   Connect Timeout=120;

2)コマンドタイムアウト:コマンドごとにタイムアウトを指定することもできます。ADO.NETはクエリをキャンセルする前にその時間だけ待機します。 SqlCommandオブジェクトで次のことを指定します。

    using (SqlCommand RetrieveOrderCommand = new SqlCommand())
    {
       RetrieveOrderCommand.CommandTimeout = 150;
    }
43
marc_s

はい、2種類のタイムアウトを設定できます

  1. 接続タイムアウト
  2. コマンドタイムアウト

VBA、.netなどでは両方ともデフォルトで30秒になります

13
gbn

sqlconnectionクラスには、ConnectionTimeoutという名前のプロパティがあります。

これは読み取り専用であるため、目的の接続タイムアウト値を設定するために直接使用することはできません。つまり、このプロパティには「get」のみが実装され、「set」は実装されません。したがって、接続文字列自体でキーワード「Connection Timeout」目的の値。

exi:

Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=SSPI;Connection Timeout=30";(30 means 30 seconds)

30秒は、サーバーへの接続を確立するために与えられる最大時間です(172.160.0.2 OR ADMINISTRATOR\\SQLEXPRESS)。serverへの接続をすぐに確立できなかった場合、最大30秒試行します。

サーバーが有効であり、サーバーに接続できる場合、およびデータベース名またはログイン資格情報が無効な場合、このタイムアウトは適用されません。無効な資格情報またはデータベースについてはすぐに例外がスローされます

0
user3775101