署名付きのT-SQLストアドプロシージャがあります
CREATE PROCEDURE MyProc
@recordCount INT OUTPUT
@param1 INT
...
SQL Serverで直接実行すると、プロシージャは5秒未満で実行され、合計で約100行になるいくつかの結果セットが返されます。
ADO.NETSqlDataAdapter.Fill
メソッドを使用してこのプロシージャを呼び出してaを設定Dataset
するSqlTimeoutException
と、SqlCommand
3分後(指定されたタイムアウト間隔)にが発生します。
ストアドプロシージャを変更して、出力パラメータがなくなり、必要な出力値が最後の結果セットとして返されるようにすると、問題が解決し、すべてが期待どおり5秒未満で実行されます。
しかし、なぜ?
問題を本当に解決したかどうかを理解せずに、コードベースを調べて、このタイプの動作のすべてのインスタンスを変更したくありません。
もう1つの注意点は、これは1つの特定のサーバーでのみ明らかであり、私たちが実行している他の同様のデータベースよりも大きなデータセットを持っていることは確かです。確かにSQLServerの設定ではありませんか?
アップデート
フレームワークソースにステップインすると、問題はメタデータの取得にあるようです。オブジェクトのConsumeMetaData
メソッドはSqlDataReader
無期限にハングします。ただし、他のデータベースでテストを実行したため、再現できないため、このプロシージャがADO.NETを介して呼び出された場合のデータベース固有の問題です...すばらしい。
更新II
OleDbDataAdapter
SQLOLEDBまたはSQLNCLIプロバイダータイプでを使用するようにコードを変更しても、問題が引き続き発生することを確認しました。間違いなく接続と関係があります。