解決済み:私のVC++アプリケーションは32ビットで、Oracle DBは64ビットでした。最初はクライアントは両方のバージョンのOracleで動作するが、そうはしない。私はOracle 11g2 32bitを再インストールすることで問題を解決しました。OLE DB経由でOracle 11gに接続できません
私はC++でVisual Studio 2008経由でテスト用Oracle 11g2データベースに接続しようとしています。 私のデータベースインスタンス名はORCL.TEST.DBです。テスト目的で、私はuser:SYSTEMとpassword: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ビットのOSと64ビットのOracleだが、Visual Studio 2008では32ビットのC++コンパイラ)だと思った。だから私はOracleのインスタント・クライアント32ビットをインストールしましたが、私の問題は解決しませんでした。
アイデア?
これはあなたが知っている信頼できる接続ですか? – MethodMan
はい、Oracleインスタンスはマシンにインストールされています。私はローカルに接続しようとしています。 – Paradoxyde
私はちょうど私の答えで私の答えに下のコメントを追加しました。あなたは、統合されたセキュリティ "データソース= Oracle11g;統合セキュリティ=はい"を使用して接続しようとしましたか? – MethodMan