我需要在一个线程中同步运行 SQL 命令,并能够从另一个线程取消查询。
据我所知,我需要 ODBC 函数 SQLCancel 和连接对象的句柄来完成此任务。
然而,作为这个领域的新手,要弄清楚这一点感觉就像一场艰苦的战斗。
有人可以提供我在 Delphi 2006 中实现这一目标的示例代码吗?
设置说明:
线程 A
ODBC_Connection.Execute('SELECT a,b,c INTO ##MyTable FROM LongRunningQuery')
线程 B
[使用 SQLCancel 取消线程 A 中的 SQL 语句的一些神奇代码]
注意:我有一个当前的解决方案,我利用 ADOCommand 对象异步执行查询。这使得使用 Command 对象的 Cancel 方法成为可能。但这很慢,因为我有一个带有 Sleep 函数的 while 循环来轮询命令的状态以查看它何时完成。这就是为什么我想要一个基于同步执行的解决方案。我有数百个查询,所以性能很重要。
附加信息:我使用 SQL Server 作为后端,所以这是我正在寻找的主要解决方案。关于处理 Oracle 和其他数据库的建议当然也很有趣,但在我的情况下是次要的。