運行環境:服務器安裝在虛擬機上(win7 64位)客戶端安裝在本機上(win7 64位),其中服務器和客戶端都選Oracle11g64位。服務器端配置了監聽程式,客戶端配置了服務命名。使用VS2010 MFC寫了一個在本地客戶端連接服務器端資料的小程式,在資料庫連接部分一直報記憶體例外,連接字串以及用戶密碼都是正確的,而且在本地使用SQL/DEVELOPE是可以連接成功。
CString lpszConnect;
CString userId;
CString Password;
userId = _T("topo");
Password = _T("Oracle11g");
lpszConnect = _T("Provider=OraOLEDB.Oracle.1;Persist Security Info=False;Data Source = (DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.107)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))");
if(FAILED(::CoInitialize(NULL)))
{
AfxMessageBox(_T("ADO Init failed"));
return false;
}
try
{
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open(_bstr_t(lpszConnect),_bstr_t(userId),_bstr_t(Password),adModeUnknown);
}
catch (_com_error* e)
{
CString err;
err.Format(_T("<提示:>連接錯誤!\r\n錯誤資訊:%s:"),e->ErrorMessage());
AfxMessageBox(err);
return false;
}
程式報錯誤如下:
uj5u.com熱心網友回復:
catch (_com_error* e)改成
catch (_com_error e)
看看能否捕獲例外并輸出錯誤資訊
uj5u.com熱心網友回復:
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。uj5u.com熱心網友回復:
大神啊,我改了之后確實可以捕獲錯誤,是打開連接錯誤,但是換了好幾種連接字串都沒連接成功,使用新建UDL檔案復制連接字串,仍然報連接錯誤。很郁悶!
uj5u.com熱心網友回復:
有沒有初始話comuj5u.com熱心網友回復:
AfxOleInit有沒有做lpszConnect內容對不對,沒看到你內容
uj5u.com熱心網友回復:
我們專案中是這樣打開oracleo的:
strConnection += "provider=oraoledb.oracle;data source=" + strDataSource + ";OLE DB Services=-4";
hr = m_pConnection->Open(_bstr_t(m_strConnection), _bstr_t(lpstrUserID), _bstr_t(lpstrPassword), NULL);
你不妨試試。
另外,用第三方客戶端,比如PLSQL連接一下對不對,或者重新安裝32位的測驗一下。
我印象中,我們專案遇到過64位連接不上的問題,換成32位的就行了。
uj5u.com熱心網友回復:
在64位Windows下:64位exe和dll在目錄c:\windows\system32目錄下;
32位exe和dll在目錄c:\windows\syswow64目錄下;
所以要注意:
在win64位系統下注冊32位ocx或dll需要將32位ocx或dll拷貝到c:\windows\syswow64\目錄下。
且注冊要用c:\windows\syswow64\regsvr32 xxxxxxx.ocx或dll
在win64位系統下設定32位程式使用的資料庫別名要用c:\windows\syswow64\cliconfg.exe
在win64位系統下設定32位程式使用的系統DSN要用c:\windows\syswow64\odbcad32.exe
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/120639.html
標籤:數據庫
上一篇:關于dll呼叫
