0

已解决:我的 VC++ 应用程序是 32 位的,而我的 Oracle DB 是 64 位的。我最初认为客户端可以与两个版本的 Oracle 一起工作,但事实并非如此。因此,我通过重新安装 Oracle 11g2 32 位解决了这个问题。

我正在尝试通过 C++ 中的 Visual Studio 2008 连接到测试 Oracle 11g2 数据库。我的数据库实例名称是 ORCL.TEST.DB,出于测试目的,我尝试使用用户:SYSTEM 和密码:admin 进行连接。我也在使用 Oracle OLE DB 连接器。

如您所见,我并没有尝试任何花哨的东西,我只是在尝试成功连接。

CDataSource ds;
CSession session;

int _tmain(int argc, _TCHAR* argv[])
{
try{
    // fire up COM
    HRESULT hr = CoInitialize(0);
    if(FAILED(hr))
    {
        cout << "Can't start COM!? " << endl;
        return -1;
    }

    /// connect to the database
    //hr = ds.Open(L"OraOLEDB.Oracle", _T("ORCL"), _T("SYSTEM"), _T("admin"));
    hr = ds.OpenFromInitializationString(L"Provider=OraOLEDB.Oracle;Data Source=ORCL.TEST.DB;User Id=SYSTEM;Password=admin");
    if(FAILED(hr))
    {
        ////////////////THIS IS WHERE IT ENDS UP
        cout << "Can't open db" << endl << hr << endl;
        return -1;
    }
}
catch(...){
    cout << "Unknown failure" << endl;
    return -1;
}
return 0;
}

hr 包含的错误代码是 80004005,即 E_FAIL(未指定故障)。

起初我认为这是 32 与 64 的问题(64 位操作系统和 64 位 Oracle,但 Visual Studio 2008 中的 32 位 C++ 编译器)。所以我安装了 Oracle 的 Instant Client 32 位,但它并没有解决我的问题。

有任何想法吗?

4

1 回答 1

1

用于 Oracle 的 Microsoft ODBC 驱动程序非常旧且不受支持。Oracle 数据库和驱动程序的支持位于 Oracle 网站。我建议您访问Oracle Site Oracle Network 并注册一个免费帐户。然后在您加入 Oracle Network 后检查 Visual Studio Tools for Oracle 的下载部分并查找适用于 X64 或 X86 的 ODAC112021xcopy.zip 包,其中包含适用于 Windows 的更新的运行时驱动程序。

下载运行时驱动程序后,请阅读 oracle 的安装指南。Oracle 的新驱动程序将出现在 ODBC 管理器中,然后您可以更新“您的连接字符串”以使用新驱动程序。如果您无法连接到 Oracle 数据库问题通常是 tns.listener 连接设置。典型设置使用 XE.NAME 作为服务器实例。您需要为端口 1521 打开防火墙以允许连接。如果您查看 oraXXXX 消息和搜索(Goolge 或 Bing)的 ora 错误,则 Web 上有显示如何更改 Oracle 数据库引擎的 tns 侦听器的地方。如果连接字符串有问题,您可以(Google 或 Bing)连接字符串。如果您有 IIS 服务器错误,请阅读 IIS Net 库指南以启用和打开“失败的请求跟踪”

于 2012-01-09T21:48:16.587 回答