2013-06-26 1 views
1

난 경우 MSSQL ODBC를 C++ 코드를 일하고 있어요 동안 :마시고 ODBC와 SQL은 루프

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();
어설 션 위반 : extractions().() 파일 "C : \ External \ poco \ include \ Poco/Data/RecordSet.h"의 라인 241 while 루프없이 SQL에서 모든 작업, MSSQL 서버 관리 스튜디오에서 all ODBC 쿼리 도구에서는 문제가되지 않지만 poco에서는 작동하지 않습니다. 제안 사항이 있으십니까?

답변

0

코드의 익명 블록을 실행하고 있습니다. 그런 식으로해야한다면 명명 된 저장 프로 시저로 변환해야합니다.

SQL Server ODBC에 대해 수행하는 방법에 대한 예제는 ODBCSQLServerTest::testCursorStoredProcedure() 을 참조하십시오.

참고 : 1.5.0보다 큰 POCO 버전이 필요합니다.