0

我想创建自己的 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 方法的线程的好方法吗?

4

0 回答 0