我用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.   

    _bstr_t ConnStr="Provider=SQLOLEDB.1;User ID=sa;Password=0000;Security Info=False;Initial Catalog=train;Data Source=(local)";
    中把Provider=SQLOLEDB.1;改为Provider=sqloledb;strConnect = _T("Provider=sqloledb;Data Source=MyServerName;"
            "Initial Catalog=MyDatabaseName;"
            "User Id=MyUsername;Password=MyPassword;"); 
      

  2.   

    Rs->Open(RsStr, (IDispatch*)Conn,adOpenDynamic,adLockOptimistic,adCmdText);
    就是这行出错的
      

  3.   

    _bstr_t RsStr="select * from LOGIN where USER_PSWD='00000'";
    sql语句错了,你把它拿到数据库中去执行一下
      

  4.   

    你有没有调用过这个函数呀?CoInitialize(NULL);这个初始化com库,之前必需调用,且只需一次即可
      

  5.   

    调用过的,,SQL语句我也改了,改成 _bstr_t RsStr("SELECT *FROM LOGIN");Rs->Open(RsStr,_variant_t((IDispatch *)
    Conn,true),adOpenStatic,adLockReadOnly,adCmdTable);但还是不行,在OPEN的时候出错,错误是IDispatch error #3092
      

  6.   

    改为:m_pRs->Open(rsStr,_variant_t((IDispatch *)m_pConn, true),adOpenStatic,
                 adLockOptimistic,
                   adCmdText);
    试试!
      

  7.   

    ADO出错处理:
    //出错处理:
    3127——没有找到目标表
    3092——目标表已经存在你查看一下你的目标表的状况!
    另外:
     直接这样给_bstr_t 赋值好象也不太好,容易内存泄露??
    _bstr_t ConnStr="Provider=SQLOLEDB.1;User ID=sa;Password=0000;Security Info=False;Initial Catalog=train;Data Source=(local)";
      

  8.   

    CString sql;
    sql = TEXT("select * from.....");
    Rs->Open((_variant_t)sql,_variant_t((IDispatch *)
    Conn,true),adOpenStatic,adLockReadOnly,adCmdText);百分之百可以通过!
    楼主你再试一试了
      

  9.   

    to cdwy411(无心睡眠):
       ADO出错时的提示信息:IDispatch error #xxxx 在什么地方(MSDN?书籍?杂志?)可以找到?
      
       谢谢!to 楼主:不好意思,借光一下:)
      

  10.   

    你应该在建立Connection对象时加判断,
      hr=m_pConnection.CreateInstance(__uuidof(Connection));
    if(SUCCEEDED(hr)&& m_pConnection!=NULL)