插入后 LAST_INSERT_ID 上的描述符索引无效

Invalid descriptor index on LAST_INSERT_ID after insert

我的 ODBC 代码(从 C 库调用)出现奇怪情况。基本上,我有以下事件序列:

  1. 创建插入语句(只是一个字符串)
  2. 调用SQL准备插入语句字符串
  3. 绑定各种参数(列值),使用 SQL绑定参数
  4. 调用 SQLExecute 插入行(顺便说一句,我可以这样做 查看 MySQL 数据库中的行)
  5. 创建"select last_insert_id()"语句字符串

    NOTE: if in SQL Server mode, we would create a "select @@identity" statement

  6. 使用 SQLBindCol 绑定列 - 这是我得到“无效 描述符索引”错误

    NOTE: if in SQL Server mode, this works fine, with no error

  7. 调用 SQLExecDirect 获取最后的插入 ID - 这永远不会发生 因为 SQLBindCol 错误

标准 MySQL ODBC 连接器在这种情况下是否需要特殊的东西?有没有人有这种 "insert" 然后 "get last insert id" 行为的 ODBC 示例?也许我需要在第 6 步(绑定列的位置)之前调用 "SQLPrepare"?另一种提问方式:每个 SQLExecute 或 SQLExecDirect 调用都应该有一个 SQLPrepare 调用吗?

我知道它直接在 SQL 中工作,所以问题出在我的 C ODBC 代码上。

谢谢。

对于那些感兴趣的人,我最终通过在创建 "select last_insert_id()"(步骤 5)和调用 SQLBindCol(步骤6).不确定这是否适用于其他人,但它似乎对我来说效果很好。

至于研究,我在网上到处找,从来没有找到真正好的或明确的答案。大多数评论是关于所涉及的 SQL,而不是 ODBC。而且对 ODBC 的引用含糊不清,据我所知似乎不适用于我的情况。

我的假设是我正在使用的 SqlServer ODBC 驱动程序处理丢失的准备语句的方式与我的 MySql ODBC 驱动程序不同(甚至可能更好,但这是值得商榷的)。

  • SQL 服务器 ODBC 驱动程序是由 Easysoft
  • 提供的
  • MySql ODBC 驱动程序是 MySql
  • 的标准 CentOS 安装提供的驱动程序

希望这对人们有所帮助。显然,如果大家有更好的想法,请告诉我们。