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

时间:2015-01-26 01:54:47

标签: mysql c odbc

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

  1. 创建插入语句(只是一个字符串)
  2. 使用该插入语句字符串
  3. 调用SQLPrepare
  4. 使用,绑定各种参数(列值) 的SQLBindParameter
  5. 调用SQLExecute插入行(顺便说一下,这样可行 看到MySQL DB中的行)
  6. 创建"选择last_insert_id()"语句字符串

      

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

  7. 使用SQLBindCol绑定列 - 这是我得到"无效的地方 描述符索引"错误

      

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

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

  9. 标准的MySQL ODBC连接器在这种情况下是否需要特殊的东西?有没有人有这种类型的"插入"的ODBC示例?然后"得到最后一个插入ID"行为?也许我需要打电话给#34; SQLPrepare"在第6步之前(我绑定列)?问这个的另一种方法:是否应该为每个SQLExecute或SQLExecDirect调用进行SQLPrepare调用?

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

    感谢。

1 个答案:

答案 0 :(得分:0)

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

至于研究,我在网上看了整个地方,从来没有找到一个非常好或明确的答案。大多数评论都涉及SQL,而不是ODBC。对ODBC的引用含糊不清,似乎并不适用于我所能看到的情况。

我的假设是我使用的SqlServer ODBC驱动程序以不同的方式处理缺少的prepare语句(可能更好,但这是有争议的)比我的MySql ODBC驱动程序。

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

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