あるデータベースから別のデータベースにデータを移動するコンソールアプリケーションがあります。アプリケーションはデータを読み取り、更新して別のデータベースに書き込みます。クエリは非常に簡単で、エラーが発生した場合に記録されます。だから私は別々にそれぞれを実行しようとすることができ、それは50ミリ秒以上かかることはありません(プロファイラが私に言った)。しかし、私はたくさんの行を持っていて、それらのうちのいくつかを実行した後(実行された行の数が1000〜10000と非常に異なる)、タイムアウトになります。タイムアウトが切れています。操作が完了する前にタイムアウト時間が経過したか、サーバーが応答していません。 "SELECT"クエリ中でもTimeOutを取得できます。複数の単純なクエリ中に「タイムアウト」と「Aトランスポートレベルエラー」例外が発生する
CommandTimoutを120に設定しました。サーバーから結果を受け取ったときにトランスポートレベルのエラーが発生しました。 (プロバイダー:セッションプロバイダー、エラー:19 - 物理的な接続は使用できません)だから、タイムアウトのケースではないと思います。
プロファイラとトレースに予期しないものがありませんでした。
私はを使用しました。SqlConnection.ClearPool(cnnct);でも動作しません。
お願いします。
SQL Vertion:マイクロソフトのSQL Server 2008 R2(SP1)
ここでは、送信元と宛先DBSのためのコードです。
public IEnumerable<SomeType> GetEntities()
{
IEnumerable<SomeType> result = null;
var selectQuery = GetSelectQuery();
try
{
using (var cnnct = new SqlConnection(_connectionString))
{
cnnct.Open();
var cmd = new SqlCommand(selectQuery, cnnct);
var reader = cmd.ExecuteReader();
result = Convert(reader);
reader.Close();
cmd.Dispose();
}
}
catch (Exception e)
{
Catch(selectQuery, e);
}
return result;
}
public Int32 Save(SomeType entity)
{
Int32 result = 0;
var insertQuery = GetInsertQuery(entity);
try
{
using (var cnnct = new SqlConnection(_connectionString))
{
cnnct.Open();
var cmd = new SqlCommand(insertQuery, cnnct);
result = (Int32)(Decimal)cmd.ExecuteScalar();
cmd.Dispose();
}
}
catch (Exception e)
{
Catch(insertQuery, e);
}
return result;
}
あなたはそれが実際に終了したかどうかを確認するために0(無制限)にタイムアウトを設定しようとしたことがありますか? – Tanner
@Tanner私はデフォルトの30を120に置き換えて、もう1つ例外があります(最初の記事で説明しました)。私は無制限が120以上であることに同意しますが、いずれにしても120秒を選んだときにタイムアウトに何の問題もありません。私は本当の理由を見つける必要があります。ありがとう。 – Bikutotoro
@Tanner Zeroは役に立たなかった。しかし、どんな場合でもありがとう。 – Bikutotoro