读书人

VC + ADO + SQL BLOB 读取/储存内容不

发布时间: 2013-06-26 14:29:32 作者: rapoo

VC + ADO + SQL BLOB 读取/存储内容不一致
为什么存储与读取的内容不一致?

读取的内容最后多了点东西。

// 存储入数据库



VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = strValue.GetLength();

psa = SafeArrayCreate(VT_UI1, 1,rgsabound);

int nLen = strValue.GetLength();

for( int i=0; i<nLen; i++ )
SafeArrayPutElement(psa,(long *)&i, (void *)(LPCTSTR)strValue.Mid(i,1));
varBLOB.vt = VT_ARRAY | VT_UI1;
varBLOB.parray = psa;

pRs->GetFields()->GetItem("SignData")->AppendChunk(varBLOB);
pRs->Update();


// 读取

if( pRs->Open(_variant_t(strSQL),varCon,adOpenStatic,adLockOptimistic,adCmdText) )
{
AfxMessageBox("查询失败!");
return;
}

if( pRs->GetRecordCount() > 0 )
{
// 得到数据的长度
long lDataSize = pRs->GetFields()->GetItem("SignData")->ActualSize;
if( lDataSize > 0 )
{
_variant_t varBLOB = pRs->GetFields()->GetItem("SignData")->GetChunk(lDataSize);
if( varBLOB.vt == ( VT_ARRAY | VT_UI1 ) )
{
char *pBuff = NULL;
SafeArrayAccessData(varBLOB.parray,(void **)&pBuff);

FILE *pFile = fopen("C:\\6038.txt","w+");
if( pFile != NULL )
{
fputs(pBuff,pFile);
fclose(pFile);
}

SafeArrayUnaccessData(varBLOB.parray);
}
}
}

pRs->Close();
SQL VC 数据库
[解决办法]
用这个ADO试试,封装好了。

读书人网 >VC/MFC

热点推荐