решено: мое приложение VC ++ было 32-разрядным, а база данных Oracle - 64-разрядной.Сначала я думал, что клиент будет работать с обеими версиями Oracle, но это не так.Таким образом, я решил проблему путем переустановки Oracle 11g2 32bit.
Я пытаюсь подключиться к тестовой базе данных Oracle 11g2 через Visual Studio 2008 на C ++.Имя моего экземпляра базы данных - 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, но 32-битный компилятор C ++ в Visual Studio 2008).Поэтому я установил 32-битный Oracle Instant Client, но он не решил мою проблему.
Есть идеи?