VC++利用ADO连接数据库,m__pRecordset->MoveFirst()出错问题

来源:百度知道 编辑:UC知道 时间:2024/06/16 01:32:19
整个初始化,连接,访问,打开等过程如下:
CoInitialize(NULL);

_RecordsetPtr m__pRecordset;

_ConnectionPtr pConn(_uuidof(Connection));

pConn->ConnectionString="Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=*****";

pConn->Open("","","****",adConnectUnspecified);

m__pRecordset.CreateInstance(_uuidof(Recordset));

CString sql;

sql.Format("select * from sysusers where name ='%s'",id);

m__pRecordset->Open((_variant_t)sql,variant_t((IDispatch*)pConn),adOpenDynamic,adLockOptimistic,adCmdText);

int a=m__pRecordset->GetFields()->Count;//单步跟踪,这里得到的a=20;
m__pRecordset->MoveFirst(); //但是单步调试到这就异常了。
m__pRecordset->Fields->GetItem(_variant_t("roles"))->Value;//删掉前面两句,跟踪到这也是错

我数据库里的该条记录是有的,不是空的。请高人帮忙。

弄了一天了,弄不出原因

有可能没有取到数据,记录集为空。
先判断一下IsEOF。
这里的a=20是Fields数量,即字段数,不是记录数量。

这句修改为:

m__pRecordset->Open((_variant_t)sql,variant_t((IDispatch*)pConn,true),adOpenStatic,adLockOptimistic,adCmdText);

再试试。