我在VC中用ADO连接ORACLE数据库时,用了很多种方法但是都是出现异常。我用断点调试时,代码如下
_ConnectionPtr m_pConnection;
HRESULT hr;
try
{
hr = m_pConnection.CreateInstance(__uuidof(Connection)); if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("Data Source=oradba;UID=neutorisk;PWD=790505","","",0);///连接数据库
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
//写入日志

AfxMessageBox(errormessage);//显示错误信息
exit(0);
}
当调式到if(SUCCEEDED(hr))这个语句时总是为假,是不是意味着创建的连接实例没有成功啊??各位朋友是否能帮帮我啊??

解决方案 »

  1.   

     CString strConn;
     strConn="Provider=MSDAORA.1;user id=test;password=tese;Data Source=oracledb;persist security=false";     HRESULT hr;
    try
    {
             hr=m_pConn.CreateInstance(__uuidof(Connection));
    if(SUCCEEDED(hr))
    {

       m_pConn->Open(strConn.AllocSysString(),"","",adModeUnknown);
       AfxMessageBox("已成功连接");
    }
    }
    catch(_com_error e)///捕捉异常
    {
    CString errormessage;
    errormessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());
    AfxMessageBox(errormessage);///显示错误信息


    try
    {
         _bstr_t  rsStr="select * from   日志记录";
             m_pRs.CreateInstance(__uuidof(Recordset));
             m_pRs->Open(rsStr,_variant_t((IDispatch *)m_pConn, true),adOpenStatic,
                 adLockOptimistic,
                   adCmdText);

       m_pRs->MoveFirst();
      while(!m_pRs->EndOfFile)
      {               
    m_list.AddString((char*)(_bstr_t)m_pRs->GetCollect("HH_NAME"));
    m_pRs->MoveNext();
      }
          UpdateData(false);

    }
    catch(_com_error e)///捕捉异常
    {
    AfxMessageBox("读取数据库失败!");///显示错误信息
    }
      

  2.   

    到微软下载MDAC2.X安装之后就解决问题了
      

  3.   

    感谢楼上的兄弟,我试了你的代码,但还是老问题。我调试到你的这段hr=m_pConn.CreateInstance(__uuidof(Connection));
    if(SUCCEEDED(hr))
    代码时SUCCEEDED(hr)仍然返回一个假值,这是怎么回事,是不是别的什么原因??
      

  4.   

    bluebohe兄,我下载了MDAC2。8安装完之后还是不行,怎么回事???
      

  5.   

    还不行啊?
    使用前得  #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")
    使用前得 初始化环境 : CoInitialize(NULL);
      

  6.   

    Oracle公司提供的连接方式:  
    使用标准安全级别:  
    strConnect  =  _T("Provider=OraOLEDB.Oracle;Data  Source=MyOracleDB;User  Id=myUsername;Password=myPassword;");  
    使用信任连接  
    1.strConnect  =  _T("Provider=OraOLEDB.Oracle;Data  Source=MyOracleDB;User  Id=/;Password=;");  UID为'/'  
    2.strConnect  =  _T("Provider=OraOLEDB.Oracle;Data  Source=MyOracleDB;OSAuthent=1;");使用OSAuthent=1  
    对于连接字符串可以参考以下网页:  http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdreforacleprovspec.asp?frame=true  
    http://download-west.oracle.com/otndoc/oracle9i/901_doc/win.901/a90171/using.htm  
    ===>ODBC  配置数据源  
    strConnect  =  _T("DSN=ADOTest");
      

  7.   

    stdafx.h中
    #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile")程序开始
    CoInitialize(NULL);这两个步骤是必须的,你做过没有
      

  8.   

    初始化com库
    ::CoInitialize(NULL)