首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2013-06-26 
VC + ADO + SQL BLOB 读取/存储内容不一致为什么存储与读取的内容不一致?读取的内容最后多了点东西。// 存

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试试,封装好了。

热点排行