1

我正在处理一些使用 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 提供程序)中肯定发生了一些变化。有没有人知道新的供应商可能发生了什么变化导致这种情况(以及我可以做些什么来解决错误)?

4

0 回答 0