1. 程式人生 > >C++連接出錯問題解決 DCI 資料庫

C++連接出錯問題解決 DCI 資料庫

最近一直想用C或C++搞個彩色的控制檯端的程式,實現對某類資訊的管理(無非增刪查改),網上DOWN 了個例子,還算不錯,但沒有連線資料庫的部分,乾脆就連C對資料庫的操作也一起搞了,晚上搜了下,C連線資料庫並對資料庫進行操作, 一般有如下幾種方式

1    ODBC (只針對WINDOWS平臺)

2    ADO (只針對WINDOWS平臺)

3    PROC C (oracle 提供的底層基於C的封裝語言   )

4   OCI  (oracle 提供給C程式的介面庫檔案,目錄一般位於C:\oracle\product\10.2.0\db_2\OCI 目錄下,當然由於你的安裝目錄和我的不同,可能會在你的機器上位於其他目錄,在OCI目錄下 會有標頭檔案的目錄/include 和庫檔案的目錄/lib ,其中針對不同的開發工具,又提供了基於vc和 borland c++開工具的類庫,目錄名稱分為別msvc和bc  。 庫檔名稱都是oci.lib)

5   OTL(基於OCI 的封裝庫,OTL是由開源社群裡提供的基於多種資料庫的開發庫,其只有一個頭檔案和若干例子,只需要引進標頭檔案並設定好OCI的庫和標頭檔案的引用即可 執行例子。)

由於是個C++新手,筆者在執行測試例子的過程中出現了不少錯誤,想的頭疼,現總結下,以備後來者乘涼吧,

2   開啟VC6.0,新建控制檯程式。

3   將步驟1中下載到的標頭檔案匯入到工程中,並新建cpp,將連線資料庫的程式碼案例(筆者用的是ex188_oci9.cpp)貼上到新建的cpp中,然後CTRL+F7編譯檔案,然後F7組建,然後CTRL+F5執行。

其中第三步中出現的問題較多,列舉如下:

1  找不到otl4v.h標頭檔案,因為案例中的程式碼如下:#include <otlv4.h>  , 因為通過尖括號引用標頭檔案只會在系統級別的目錄下尋找,而用雙引號引用標頭檔案,則先會在當前目錄下尋找,然後在系統級別的目錄下尋找 。 解決辦法兩種:一是修改程式碼為 :#include “otlv4.h” ,二是引入標頭檔案,TOOL(工具)-->OPTION(選項),在彈出的對話方塊中,將“目錄”的include files新增上otl4v.h的路徑即可。

2   編譯通過後,BUILD(組建)的時候報了一堆錯誤。一般程式碼如下:

mytest1.obj : error LNK2001: unresolved external symbol _OCIHandleFree
mytest1.obj : error LNK2001: unresolved external symbol _OCIServerDetach
mytest1.obj : error LNK2001: unresolved external symbol _OCISessionEnd
mytest1.obj : error LNK2001: unresolved external symbol _OCIBindByName
mytest1.obj : error LNK2001: unresolved external symbol _OCIAttrGet
mytest1.obj : error LNK2001: unresolved external symbol _OCIStmtFetch
mytest1.obj : error LNK2001: unresolved external symbol _OCIInitialize
mytest1.obj : error LNK2001: unresolved external symbol _OCIAttrSet
mytest1.obj : error LNK2001: unresolved external symbol _OCIServerAttach
mytest1.obj : error LNK2001: unresolved external symbol _OCIHandleAlloc
mytest1.obj : error LNK2001: unresolved external symbol _OCIEnvInit
mytest1.obj : error LNK2001: unresolved external symbol _OCISessionBegin
mytest1.obj : error LNK2001: unresolved external symbol _OCIStmtExecute
mytest1.obj : error LNK2001: unresolved external symbol _OCIStmtPrepare
mytest1.obj : error LNK2001: unresolved external symbol _OCIDefineByPos
mytest1.obj : error LNK2001: unresolved external symbol _OCIParamGet
mytest1.obj : error LNK2001: unresolved external symbol _OCIErrorGet
mytest1.obj : error LNK2001: unresolved external symbol _OCIDescriptorFree
mytest1.obj : error LNK2001: unresolved external symbol _OCIDescriptorAlloc
mytest1.obj : error LNK2001: unresolved external symbol _OCITransCommit
mytest1.obj : error LNK2001: unresolved external symbol _OCILobWrite

這其實是在連結的時候,沒有找到庫檔案導致,需要你設定好正確的LIB目錄和庫檔案的名稱。兩步即可。

  2.1    工程---屬性---連線,在物件/庫模組中新增上oci.lib庫檔案。

  2.2     工具---選項---目錄 ,在library files 目錄下加上 oci.lib庫檔案的目錄,如筆者的目錄為:C:\oracle\product\10.2.0\db_2\OCI\lib\MSVC

3   VC6.0 開啟環境的錯誤。

     這也算湊巧遇到的一個問題吧。再關閉專案後,再開啟時發現VC崩潰,然後關閉了。

     具體的錯誤現象和解決辦法可以參考我的這個帖子: