我用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());
 }

解决方案 »

  1.   

    建议你在每次的Open时使用Catch,这样你就可以知道是哪一个出错了。
    我觉得不像你代码中的错误,而是数据连接的问题,因为当SQL写错(比如在字段中不小心使用了关键字,而此时使用关键字的SQL语句在数据库本身的sql查询中都可以运行)的时候catch都会报错。
      

  2.   

    说真的,我今天上事就是想问这个问题.我也碰到了同样的问题.我在跟踪到_RecordsetPtr->open返回值hr的时候,总是非零数.故无法打开.可能与我出现在的问题是一样的.我用的是Access做的数据库.
      

  3.   

    select * from [LOGIN] where [USER_PSWD]='00000'