波索ODBC和SQL的同时循环(Poco ODBC and while SQL loop)

2019-10-18 07:00发布

我正与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更= rs.moveFirst();
断言违规:提取物()的大小()的文件。 “C:\外部\ POCO \ \包括波科/数据/ RecordSet.h”,行241没有while循环SQL所有工作,在MSSQL Server Management Studio中的所有工作,并在ODBC查询工具,它没有问题,但它不与POCO工作。 有什么建议么 ?

Answer 1:

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

见ODBCSQLServerTest :: testCursorStoredProcedure()关于如何做到这一点的SQL Server ODBC示例。

注意:您将需要一个POCO版本比1.5.0更高。



文章来源: Poco ODBC and while SQL loop