행 인출Fetching Rows

적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database 예Azure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance 예Azure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics 예병렬 데이터 웨어하우스Parallel Data Warehouseyes병렬 데이터 웨어하우스Parallel Data Warehouse적용 대상:Applies to: 예SQL ServerSQL Server(지원되는 모든 버전)yesSQL ServerSQL Server (all supported versions) 예Azure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database 예Azure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance 예Azure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics 예병렬 데이터 웨어하우스Parallel Data Warehouseyes병렬 데이터 웨어하우스Parallel Data Warehouse

다운로드OLE DB 드라이버 다운로드DownloadDownload OLE DB Driver

IRowset 인터페이스는 기본 행 집합 인터페이스입니다.The IRowset interface is the base rowset interface. IRowset 인터페이스는 순차적으로 행을 인출하고, 해당 행에서 데이터를 가져오고, 행을 관리하기 위한 메서드를 제공합니다.The IRowset interface provides methods for fetching rows sequentially, getting the data from those rows, and managing rows. 소비자는 모든 기본 행 집합 작업에 IRowset 의 메서드를 사용합니다.Consumers use the methods in IRowset for all basic rowset operations. 여기에는 행 인출 및 해제, 열 값 가져오기 등이 포함됩니다.This includes fetching and releasing rows and getting column values.

소비자가 행 집합에 인터페이스 포인터를 가져온 경우 첫 번째 단계로 IRowsetInfo::GetProperties 메서드를 사용하여 행 집합의 기능을 확인하는 것이 일반적입니다.When a consumer obtains an interface pointer on a rowset, the first step is ordinarily to determine the capabilities of the rowset by using the IRowsetInfo::GetProperties method. 그러면 행 집합에서 노출하는 인터페이스에 대한 정보뿐 아니라 별도의 인터페이스로 표시되지 않는 행 집합의 기능(예: 최대 활성 행 수, 동시에 보류 중인 업데이트를 포함할 수 있는 행 수)도 반환됩니다.This returns information about the interfaces exposed by the rowset and also capabilities of the rowset that do not show up as distinct interfaces, such as the maximum number of active rows and the number of rows that can have pending updates at the same time.

다음 단계로 소비자는 행 집합에 있는 열의 특징, 즉 메타데이터를 확인합니다.The next step for consumers is to determine the characteristics, or metadata, of the columns in the rowset. 이러한 목적을 위해 소비자는 단순 열 정보의 경우 IColumnsInfo 메서드를 사용하고 확장 열 정보의 경우 IColumnsRowset 메서드를 사용합니다.For this they use the IColumnsInfo method for simple column information or the IColumnsRowset method for extended column information. GetColumnInfo 메서드는 다음과 같은 정보를 반환합니다.The GetColumnInfo method returns the following information:

  • 결과 집합 내의 열 수The number of columns in the result set.

  • 열당 하나씩, DBCOLUMNINFO 구조의 배열An array of DBCOLUMNINFO structures, one per column.

    구조의 순서는 열이 행 집합에 나타나는 순서입니다.The order of the structures is the order in which the columns appear in the rowset. 각 DBCOLUMNINFO 구조에는 열 이름, 열의 서수, 열에 있는 값의 가능한 최대 길이, 열의 데이터 형식, 전체 자릿수 및 길이와 같은 열 메타데이터가 포함됩니다.Each DBCOLUMNINFO structure includes column metadata, such as column name, ordinal of the column, maximum possible length of a value in the column, data type of the column, precision, and length.

  • 단일 할당 블록 내 모든 문자열 값의 스토리지에 대한 포인터The pointer to a storage for all string values within a single allocation block.

소비자는 메타데이터에서 또는 행 집합을 생성한 텍스트 명령을 기반으로 필요한 열을 확인합니다.The consumer determines which columns it needs either from the metadata or based on the text command that generated the rowset. IColumnsInfo 에서 반환된 열 정보의 순서나 IColumnsRowset 에서 반환된 열 메타데이터 행 집합의 서수에서 필요한 열의 서수를 확인합니다.It determines the ordinals of the needed columns from the ordering of the column information returned by IColumnsInfo or from the ordinals in the column metadata rowset returned by IColumnsRowset.

IColumnsInfoIColumnsRowset 인터페이스는 행 집합의 열에 대한 정보를 추출하는 데 사용됩니다.The IColumnsInfo and IColumnsRowset interfaces are used to extract information about the columns in the rowset. IColumnsInfo 인터페이스는 제한된 정보 집합을 반환하는 반면 IColumnsRowset 는 모든 메타데이터를 제공합니다.The IColumnsInfo interface returns a limited set of information, whereas IColumnsRowset provides all the metadata.

注意

SQL ServerSQL Server 7.0 이전 버전의 경우 IColumnsInfo::GetColumnsInfo 에서 반환된 선택적 메타데이터 열인 DBCOLUMN_COMPUTEMODE는 기본 열의 계산 여부를 확인할 수 없으므로 열 계산 여부를 설명하는 값 대신 DBSTATUS_S_ISNULL을 반환합니다.In SQL ServerSQL Server version 7.0 and earlier, the optional metadata column DBCOLUMN_COMPUTEMODE returned by IColumnsInfo::GetColumnsInfo returns DBSTATUS_S_ISNULL (instead of the values describing whether the column is computed) because it cannot be determined whether the underlying column is computed.

서수는 열에 대한 바인딩을 지정하는 데 사용됩니다.The ordinals are used to specify a binding to a column. 바인딩은 소비자 구조의 요소를 열과 연결하는 구조입니다.A binding is a structure that associates an element of the consumer's structure with a column. 바인딩은 열의 데이터 값, 길이 및 상태 값을 바인딩할 수 있습니다.The binding can bind the data value, length, and status value of the column.

바인딩 집합은 하나의 접근자로 수집되며,A set of bindings is gathered together in an accessor. IAccessor::CreateAccessor 메서드를 사용하여 만들어집니다.This is created by using the IAccessor::CreateAccessor method. 단일 호출에서 여러 열의 데이터를 검색하거나 설정할 수 있도록 한 접근자에 여러 바인딩이 포함될 수 있습니다.An accessor can contain multiple bindings so that the data for multiple columns can be retrieved or set in a single call. 소비자는 각 애플리케이션 부분의 서로 다른 사용 패턴에 일치하는 여러 접근자를 만들 수 있으며,The consumer can create several accessors to match different usage patterns in different parts of the application. 행 집합을 유지하는 동시에 접근자를 만들고 해제할 수 있습니다.It can create and release accessors while the rowset remains in existence.

데이터베이스에서 행을 인출하기 위해 소비자는 IRowset::GetNextRows 또는 IRowsetLocate::GetRowsAt 과 같은 메서드를 호출합니다.To fetch rows from the database, the consumer calls a method, such as IRowset::GetNextRows or IRowsetLocate::GetRowsAt. 이러한 인출 작업은 서버의 행 데이터를 공급자의 행 버퍼에 배치합니다.These fetch operations put row data from the server into the row buffer of the provider. 소비자는 공급자의 행 버퍼에 직접 액세스할 수 없습니다.The consumer does not have direct access to the row buffer of the provider. 소비자는 IRowset::GetData 를 사용하여 공급자 버퍼의 데이터를 소비자 버퍼로 복사하고, IRowsetChange::SetData 를 사용하여 소비자 버퍼의 데이터 변경 내용을 공급자 버퍼로 복사합니다.The consumer uses IRowset::GetData to copy data from the buffer of the provider to the consumer buffer and IRowsetChange::SetData to copy data changes from the consumer buffer to the provider buffer.

소비자는 GetData 메서드를 호출하고 행에 대한 핸들, 접근자에 대한 핸들 및 소비자 할당 버퍼에 대한 포인터를 전달합니다.The consumer calls the GetData method and passes the handle to a row, the handle to an accessor, and a pointer to a consumer-allocated buffer. GetData 는 데이터를 변환하고 접근자를 만드는 데 사용된 바인딩에서 지정된 열을 반환합니다.GetData converts the data and returns the columns as specified in the bindings used to create the accessor. 소비자는 다른 접근자 및 버퍼를 사용하여 한 행에 대해 GetData 를 여러 번 호출할 수 있으므로 동일한 데이터의 여러 복사본을 가져올 수 있습니다.The consumer can call GetData more than one time for a row, using different accessors and buffers and therefore the consumer can obtain multiple copies of the same data.

가변 길이 열의 데이터는 몇 가지 방법으로 처리할 수 있습니다.Data from variable-length columns can be treated several ways. 첫째, 이러한 열을 소비자 구조의 한정된 섹션에 바인딩할 수 있습니다.First, such columns can be bound to a finite section of the consumer's structure. 이 경우 데이터 길이가 버퍼 길이를 초과하면 잘림이 발생합니다.This causes truncation when the length of the data exceeds the length of the buffer. 소비자는 DBSTATUS_S_TRUNCATED 상태를 검사하여 잘림이 발생했는지 확인할 수 있습니다.The consumer can determine that truncation has occurred by checking for the status DBSTATUS_S_TRUNCATED. 소비자가 잘린 데이터 양도 확인할 수 있도록 반환된 길이는 항상 실제 길이(바이트)입니다.The returned length is always the true length in bytes, so that the consumer also can determine how much data was truncated.

소비자는 행 인출이나 업데이트를 마친 후 ReleaseRows 메서드를 사용하여 행을 해제합니다.When the consumer has finished fetching or updating rows, it releases them with the ReleaseRows method. 이렇게 하면 행 집합에 있는 행의 복사본에서 리소스가 해제되고 새 행을 위한 공간이 만들어집니다.This releases resources from the copy of the rows in the rowset and makes room for new rows. 그런 후에 소비자는 행을 인출하거나 만들고 행의 데이터에 액세스하는 주기를 반복할 수 있습니다.The consumer can then repeat its cycle of fetching or creating rows and accessing the data in them.

행 집합을 마치면 소비자는 IAccessor::ReleaseAccessor 메서드를 호출하여 접근자를 해제합니다.When the consumer is finished with the rowset, it calls the IAccessor::ReleaseAccessor method to release any accessor. 행 집합이 노출하는 모든 인터페이스에서 IUnknown::Release 메서드를 호출하여 행 집합을 해제합니다.It calls the IUnknown::Release method on all interfaces exposed by the rowset to release the rowset. 행 집합이 해제되면 소비자는 보유한 나머지 행이나 접근자를 강제로 해제합니다.When the rowset is released, it forces the release of any remaining rows or accessors the consumer may hold.

섹션 내용In This Section

참고 항목See Also

행 집합Rowsets