从SQLOLEDB切换到SQLNCLI或MSOLEDBSQL提供程序后绑定期间出现错误80040e21和DBBINDSTATUS_BADBINDINFO

时间:2018-05-01 18:48:05

标签: c++ sql-server oledb sql-server-native-client sqloledb

我正在处理一些使用OLE DB连接到SQL Server数据库的旧C ++代码。我需要从旧的SQLOLEDB提供程序转移到更现代的提供程序(SQLNCLI,SQLNCLI10,SQLNCLI11或MSOLEDBSQL)。通常,只需更改提供程序就可以实现这一点,但是当我切换到任何较新的提供程序时,我遇到了80040e21错误("多步OLE DB操作生成错误")与所有四个列出的提供商完全相同的错误)。在为所有列添加绑定条目后调用Bind时,这很愉快。稍微挖掘一下,当Bind调用IAccessor :: CreateAccessor时,似乎会抛出错误,其中一列返回错误的绑定状态(DBBINDSTATUS_BADBINDINFO)。有问题的列是VARCHAR(15),我的测试表中的另一列(INTEGER)没有显示错误的绑定状态。该列的DB类型为DBTYPE_STR,缓冲区为其分配了24个字节(数据为16,长度为4,状态为4)。

我发现的与DBBINDSTATUS_BADBINDINFO相关的唯一文档位于https://msdn.microsoft.com/en-us/library/ms720969.aspx,并且在那里讨论的任何可能原因似乎都不适用于我的情况。当我将提供程序切换回SQLOLEDB时,一切正常(使用完全相同的表和参数),因此必须在SQLNCLI提供程序(以及新的MSOLEDBSQL提供程序)中更改某些内容。有没有人对新的提供商中可能发生的变化有什么想法(以及我可以做些什么来解决错误)?

0 个答案:

没有答案