Windows Form App show query execution/retrieve OBDC DB2 连接时间
Windows Form App show query execution/retrieve time for a OBDC DB2 connection
我需要进度条或状态消息来显示执行查询时间。现在我的应用程序只冻结了,我无法显示已经过去了多少时间以及查询执行的位置(执行与检索)
我没有找到太多关于这个的东西,我不知道是否可以,因为它冻结了,有没有办法取消查询??
谢谢!
要在执行 long-运行 查询时有一个未冻结的应用程序,您需要在单独的线程上执行它。尝试使用 BackgroundWorker
。它有 ReportProgress
可供您使用。有 2 种情况:
1 - 您有一个查询批量修改了一些 table,但它在数据库服务器上运行了很长时间。在这种情况下,您可以(这里也有多种情况)如果可能的话,将批处理日志写入一些 table。您可以创建临时触发器和临时 table 查询目标 table。触发器将在处理记录时更新 temp table。在您的后台工作人员中编写一个 SQL 查询来查询临时 table 并查看记录了多少行。这样做直到作业标记为 "DONE"(在相同的温度 table)
2 - 在这种情况下,跟踪进度很容易,因为在这里您在代码中一次完成所有 SQL 一行。所以你知道你有多少更新,并且可以准确地告诉,例如 "processing 5 of 1000"。在你的后台工作人员中,你将在 DoWork
中完成这项工作,并且在每个数据库调用中你将调用 ReportProgress
.
如何实现BackgroundWorker
你可以在网上找到1000个例子。对于场景 #2,差不多就是这样。对于场景#1,这取决于你做什么。可能有 10 种不同的方法来实现它。但主要逻辑仍然存在 - 一个单独的线程正在跟踪抛出某些设备的进度(在本例中 table)。
我需要进度条或状态消息来显示执行查询时间。现在我的应用程序只冻结了,我无法显示已经过去了多少时间以及查询执行的位置(执行与检索)
我没有找到太多关于这个的东西,我不知道是否可以,因为它冻结了,有没有办法取消查询??
谢谢!
要在执行 long-运行 查询时有一个未冻结的应用程序,您需要在单独的线程上执行它。尝试使用 BackgroundWorker
。它有 ReportProgress
可供您使用。有 2 种情况:
1 - 您有一个查询批量修改了一些 table,但它在数据库服务器上运行了很长时间。在这种情况下,您可以(这里也有多种情况)如果可能的话,将批处理日志写入一些 table。您可以创建临时触发器和临时 table 查询目标 table。触发器将在处理记录时更新 temp table。在您的后台工作人员中编写一个 SQL 查询来查询临时 table 并查看记录了多少行。这样做直到作业标记为 "DONE"(在相同的温度 table)
2 - 在这种情况下,跟踪进度很容易,因为在这里您在代码中一次完成所有 SQL 一行。所以你知道你有多少更新,并且可以准确地告诉,例如 "processing 5 of 1000"。在你的后台工作人员中,你将在 DoWork
中完成这项工作,并且在每个数据库调用中你将调用 ReportProgress
.
如何实现BackgroundWorker
你可以在网上找到1000个例子。对于场景 #2,差不多就是这样。对于场景#1,这取决于你做什么。可能有 10 种不同的方法来实现它。但主要逻辑仍然存在 - 一个单独的线程正在跟踪抛出某些设备的进度(在本例中 table)。