以下のコードで CommandTimeout を機能させることができないようです。動作を確認するためだけにタイムアウト値を 1 秒に設定しましたが、無視されているようです。SELECT ステートメントの実行には約 15 秒かかり、完了するまで実行されます。1 秒後にタイムアウト例外が発生することを期待しています。これを行う方法の例を見つけるためにインターネットを検索しましたが、何も見つかりませんでした。私は何を間違っていますか?
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SqlClient");
DataSet dataSet = new DataSet();
DbCommand command = factory.CreateCommand();
command.Connection = factory.CreateConnection();
command.Connection.ConnectionString = "Server=localhost;Database=MyDatabase;User Id=;Password=****";
command.CommandType = CommandType.Text;
command.CommandText = "SELECT * FROM table";
command.CommandTimeout = 1;
using (DbDataAdapter adapter = factory.CreateDataAdapter())
{
adapter.SelectCommand = command;
adapter.Fill(dataSet);
}
更新:
実行に 30 秒以上かかる SELECT コマンドを作成しました。これもタイムアウトしません。CommandTimeout 行もコメントアウトしましたが、それでも完了まで実行されました。そのため、デフォルトの CommandTimeout である 30 秒も無視されているようです。私は困惑しています...どんな助けでも大歓迎です。
更新:
私はそれを理解したかもしれないと思います。非常に複雑な SELECT ステートメントを記述したときに、コマンド タイムアウト例外が発生したようです。単純な SELECT コマンドを使用すると、コマンドの実行に 1 秒もかからず、データ セットのロードにさらに 15 秒かかるということで何が起こっているのかを推測することしかできません。私はここで正しい軌道に乗っていますか?これはありそうですか?