独自の SQL ツールを作成したいのですが、実行中のクエリを終了するのに少し問題があります。このツールは、あらゆる種類の SQL クエリを実行します: 選択、挿入、更新など...
私はC#、winformsアプリケーションでDevartを使用しています。これが私のコードです:
try
{
dt = null;
dt = new OracleDataTable();
dt.Connection = dp.sqlConnection;
dt.SelectCommand = dp.sqlConnection.CreateCommand();
dt.SelectCommand.CommandText = tbQuery.Text;
IAsyncResult aRes = dt.BeginFill(null, null);
SetStatus("In progress...");
while (!aRes.IsCompleted)
{
}
if (!cancel)
{
dt.EndFill(aRes);
SetDgv(dt);
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
このコードは別のスレッドで実行されています。したがって、キャンセルボタンを押すと、次のようになります。
cancel = true;
dt.CancelFetch();
機能しますが、すべてのクエリでは機能しません。それは次のようなクエリで機能します: select * from temp_table, where temp_table has 1mln records.. But.. ステートメントでは動作しません: select column from - このクエリには非常に複雑な "where" 部分があり、50 レコードしか返されません。ただし、1mln を超えるレコードを持つテーブルから。私はそれを止めることはできません..
すべての SQL ステートメントを停止する方法を教えてください。BeginFill メソッドが呼び出されたスレッドを強制終了するのは良い方法ですか?