Windows下若安裝的是Oracle 資料庫,則OCCI庫檔案和標頭檔在目錄 %ORACLE_HOME%\oci 下。
這裡採用工具:VS 2005
(一)基本設定
1. 安裝好 oracle instant client
參見文章:
2. vs->工具->選項—》解決方案-》vc++-》包含檔案 添加:
$ORACLE_HOME\oci\include
3. vs->工具->選項—》解決方案-》vc++-》庫檔案 添加:
$ORACLE_HOME\oci\lib\msvc\vc8
4. 右鍵項目-》屬性-》配置屬性-》連接器-》輸入-》附加依賴項 添加
oraocci11d.lib
5 重啟vs 就ok了;
(二)錯誤集錦
1. 運行時提示,“無法啟動此程式,因為電腦中丟失 OCI.dll”
複製 C:\oracle10g\product\10.2.0\db_1\BIN 下的 OCI.dll 到DEBUG目錄,與 exe 檔案放在一起。
2. 編譯時間出現連結錯誤
1>------ 已啟動產生: 項目: TaxServer, 配置: Debug Win32 ------
1>正在連結...
1> 正在建立庫 E:\TaxServer\Debug\TaxServer.lib 和對象 E:\TaxServer\Debug\TaxServer.exp
1>DBwrapper.obj : error LNK2019: 無法解析的外部符號 "public: virtual __thiscall oracle::occi::SQLException::~SQLException(void)" (??1SQLException@occi@oracle@@UAE@XZ),該符號在函數 __catch$?open@DBwrapper@@QAE_NXZ$0 中被引用
1>DBwrapper.obj : error LNK2019: 無法解析的外部符號 "public: virtual int __thiscall oracle::occi::SQLException::getErrorCode(void)const " (?getErrorCode@SQLException@occi@oracle@@UBEHXZ),該符號在函數 __catch$?open@DBwrapper@@QAE_NXZ$0 中被引用
1>DBwrapper.obj : error LNK2019: 無法解析的外部符號 "public: virtual class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall oracle::occi::SQLException::getMessage(void)const " (?getMessage@SQLException@occi@oracle@@UBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ),該符號在函數 __catch$?open@DBwrapper@@QAE_NXZ$0 中被引用
1>DBwrapper.obj : error LNK2019: 無法解析的外部符號 "public: static class oracle::occi::Environment * __cdecl oracle::occi::Environment::createEnvironment(enum oracle::occi::Environment::Mode,void *,void * (__cdecl*)(void *,unsigned int),void * (__cdecl*)(void *,void *,unsigned int),void (__cdecl*)(void *,void *))" (?createEnvironment@Environment@occi@oracle@@SAPAV123@W4Mode@123@PAXP6APAX1I@ZP6APAX11I@ZP6AX11@Z@Z),該符號在函數 "public: bool __thiscall DBwrapper::open(void)" (?open@DBwrapper@@QAE_NXZ) 中被引用
1>DBwrapper.obj : error LNK2019: 無法解析的外部符號 "public: static void __cdecl oracle::occi::Environment::terminateEnvironment(class oracle::occi::Environment *)" (?terminateEnvironment@Environment@occi@oracle@@SAXPAV123@@Z),該符號在函數 "public: bool __thiscall DBwrapper::close(void)" (?close@DBwrapper@@QAE_NXZ) 中被引用
1>E:\TaxServer\Debug\TaxServer.exe : fatal error LNK1120: 5 個無法解析的外部命令
1>組建記錄檔儲存在“file://e:\TaxServer\Debug\BuildLog.htm”
1>TaxServer - 6 個錯誤,0 個警告
========== 產生: 成功 0 個,失敗 1 個,最新 0 個,跳過 0 個 ==========
細看,發現只是有些地方出現連結錯誤,例如 SQLException,發現是程式原因,
老版本,VC7下編譯通過的程式,在VC9下不能通過。
將
try {
} catch (SQLException& ex) {
}
改成
try {
} catch (SQLException ex) {
}
(三)問題
VS 2005 和 VS 2008 均編譯未通過 Oracle Instant Client win-x86-64-11.1.0.7.0,待解決問題.
OCCI for VC9 下載地址:http://www.oracle.com/technetwork/database/occidownloads-083553.html
(四)參考
VS2008中用OCCI串連Oracle,不需要安裝Oracle用戶端 http://hi.baidu.com/nlpack/blog/item/b3b9a3fe57f6921a08244d65.html
VS2008 C++串連oracle 用戶端的問題 http://hi.baidu.com/%D1%E3%C9%F9%C1%F4/blog/item/d5bfdca8a327b4bfca130c83.html
Oracle9i中OCCI在VC6下不能DEBUG的問題及解決方案 http://blog.csdn.net/iihero/article/details/1099908