VSTS 2008 + ADO.Net + C#+ .Net 3.5 + SQL Server 2008を使用しています。クライアント側でADO.Netを使用してデータベースサーバーに接続し、ストアプロシージャを実行してから、ストアプロシージャから結果を返します。
これが私のコードです。タイムアウトについて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);
}
}
既に述べたように、タイムアウトには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;
}
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秒試行します。
サーバーが有効であり、サーバーに接続できる場合、およびデータベース名またはログイン資格情報が無効な場合、このタイムアウトは適用されません。無効な資格情報またはデータベースについてはすぐに例外がスローされます