我用catch,再用AfxMessageBox显示了错误,为:IDispatch error #3127代码:_bstr_t ConnStr="Provider=SQLOLEDB.1;User ID=sa;Password=0000;Security Info=False;Initial Catalog=train;Data Source=(local)";_bstr_t RsStr="select * from LOGIN where USER_PSWD='00000'"; _RecordsetPtr Rs= NULL;
_ConnectionPtr Conn= NULL;
try
{
Conn.CreateInstance(__uuidof(Connection));
Conn->Open(ConnStr,"","",adConnectUnspecified);
if (Conn->State==adStateOpen)
{
MessageBox("Conn is ok");
}
Rs.CreateInstance(__uuidof(Recordset));
Rs->Open(RsStr, (IDispatch*)Conn,adOpenDynamic,adLockOptimistic,adCmdText);
if (Rs->State == adStateOpen)
{
MessageBox("Rs is ok");
}
}
catch(_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
}
_ConnectionPtr Conn= NULL;
try
{
Conn.CreateInstance(__uuidof(Connection));
Conn->Open(ConnStr,"","",adConnectUnspecified);
if (Conn->State==adStateOpen)
{
MessageBox("Conn is ok");
}
Rs.CreateInstance(__uuidof(Recordset));
Rs->Open(RsStr, (IDispatch*)Conn,adOpenDynamic,adLockOptimistic,adCmdText);
if (Rs->State == adStateOpen)
{
MessageBox("Rs is ok");
}
}
catch(_com_error &e)
{
AfxMessageBox(e.ErrorMessage());
}
我觉得不像你代码中的错误,而是数据连接的问题,因为当SQL写错(比如在字段中不小心使用了关键字,而此时使用关键字的SQL语句在数据库本身的sql查询中都可以运行)的时候catch都会报错。