刚学vc访问数据库,用的是ado访问,可能在连接方式上有问题,但是搞不明白,请大家指点一下以下的代码,多谢!
int TMyAdoDB::OpenMyOra()
{
HRESULT hr;
// hr = m_pConnection.CreateInstance("ADODB.Connection");   //这里应该是那种方式?
hr = m_pConnection.CreateInstance(__uuidof(Connection));
if (SUCCEEDED(hr))
{
try
{
string strConnect = "Provider=OraOLEDB.Oracle;Data Source=10.10.3.190;User Id=user;Password=pass;";
 //应该是这里出问题的,每次选择连接数据库时,就会发送错误报告,郁闷
m_pConnection->Open(strConnect.c_str(), "", "", adModeUnknown);
AfxMessageBox("连接数据库成功");
}
catch (_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库文件是否在当前路径下");
return TMYADODB_FALSE_OPEN_DB;
}
catch (...)
{
AfxMessageBox("未知错误!");
return TMYADODB_FALSE_OPEN_DB;
}
return TMYADODB_SUCCESS;
}
else
{
AfxMessageBox("hr created failed!");
return TMYADODB_FALSE_HR_FAILED;
}
}

解决方案 »

  1.   

    oracle连接方式是我上面写的那种么,找了好多例子都没有连接oracle的方式的,很是郁闷那
      

  2.   

    最初配置好的oracle是10.10.3.190,没问题,就是在上面那个连接
    string strConnect = "Provider=OraOLEDB.Oracle;Data Source=10.10.3.190;User Id=user;Password=pass;";
     //应该是这里的问题,下面哪个open也有问题么,很不明白
    m_pConnection->Open(strConnect.c_str(), "", "", adModeUnknown);
      

  3.   

    还需要我配置一个odbc数据源么?初次接触这个,有点毛手毛脚的
      

  4.   

    Provider=OraOLEDB.Oracle.1;Password=mypwd;Persist Security Info=True;User ID=myuser;Data Source=sidname可以通过建立一个*.udl文件测试连接串是否正确
    Data Source不是一个IP地址,这个名称应该是在tnsname.ora里面定义的,该文件路径如
    C:\Oracle\Ora81\network\ADMIN
    下面是其中一个定义HOST可以是IP或者计算机名
    上面一个大写的ORCL是本地调用时用的sidname(连接串中使用)
    下面一个SERVICE_NAME = orcl是在remote-8e2903964定义的一个sidnameORCL =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = remote-8e2903964)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )
      )
      

  5.   

    hahu(神仙?妖怪?谢谢!) 按照你的改写了,但是还是在
    hr = m_pConnection.CreateInstance("ADODB.Connection");
    出现问题,unhandled exception in MyPro.exe :0xc0000005:Access Violation
    不明白
      

  6.   

    没有用UNICODE字符串的问题
    _bstr_t bstrCnnString =  L"Provider=OraOLEDB.Oracle;Data Source=10.10.3.190;User Id=user;Password=pass;";
    m_pConnection->Open(bstrCnnString, "", "", adModeUnknown);
      

  7.   

    多谢,以解决
    另外多问个问题,为什么一定要_bstr_t类型?