標籤:proc vc c c++ oracle
作業系統:windows 7
資料庫版本:oracle 10g
VS版本:VS2010
前言:串連ORACLE的方式有很多,此處僅以PROC為例,說明如何串連oracle,有不妥之處,望諸位看官指出,學習共進。
一、安裝oracle 10g對應的用戶端版本。
注意事項:做好客戶配置,以本機為例:D:\oracle\product\10.2.0\client_2\NETWORK\ADMIN\tnsnames.ora檔案為
# tnsnames.ora Network Configuration File: d:\oracle\product\10.2.0\client_2\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
DB_DEMO =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.8.222)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = db_demo)
)
)
host:ORACLE服務端IP地址;PORT:ORACLE服務端連接埠號碼,預設為1521;SERVICE_NAME:資料庫名稱。
二、建立oracle.pc檔案,檔案內容為:
// oracle.cpp : Defines the entry point for the console application.//#include <stdio.h>#include <stdlib.h>#include <process.h> #include <errno.h> //EXEC SQL INCLUDE SQLCA;#include <sqlca.h>int main(int argc, char* argv[]){EXEC SQL BEGIN DECLARE SECTION;VARCHAR myusername[20], mypassword[20], myserver[20];EXEC SQL END DECLARE SECTION;printf( "\n請輸入使用者名稱:" );gets( (char*)myusername.arr );myusername.len = (unsigned short) strlen( (char*)myusername.arr );printf( "\n請輸入口令:" );gets( (char*)mypassword.arr );mypassword.len = (unsigned short) strlen( (char*)mypassword.arr );printf("\n請輸入伺服器名:");gets( (char*)myserver.arr );myserver.len = (unsigned short) strlen( (char*)myserver.arr );EXEC SQL CONNECT :myusername IDENTIFIED BY :mypassword USING :myserver;if(sqlca.sqlcode < 0 )printf (" \n使用者%s成功地串連到了伺服器%s上!\n" , myusername.arr, myserver.arr); elseprintf("\n%ld,%s\n", sqlca.sqlcode,(char *)sqlca.sqlerrm.sqlerrmc);return 0;}
三、找到ORACLE安裝目錄下PROC.exe檔案,本機目錄為:D:\oracle\product\10.2.0\client_2\BIN,將oracle.pc檔案拷貝到些目錄下,運行cmd命令列,cd到此目錄下,運行proc.exe oracle.pc oracle.cpp命令,會在目前的目錄下產生oracle.cpp檔案。
四、啟動VS2010,建立空控制項台的oracle項目,以下要注意了,做好VS項目配置。將oracle.cpp的拷貝至oracle目錄下,添加進工程。然後做的配置:
1、資料庫include標頭檔路徑配置
2、資料庫LIB檔案目錄配置
3、資料庫依賴LIB檔案配置
五、刪除之前自動產生的oracle.cpp檔案,將oracle.cpp添加進oracle項目,編譯連結。可能會出現以下幾個錯誤:
1、提示未include "stdafx.h"。解決方案:在oracle.cpp開始部位添加#include "stdafx.h"
2、提示 error LNK2001: unresolved external symbol "void __cdecl sqlcxt(void * *,unsigned int *,struct sqlexd *,struct sqlcxp const *)" ([email protected]@[email protected]@[email protected]@@Z)錯誤。解決方案:extern void sqlcxt (void **, unsigned int *,struct sqlexd *, const struct sqlcxp *);在extern後加上"C"編譯即可
3、其它一些問題,就仔細查看配置的include、lib路徑是否正確,以及lib檔案名稱是否正確。
六、運行產生的oracle.exe。如下:
PROC簡單使用用例--VC串連ORACLE