1

私はMSSQLサーバーからデータを読み取るチームプロジェクトに取り組んでいます。非同期呼び出しを使用してデータをフェッチしています。

SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
SqlCommand cmdData = new SqlCommand("get_report", conn);
cmdData.CommandType = CommandType.StoredProcedure;

conn.Open();
IAsyncResult asyResult = cmdData.BeginExecuteReader();

try
{
    SqlDataReader drResult = cmdData.EndExecuteReader(asyResult);
    table.Load(drResult);
}
catch (SqlException ex)
{
    throw;
}

プロジェクト自体は、ゲートチェックインを備えたTFSソース管理を使用しており、両方のコンピューターがまったく同じバージョンのプロジェクトを実行していることを確認しました。また、同じユーザーログインを使用し、まったく同じパラメーター(簡潔にするためにリストされていません)を使用してストアドプロシージャを実行しています。

ストアドプロシージャ自体は、SQL ServerManagementStudioで42000行を返すのに1:54かかります。Windows 7 x86で実行している場合、.NETコードの実行にはSSMSの場合とほぼ同じ時間がかかり、上記のコードスニペットは完全に実行されます。ただし、Windows 7 x64を実行しているコンピューターでは、上記のコードEndExecuteReaderで0:40マークの行でエラーが発生します。返されるエラーは「無効な操作です。接続が閉じられました。」です。

追加cmdData.CommandTimeout = 600すると実行を続行できますが、データが返されるまでに4分以上かかり、何が起こっているのかを説明するのに迷っています。

私たちが検討したいくつかのこと:私のコンピューターには.NET 4.5 Frameworkがインストールされており、32ビットアセンブリに対して64ビットOSを実行しており、TFSサーバーに同期されていないローカルプロジェクトファイルに情報を格納している可能性があります。しかし、実際に時間の不一致を引き起こしている可能性があるものを正確に把握することはできないようです。

なぜこの格差が存在するのかについて誰かが何か考えを持っているか、問題を切り分けるためにどこを見ればよいかについての提案を私に与えることができますか?

4

1 に答える 1

0

1回のコマンド実行でEndExecuteReaderが複数回呼び出された場合、またはメソッドがその実行メソッドと一致しなかった場合、無効な操作エラーが発生します。

于 2012-05-16T14:50:44.560 に答える