c++ 如何使两条语句的 sql 与 OLEDB 一起工作?

标签 c++ sql-server oledb

我有以下 SQL 语句:

USE "ws_results_db_2011_09_11_09_06_24";SELECT table_name FROM INFORMATION_SCHEMA.Tables WHERE table_name like 'NET_%_STAT' order by table_name

我正在使用以下 C++ 代码来执行它:

IDBCreateCommandPtr spDBCreateCommand = GetTheDBCreateCommandPointer();
ICommandTextPtr spCommandText;
spDBCreateCommand->CreateCommand(NULL, IID_ICommandText, reinterpret_cast<IUnknown **>(&spCommandText));
spCommandText->SetCommandText(DBGUID_SQL, GetTheQueryText());
IRowsetPtr spRowset;
spCommandText->Execute(NULL, IID_IRowset, NULL, NULL, reinterpret_cast<IUnknown **>(&spRowset));
RowHandles hRows(spRowset, 0);
ULONG   rowCount;
ULONG maxRowCount = 1;
spRowset->GetNextRows(DB_NULL_HCHAPTER, 0, maxRowCount, &rowCount, hRows.get_addr());

两个注意事项:

  1. 为简洁起见省略了错误处理
  2. RowHandles 实现了 HROW *
  3. 的 RAII 概念

反正我这两条sql语句都执行失败了。 spCommandText->Execute 返回 S_OK,但将 spRowset 设置为 NULL

如果我第二次执行相同的 spCommandText->Execute(通过在调试 session 期间向后移动指令指针),则会返回一个有效的 IRowset 指针 -我使用它成功地获得了正确的列信息。但是 spRowset->GetNextRowsrowCount 设置为 0 并返回 DB_S_ENDOFROWSET - 运气不好。

当我执行单个 SQL 语句时,代码运行良好。

我做错了什么?

谢谢。

最佳答案

由客户端来拆分 sql 命令 - isql 在 ;即您要求使用和选择两个命令。
因此解决方法是通过单独的 CreateCommand 集执行这两个命令并执行。

另请注意,在这种情况下,您可以将命令作为一个 SQL 语句来执行

SELECT table_name FROM ws_results_db_2011_09_11_09_06_24.INFORMATION_SCHEMA.Tables 
  WHERE table_name like 'NET_%_STAT' 
  order by table_name

关于c++ 如何使两条语句的 sql 与 OLEDB 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8944096/

相关文章:

sql-server - EF 2.1 中的播种日期

php - 使用 LIKE 语句在 varchar 字段中搜索数字

sql-server - SQL Server 默认值不作为实体默认值出现

asp.net - 使用 asp.net 为 SalesLogix 使用 OleDb 连接时出错。没有可用的错误消息,结果代码 : E_FAIL(0x80004005)

c++ - 如何使用 operator new 创建动态二维字符数组?

c++ - 将子类返回到基类对象

c++ - 翻转 bool : performance comparison of x=! x 与 x^=1

c# - 在 c# 中读取 excel 文件时, 'microsoft.ace.oledb.12.0' 提供程序未在本地计算机上注册

c# - OleDB INSERT 命令错误

c++ - 在 visual studio 中使用 codeblocks 代码