행 가져오기
적용 대상: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)
IRowset 인터페이스는 기본 행 집합 인터페이스입니다. IRowset 인터페이스는 행을 순차적으로 가져오고, 해당 행에서 데이터를 가져오고, 행을 관리하는 메서드를 제공합니다. 소비자는 모든 기본 행 집합 작업에 IRowset의 메서드를 사용합니다. 여기에는 행 가져오기 및 해제 및 열 값 가져오기가 포함됩니다.
소비자가 행 집합에 인터페이스 포인터를 가져온 경우 첫 번째 단계로 IRowsetInfo::GetProperties 메서드를 사용하여 행 집합의 기능을 확인하는 것이 일반적입니다. 이렇게 하면 행 집합에 의해 노출되는 인터페이스에 대한 정보와 활성 행의 최대 수 및 보류 중인 업데이트가 동시에 있을 수 있는 행 수와 같이 고유한 인터페이스로 표시되지 않는 행 집합의 기능도 반환됩니다.
소비자를 위한 다음 단계는 행 집합에 있는 열의 특성 또는 메타데이터를 확인하는 것입니다. 이를 위해 간단한 열 정보에는 IColumnsInfo 메서드를 사용하고 확장 열 정보에는 IColumnsRowset 메서드를 사용합니다. GetColumnInfo 메서드는 다음 정보를 반환합니다.
결과 집합의 열 수입니다.
DBCOLUMNINFO 구조체의 배열로, 열당 하나씩.
구조체의 순서는 열이 행 집합에 표시되는 순서입니다. 각 DBCOLUMNINFO 구조에는 열 이름, 열 서수, 열에서 가능한 최대 값 길이, 열의 데이터 형식, 전체 자릿수 및 길이와 같은 열 메타데이터가 포함됩니다.
단일 할당 블록 내의 모든 문자열 값에 대한 스토리지에 대한 포인터입니다.
소비자는 메타데이터에서 또는 행 집합을 생성한 텍스트 명령에 따라 필요한 열을 결정합니다. IColumnsInfo에서 반환된 열 정보의 순서 또는 IColumnsRowset에서 반환된 열 메타데이터 행 집합의 서수에서 필요한 열의 서수로 결정합니다.
IColumnsInfo 및 IColumnsRowset 인터페이스는 행 집합의 열에 대한 정보를 추출하는 데 사용됩니다. IColumnsInfo 인터페이스는 제한된 정보 집합을 반환하지만 IColumnsRowset은 모든 메타데이터를 제공합니다.
참고 항목
SQL Server 버전 7.0 이하에서 IColumnsInfo::GetColumnsInfo에서 반환된 선택적 메타데이터 열 DBCOLUMN_COMPUTEMODE 기본 열이 계산되는지 여부를 확인할 수 없으므로 열이 계산되는지 여부를 설명하는 값 대신 DBSTATUS_S_ISNULL 반환합니다.
서수는 열에 대한 바인딩을 지정하는 데 사용됩니다. 바인딩은 소비자 구조의 요소를 열과 연결하는 구조체입니다. 바인딩은 열의 데이터 값, 길이 및 상태 값을 바인딩할 수 있습니다.
바인딩 집합은 하나의 접근자로 수집되며, IAccessor::CreateAccessor 메서드를 사용하여 만들어집니다. 접근자가 여러 개의 바인딩을 포함할 수 있으므로 여러 열에 대한 데이터를 단일 호출로 검색하거나 설정할 수 있습니다. 소비자는 애플리케이션의 여러 부분에서 다양한 사용 패턴과 일치하도록 여러 접근자를 만들 수 있습니다. 행 집합이 존재하는 동안 접근자를 만들고 해제할 수 있습니다.
데이터베이스에서 행을 인출하기 위해 소비자는 IRowset::GetNextRows 또는 IRowsetLocate::GetRowsAt과 같은 메서드를 호출합니다. 이러한 인출 작업은 서버의 행 데이터를 공급자의 행 버퍼에 넣습니다. 소비자는 공급자의 행 버퍼에 직접 액세스할 수 없습니다. 소비자는 IRowset::GetData를 사용하여 공급자의 버퍼에서 소비자 버퍼로 데이터를 복사하고 IRowsetChange::SetData를 사용하여 소비자 버퍼에서 공급자 버퍼로 데이터 변경 내용을 복사합니다.
소비자는 GetData 메서드를 호출하고 핸들을 행, 핸들을 접근자에 전달하고 소비자가 할당한 버퍼에 대한 포인터를 전달합니다. GetData는 데이터를 변환하고 접근자를 만드는 데 사용된 바인딩에서 지정된 열을 반환합니다. 소비자는 여러 접근자와 버퍼를 사용하여 행에 대해 GetData를 두 번 이상 호출할 수 있으므로 소비자는 동일한 데이터의 여러 복사본을 가져올 수 있습니다.
가변 길이 열의 데이터는 여러 가지 방법으로 처리할 수 있습니다. 첫째, 이러한 열을 소비자 구조의 한정된 섹션에 바인딩할 수 있습니다. 이 경우 데이터 길이가 버퍼 길이를 초과하면 잘림이 발생합니다. 소비자는 상태 DBSTATUS_S_TRUNCATED 확인하여 잘림이 발생했음을 확인할 수 있습니다. 반환된 길이는 항상 실제 길이(바이트)이므로 소비자는 잘린 데이터의 양을 확인할 수도 있습니다.
소비자가 행 가져오기 또는 업데이트를 마치면 ReleaseRows 메서드를 사용하여 해제합니다 . 이렇게 하면 행 집합에 있는 행의 복사본에서 리소스가 해제되고 새 행을 위한 공간이 만들어집니다. 그런 다음 소비자는 행을 가져오거나 만들고 행의 데이터에 액세스하는 주기를 반복할 수 있습니다.
소비자가 행 집합을 완료하면 IAccessor::ReleaseAccessor 메서드를 호출 하여 접근자를 해제합니다. 행 집합에서 노출하는 모든 인터페이스에서 IUnknown::Release 메서드를 호출하여 행 집합을 해제합니다. 행 집합이 해제되면 소비자가 보유할 수 있는 나머지 행 또는 접근자가 강제로 해제됩니다.