解决:我的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 32bit,但它没有解决我的问题。
有什么想法吗?
答案 0 :(得分:1)
适用于Oracle的Microsoft ODBC驱动程序非常陈旧且不受支持。对Oracle数据库和驱动程序的支持位于Oracles网站。 我建议您访问Oracle Site Oracle网络并注册一个免费的帐户。然后在您加入Oracle网络后,检查Visual Studio Tools for Oracle的下载部分,并查找适用于X64的ODAC112021xcopy.zip包或X86,包含Windows的更新运行时驱动程序。
下载运行时驱动程序后,请阅读oracle上的指南以进行安装.Oracle的新驱动程序将出现在ODBC管理器中,然后您可以更新“您的连接字符串”以使用新驱动程序。如果您无法连接到Oracle数据库的问题通常是tns.listener连接设置。 典型设置使用XE.NAME作为服务器实例。您需要打开端口1521的防火墙以允许连接。 如果您查看ora错误,即oraXXXX消息和搜索(Goolge或Bing),Web上就会显示如何更改Oracle数据库引擎的tns侦听器。 如果连接字符串有问题,可以(Google或Bing)连接字符串。 如果您有IIS服务器错误,请阅读IIS Net库指南以启用和启用“失败的请求跟踪”