基於ADO的遠程Oracle連接


最近在一個通過MFC做一個界面,通過這個界面可以對布置在另一台服務器上的數據庫MySQL、SQl Server、Oracle進行增刪創建表的操作。其中我通過ADO很快就完成了對MySQL和SQL Server的控制。但是Oracle的連接就麻煩很多,我完成這個項目的大部分的時間都在研究怎么與Oracle數據庫互通。

先聲明下我的電腦環境,沒有裝ORACLE客戶端,WIN7_64位操作系統,使用的編譯器是VC6。服務器用的是WIN10的系統,Oracle的版本為11.2.0.1.0,我客戶端安裝了

先交代下,我用OTL最終沒能成功連接上數據庫,最終是用ADO連接上的,以下是我整個踩坑過程中難點的記錄。

現有的一些工具有很多,最終考慮先用OTL嘗試。

網上很多人說使用OTL只要有一個頭文件就夠了,而我嘗試了只包含OTLV4.H后連編譯都通不過,因為還要添加OCI的各種lib庫和OCI.dll。

我是先去別的博客推薦的英文網站上下了一個頭文件OTLV4.H,結果發現是個坑,里面的代碼是錯的,怎么都是編譯不過的,后來嘗試性的去國內的一個網站下載了一個OTLV4.h沒想到竟然編譯通過了。

然后我又下載了OCI的各種lib庫和OCI.dll。

在新建工程中,要把OCI.dll放在編譯出來的DEBUG或者RELEASE文件中,

然后在VC6的左上角菜單中project->project setting->LINK->input中的object/library modules中填入oci.lib,在additional library path中填入...\OCI\lib\MSVC(這個是OCI的lib文件庫)。

在左上角菜單中tool->options->directories中寫入include文件目錄...\OCI\include。

然后在工程中包含otlv4.h的頭文件,這樣工程環境的搭建就完成了。

OTL的頭文件中根據你的宏定義選擇相應功能。

我根據我的環境選擇了在StdAfx.h中加入以下宏定義內容:

#define OTL_ORA11G_R2 // Compile OTL 4.0/OCI11.2
#define OTL_ORA_UTF8
#define OTL_ORA_OCI_ENV_CREATE

宏定義介紹參考http://otl.sourceforge.net/otl3_compile.htm。

db.rlogon("userid/password@//IP:PORT/SID"); //這是我的鏈接字符串格式。

連接前記得先初始化。 

大部分的環境都好了,可是就死連不上,最后放棄轉用ADO。

MFC調用ADO的環境搭建如下:

#import "../../out/msado15.dll" no_namespace rename ("EOF","adoEOF")

在頭文件中加入上面這句話

下載安裝Oracle 11.2 client

有安裝包的,安裝好后環境變量什么的都會設置好。

在不清楚自己該用什么字符串格式的情況下,我先新建一個txt文件,將后綴改為udl,右鍵打開方式中選擇OLE DB core service 如下圖

因為我想連接Oracle的數據庫所以要在提供程序里選擇XXXX OLE DB Provider for Oracle.

填完連接信息后確認測試連接成功,然后點確定

 

 再用文本文檔打開該文件,得到連接字符串。

Provider=MSDAORA.1;User ID=system;Data Source=10.10.22.103:1521/iotdb;Persist Security Info=False

最終我連接Oracle的字符串如下:

  strConnect.Format("Provider=MSDAORA.1;Data Source=%s:%s/%s;Persist Security Info=False",csServer,csPort,csDBName);

然后再    m_pConnection->Open((_bstr_t)strConnect,(_bstr_t)csUser,(_bstr_t)csDBPass,adModeUnknown);///連接數據庫

連接之前記得先調用初始化函數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM