1

我正在使用 mssql odbc C++ 代码:

Session session("ODBC", connectionString);

Statement select(session);  

select << sql;  
select.execute();    
Poco::Data::RecordSet rs(select);   
bool more = rs.moveFirst();    
std::size_t cols = rs.columnCount();    
std::stringstream ss;
ss << "<table>";
while (more)
{
    ss << "<row>";
    for (std::size_t col = 0; col < cols; ++col)
    {
        std::string cn = rs.columnName (col);
        ss << "<" << cn << ">";
        ss << rs[col].convert<std::string>();
        ss << "</" << cn << ">";
    }
    ss << "</row>";
    more = rs.moveNext();
}
ss << "</table>";

一切正常,但如果我尝试 sql 循环,例如:

DECLARE @database_name sysname ;
SET @database_name = NULL; 
WHILE @database_name IS NOT NULL 
BEGIN
SET @database_name = NULL; 
END;
SELECT '0'

然后我有错误: bool more = rs.moveFirst();
断言违规:文件“C:\External\poco\include\Poco/Data/RecordSet.h”中的extractions().size(),第241行,sql中没有while循环所有工作,MSSQL服务器管理工​​作室所有工作,和在 ODBC 查询工具中它没有问题,但它不适用于 poco。有什么建议么 ?

4

1 回答 1

0

您正在执行一个匿名代码块;如果你必须这样做,你必须把它变成一个命名的存储过程。

有关如何为 SQL Server ODBC 执行此操作的示例,请参阅ODBCSQLServerTest::testCursorStoredProcedure() 。

注意:您将需要高于 1.5.0 的 POCO 版本。

于 2013-06-27T01:38:04.857 回答