방법: IRow::GetColumns/IRow::Open 및 ISequentialStream을 사용하여 열 인출
대형 데이터는 ISequentialStream 인터페이스를 사용하여 바인딩하거나 검색할 수 있습니다. 바인딩된 열에서 상태 플래그 DBSTATUS_S_TRUNCATED는 데이터가 잘렸음을 나타냅니다.
전체 예제 코드는 FetchColumns_A.cpp 파일에 있습니다. MSDN의 SQL Server 다운로드(SQL Server Downloads) 페이지에서 예제가 포함된 보관 파일을 다운로드할 수 있습니다.
이 예제는 Microsoft Visual C++ 2005를 사용하여 개발되었습니다.
아래 코드는 응용 프로그램에서 사용된 예제 테이블을 만듭니다.
USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'MyTable')
DROP TABLE MyTable;
GO
CREATE TABLE MyTable
(
col1 int,
col2 varchar(50),
col3 char(50),
col4 datetime,
col5 float,
col6 money,
col7 sql_variant,
col8 binary(50),
col9 text,
col10 image
);
GO
/* Enter data. */
INSERT INTO MyTable
values
(
10,
'abcdefghijklmnopqrstuvwxyz',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
'11/1/1999 11:52 AM',
3.14,
99.95,
CONVERT(nchar(50), N'AbCdEfGhIjKlMnOpQrStUvWxYz'),
0x123456789,
REPLICATE('AAAAABBBBB', 500),
REPLICATE(0x123456789, 500)
);
GO
보안 정보 |
---|
가능하면 Windows 인증을 사용하십시오. Windows 인증을 사용할 수 없으면 런타임에 사용자에게 자격 증명을 입력하라는 메시지를 표시합니다. 자격 증명은 파일에 저장하지 않는 것이 좋습니다. 자격 증명을 유지하려면 Win32 crypto API를 사용하여 자격 증명을 암호화해야 합니다. |
IRow::GetColumns/IRow::Open 및 ISequentialStream을 사용하여 열을 인출하려면
데이터 원본에 대한 연결을 설정합니다.
명령을 실행합니다. 이 예에서는 ICommandExecute::Execute()를 IID_IRow로 호출합니다.
IRow::Open() 또는 IRow::GetColumns()를 사용하여 열 데이터를 인출합니다.
IRow::Open()은 행에 대해 ISequentialStream을 여는 데 사용할 수 있습니다. DBGUID_STREAM을 지정하여 열에 이진 데이터 스트림이 있음을 나타냅니다. 그런 다음 IStream 또는 ISequentialStream을 사용하여 열에서 데이터를 읽을 수 있습니다.
IRow::GetColumns()를 사용하는 경우 DBCOLUMNACCESS 구조의 pData 요소가 스트림 개체를 가리키도록 설정됩니다.
ISequentialStream::Read()를 반복해서 사용하여 지정된 바이트 수를 소비자 버퍼로 읽어 들입니다.