为什么从SafeArray中取不出数据呢?

jerry_mouse 2003-04-16 10:34:39
程序如下:
int main(int argc, char* argv[])
{
::CoInitialize(NULL);
_ConnectionPtr pConn;
_RecordsetPtr pRs;
pConn.CreateInstance(__uuidof(Connection));
pConn->Open("DSN=GAME_DB;UID=sa;PWD=","","",-1);
pRs.CreateInstance(__uuidof(Recordset));

pRs->Open("select * from user_info",pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
_variant_t data = pRs->GetRows(adGetRowsRest);
long nNumRows;
long nNumCols;
SafeArrayGetUBound(data.parray,2,&nNumRows);
SafeArrayGetUBound(data.parray,1,&nNumCols);

_variant_t vVal;

for(long i=0;i<=nNumRows;i++)
{
for(long j=0;j<=nNumCols;j++)
{
SafeArrayGetElement(data.parray,&j,&vVal);
char* pVal = (char*)_bstr_t(vVal);
printf(pVal);
}
}

pRs->Close();
pConn->Close();
::CoUninitialize();
return 0;
}

最后输出的是乱码,怎么办?
...全文
62 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hust 2003-06-05
  • 打赏
  • 举报
回复
SafeArrayGetElement中的第二个参数的维数应该与Safearray的维数一致
dragon188 2003-04-16
  • 打赏
  • 举报
回复
关注~~~
jerry_mouse 2003-04-16
  • 打赏
  • 举报
回复
出错代码是0x8002000b,什么意思呀?
numen27 2003-04-16
  • 打赏
  • 举报
回复
我觉得你应该在处理安全数组相关的数据时,最好判断一下操作是否成功,这样的话那里出错,出了什么错就很清楚了。就像这样:HRESULT hr=SafeArrayGetElement(data.parray,&j,&vVal);
if(FAILED(hr)) _com_raise_error(hr);出错以后看一看错误代码就知道怎么回事了。

4,018

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧