我想创建自己的 sql 工具,但在终止正在运行的查询时遇到了一点问题。该工具将执行各种 sql 查询:选择、插入、更新等...
我将 Devart 与 c#、winforms 应用程序一起使用。这是我的代码:
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,其中 temp_table 有 100 万条记录。但是..我不使用语句:select column from - 这个查询有非常复杂的“where”部分,它只返回 50 条记录,但来自拥有超过 100 万条记录的表。我无法阻止那个..
你能告诉我如何停止每一个 sql 语句吗?这是杀死调用 BeginFill 方法的线程的好方法吗?