已解决:我的 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 位,但它并没有解决我的问题。
有任何想法吗?