커서 행 집합 크기
ODBC 커서는 한 번에 한 행씩만 인출하도록 제한되지 않습니다. SQLFetch 또는 SQLFetchScroll을 호출할 때마다 여러 행을 검색할 수 있습니다. Microsoft SQL Server와 같은 클라이언트/서버 데이터베이스 작업을 할 때는 한 번에 여러 행을 인출하는 것이 효율적입니다. 인출 시 반환되는 행 수를 행 집합 크기라고 하며 SQLSetStmtAttr의 SQL_ATTR_ROW_ARRAY_SIZE를 사용하여 지정됩니다.
SQLUINTEGER uwRowsize;
SQLSetStmtAttr(m_hstmt, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER)uwRowsetSize, SQL_IS_UINTEGER);
행 집합 크기가 1보다 큰 커서를 블록 커서라고 합니다.
블록 커서를 위해 결과 집합 열을 바인딩하는 다음 두 가지 옵션이 있습니다.
열 단위 바인딩
각 열이 변수 배열에 바인딩됩니다. 각 배열의 요소 수는 행 집합 크기와 같습니다.
행 단위 바인딩
행의 모든 열에 대한 데이터와 표시기가 포함된 구조를 사용하여 배열이 작성됩니다. 배열의 구조 수는 행 집합 크기와 같습니다.
열 단위 또는 행 단위 바인딩을 사용하면 SQLFetch 또는 SQLFetchScroll을 호출할 때마다 바인딩된 배열이 검색된 행 집합의 데이터로 채워집니다.
SQLGetData를 사용하여 블록 커서에서 열 데이터를 검색할 수도 있습니다. SQLGetData는 한 번에 한 행씩 작업하므로 SQLGetData를 호출하기 전에 SQLSetPos를 호출하여 행 집합의 특정 행을 현재 행으로 설정해야 합니다.
SQL Server Native Client ODBC 드라이버는 행 집합을 사용하여 전체 결과 집합을 신속하게 검색하는 최적화 기능을 제공합니다. 이 최적화를 사용하려면 SQLExecDirect 또는 SQLExecute를 호출할 때 커서 특성을 기본값(정방향 전용, 읽기 전용, 행 집합 크기 = 1)으로 설정합니다. SQL Server Native Client ODBC 드라이버에서 기본 결과 집합을 설정합니다. 스크롤 없이 결과를 클라이언트로 전송하는 경우 이 방법이 서버 커서보다 더 효율적입니다. 문이 실행된 후 행 집합 크기를 늘리고 열 단위 또는 행 단위 바인딩을 사용합니다. 이렇게 하면 SQL Server에서 기본 결과 집합을 사용하여 효율적으로 결과 행을 클라이언트로 보내는 동시에 SQL Server Native Client ODBC 드라이버가 클라이언트의 네트워크 버퍼에서 지속적으로 행을 끌어옵니다.