아래의 테이블의 데이터를 select 하고자 합니다.
create table tbl_test
(
fld_sn integer primary key,
fld_data bit varying(2048) // 최대 256바이트 저장
)
c++과 연동하여 위 테이블에서 데이터를 select 하기 위해 아래와 같이 소스를 작성했습니다.
MS_SQL과 연동했을 때 사용했던 소스입니다.
궁금한건 화살표로 표시된 부분에서 BLOB 데이터를 획득하려 하는데 문자열로 반환해버리더군요.
MS-SQL에서는 vBlob.vt 값이 VT_ARRAY | VT_UI1으로 리턴되는데, 큐브리드는 VT_BSTR로 반환하네요.
데이터를 핸들링하는 부분을 다른 방법을 써야 할까요?
거듭되는 질문폭탄 죄송합니다ㅜㅜ 초짜인지라...
void BLOBSelect_SQLServer(_ConnectionPtr pConnection) throw(...)
{
_CommandPtr command = NULL;
_RecordsetPtr pRecordset = NULL;
TESTHR(command.CreateInstance(__uuidof(Command)));
command->ActiveConnection = pConnection;
command->CommandText = _bstr_t("select * from tbl_test");
command->CommandType = adCmdText;
pRecordset = command->Execute(NULL, NULL, adCmdText);
while(!(pRecordset->adoEOF))
{
int sn = pRecordset->Fields->Item["FLD_SN"]->Value;
_variant_t vBlob = pRecordset->Fields->Item["FLD_DATA"]->Value; // <---- 이곳이 MS-SQL과 차이가 나는 부분입니다.
BYTE* pData;
BYTE data[256] = {0,};
if(vBlob.vt == (VT_ARRAY | VT_UI1))
{
SafeArrayAccessData(vBlob.parray, (void**)&pData);
bloblength = vBlob.parray->rgsabound[0].cElements;
memcpy(data, pData, bloblength);
SafeArrayUnaccessData(vBlob.parray);
}
pRecordset->MoveNext();
}
if(pRecordset)
pRecordset->Close();
}