커서 행 집합 크기

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 드라이버가 클라이언트의 네트워크 버퍼에서 지속적으로 행을 끌어옵니다.

참고 항목

개념

커서 속성