SQL Server 기본 결과 집합 사용
기본 ODBC 커서 특성은 다음과 같습니다.
SQLSetStmtAttr(hstmt, SQL_ATTR_CURSOR_TYPE, SQL_CURSOR_FORWARD_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_CONCURRENCY, SQL_CONCUR_READ_ONLY, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ROW_ARRAY_SIZE, 1, SQL_IS_INTEGER);
이러한 특성이 기본값으로 설정되는 경우 SQL Server Native Client ODBC 드라이버는 항상 SQL Server 기본 결과 집합을 사용합니다. 기본 결과 집합은 SQL Server가 지원하는 모든 SQL 문에서 사용할 수 있으며 클라이언트에 전체 결과 집합을 전송하는 가장 효율적인 방법입니다.
SQL Server 2005부터 MARS(Multiple Active Result Sets)가 지원됩니다. 이제 응용 프로그램에서 연결당 둘 이상의 활성 기본 결과 집합을 사용할 수 있습니다. MARS 기능은 기본적으로 해제됩니다.
SQL Server 2005 이전에는 기본 결과 집합이 동일한 연결에서 다중 활성 문을 지원하지 않았습니다. 따라서 연결에서 SQL 문을 실행한 후 결과 집합의 모든 행이 처리될 때까지 서버가 클라이언트에서 나머지 결과 집합을 취소하는 요청을 제외한 다른 명령을 받지 않았습니다. 부분적으로 처리된 결과 집합의 나머지 처리를 취소하려면 fOption 매개 변수를 SQL_CLOSE로 설정하여 SQLCloseCursor 또는 SQLFreeStmt를 호출합니다. 부분적으로 처리된 결과 집합을 마치고 다른 결과 집합이 있는지 테스트하려면 SQLMoreResults를 호출합니다. 기본 결과 집합의 처리가 완료되기 전에 ODBC 응용 프로그램에서 연결 핸들에 있는 명령을 처리하려고 하면 다음과 같이 호출에서 SQL_ERROR가 생성되고 SQLGetDiagRec에 대한 호출이 반환됩니다.
szSqlState: "HY000", pfNativeError: 0
szErrorMsg: "[Microsoft][SQL Server Native Client]
Connection is busy with results for another hstmt."