首页 > 解决方案 > 没有 1s 延迟的第二个 ODBC UPDATE 调用导致第一次不发生

问题描述

我在一个循环中调用了几个自定义 API 来更新 SQL 数据库中的表,我发现如果我立即执行第二个,第一个实际上并没有更改数据库。如果我在通话之间等待一秒钟,它就会起作用。

这两个调用最初仅在按下单个 UI 按钮后进行,因此这可能是第一次有人尝试如此快速地连续两次调用。我们有一个功能请求,但现在需要它。

硬编码的 sleep() 有助于跟踪问题,但考虑解决方案确实违背了原则。所以我想知道在 ODBC 中需要做什么来确保对表的先前操作已经完成,这样下一个操作就不会失败。但同样,我完全是 ODBC 菜鸟,所以我不熟悉它的 API 应该如何使用(当然,这段代码的作者在 6 个月前离开了公司)。

通过 API 代码层的跟踪,我发现

在哪里check()

if (code != SQL_SUCCESS && code != SQL_SUCCESS_WITH_INFO) {
    exception();
}

我在这里看到的主要问题是警告将被完全忽略。但是我的菜鸟读到的东西是,如果查询在调用结束时仍在运行,它应该进入异常(),类似于 HYT00(超时过期),对吧?

我能想到的唯一另一件事是另一个线程可能在同一连接上调用此 API,并使用其 SQLCancel() 取消操作。我会去三重检查,但我很确定这不会发生。

标签: odbc

解决方案


推荐阅读