C# 如何使用Devart终止在c中运行sql查询?

C# 如何使用Devart终止在c中运行sql查询?,c#,.net,winforms,oracle,devart,C#,.net,Winforms,Oracle,Devart,我想创建自己的sql工具,但在终止运行的查询方面有点问题。此工具将执行各种sql查询:选择、插入、更新等 我正在使用Devart和c,winforms应用程序。这是我的密码: try { dt = null; dt = new OracleDataTable(); dt.Connection = dp.sqlConnection; dt.SelectCommand =

我想创建自己的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();
它可以工作,但不是每个查询都可以。它适用于这样的查询:从temp_表中选择*,其中temp_表有1mln记录。。但是我不使用声明: select column from-此查询具有非常复杂的where部分,它只返回50条记录,但来自具有超过1mln条记录的表。我无法阻止


您能告诉我如何停止每个sql语句吗?在调用BeginFill方法的地方终止线程是一种好方法吗?

我会将代码放入一个线程中并终止线程,这对用户更友好,因为您的UI仍然负责,而且您可以比查询更轻松地终止线程,我相信。相关:,即alter system kill可能会有所帮助。我这样做。。我有负责任的用户界面。但我不想杀人,我想停止执行或读取。。。