【问题标题】:Invalid descriptor index on LAST_INSERT_ID after insert插入后 LAST_INSERT_ID 上的描述符索引无效
【发布时间】:2015-02-06 02:38:14
【问题描述】:

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

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

    注意:如果在 SQL Server 模式下,我们将创建一个“select @@identity” 声明

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

    注意:如果在 SQL Server 模式下,这可以正常工作,没有错误

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

在这种情况下,标准的 MySQL ODBC 连接器是否需要一些特殊的东西?有没有人有这种类型的“插入”然后“获取最后插入 id”行为的 ODBC 示例?也许我需要在第 6 步(绑定列的位置)之前调用“SQLPrepare”?另一种问这个问题的方法:每个 SQLExecute 或 SQLExecDirect 调用是否应该有一个 SQLPrepare 调用?

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

谢谢。

【问题讨论】:

    标签: mysql c odbc


    【解决方案1】:

    对于那些感兴趣的人,我最终通过在创建“select last_insert_id()”(第 5 步)和调用 SQLBindCol(第 6 步)之间添加一个 SQLPrepare 调用来更改上述步骤。不确定这对其他人是否有效,但对我来说似乎效果很好。

    至于研究,我在网上查遍了整个地方,但从未找到一个真正好的或明确的答案。大多数 cmets 是关于所涉及的 SQL,而不是 ODBC。从我所见,对 ODBC 的引用含糊不清,似乎不适用于我的情况。

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

    • SQL Server ODBC 驱动程序是Easysoft 提供的驱动程序
    • MySql ODBC 驱动程序是随 MySql 标准 CentOS 安装提供的驱动程序

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多