一、ODBC簡(jiǎn)介
開放數(shù)據(jù)庫(kù)互連(ODBC)是微軟提出的數(shù)據(jù)庫(kù)訪問接口標(biāo)準(zhǔn)。開放數(shù)據(jù)庫(kù)互連定義了訪問數(shù)據(jù)庫(kù)的API一個(gè)規(guī)范,這些API獨(dú)立于不同廠商的DBMS,也獨(dú)立于具體的編程語言。通過使用ODBC,應(yīng)用程序能夠使用相同的源代碼和各種各樣的數(shù)據(jù)庫(kù)進(jìn)行交互。這使得開發(fā)者不需要以特殊的數(shù)據(jù)庫(kù)管理系統(tǒng)DBMS為目標(biāo),或者了解不同支撐背景的數(shù)據(jù)庫(kù)的詳細(xì)細(xì)節(jié),就能夠開發(fā)和發(fā)布客戶/服務(wù)器應(yīng)用程序。下面是ODBC應(yīng)用系統(tǒng)的體系結(jié)構(gòu)。
二、ODBC句柄
應(yīng)用程序運(yùn)行后,為維護(hù)執(zhí)行的狀態(tài),ODBC 管理器和ODBC 驅(qū)動(dòng)程序中必須保持足夠的控制信息。應(yīng)用程序要求ODBC 管理器和ODBC 驅(qū)動(dòng)程序?yàn)镺DBC環(huán)境、每個(gè)連接以及每個(gè)SQL語句分配描述/控制信息存儲(chǔ)空間,并返回指向各個(gè)存儲(chǔ)區(qū)的句柄供其使用。
(1)環(huán)境句柄:整個(gè)ODBC上下文的根句柄。標(biāo)識(shí)全程數(shù)據(jù)訪問控制信息的內(nèi)存結(jié)構(gòu),包括有效連接句柄以及當(dāng)前活動(dòng)連接句柄。ODBC將環(huán)境句柄定義為HENV類型的變量。應(yīng)用程序使用單一的環(huán)境句柄,在連接到數(shù)據(jù)源以前必須申請(qǐng)?jiān)摼浔?/p>
(2)連接句柄:管理有關(guān)數(shù)據(jù)庫(kù)會(huì)話的所有信息。連接句柄標(biāo)識(shí)每個(gè)特定的連接信息的內(nèi)存結(jié)構(gòu)。ODBC將環(huán)境句柄定義為HDBC類型的變量。應(yīng)用程序在連接數(shù)據(jù)源之前申請(qǐng)連接句柄。每個(gè)連接句柄與環(huán)境句柄有關(guān),環(huán)境句柄上可以有多個(gè)與其有關(guān)的連接句柄。
(3)語句句柄:ODBC語句包括應(yīng)用訪問數(shù)據(jù)源的SQL語句和語句相關(guān)的管理信息,語句句柄標(biāo)識(shí)每個(gè)語句管理信息的內(nèi)存結(jié)構(gòu)。ODBC將語句句柄定義為HSTMT類型的變量。應(yīng)用程序在提交SQL請(qǐng)求之前也必須申請(qǐng)語句句柄。每個(gè)語句句柄與一個(gè)連接句柄有關(guān),每個(gè)連接句柄上可以有多個(gè)與其有關(guān)的語句句柄。
三、ODBC程序執(zhí)行流程
? 分配環(huán)境句柄
基于ODBC3.X版本的應(yīng)用統(tǒng)一使用SQLAllocHandle來分配句柄。調(diào)用時(shí)設(shè)計(jì)不同的句柄類型就可以獲得該類型的句柄。但在API內(nèi)部實(shí)現(xiàn)上一般重新轉(zhuǎn)換為執(zhí)行SQLAllocEnv,SQLAllocConnect和SQLAllocStmt,這樣可以達(dá)到兼容和代碼重用作用。SQLAllocEnv:用來分配環(huán)境句柄。
例如:
ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &oraclehenv);
? 分配連接句柄
SQLAllocConnect:用來分配連接句柄。連接句柄提供對(duì)一些信息的訪問,例如,在連接上的有效語句及標(biāo)識(shí)符句柄,以及當(dāng)前是否打開一些一個(gè)事務(wù)處理。調(diào)用SQLAllocConnect 函 數(shù) 獲 取 連 接 句 柄。例如:
ret = SQLAllocHandle(SQL_HANDLE_DBC, oraclehenv, &oraclehdbc);
? 建立數(shù)據(jù)源
使用已分配的連接句柄來建立應(yīng)用程序和數(shù)據(jù)源/數(shù)據(jù)庫(kù)系統(tǒng)的連接,進(jìn)行句柄和數(shù)據(jù)源的綁定。綁定也由目標(biāo)數(shù)據(jù)源的ODBC驅(qū)動(dòng)程序完成。
例 如:
ret = SQLConnect(oraclehdbc,
"conn",SQL_NTS, //ODBC的DNS名稱
"scott",SQL_NTS, //用戶賬號(hào)
"123",SQL_NTS); //密碼
? 分配語句句柄
用戶對(duì)DBC數(shù)據(jù)源的存取操作,都是通過SQL語句實(shí)現(xiàn)的。在這個(gè)過程中,應(yīng)用程序 將通過連接向ODBC數(shù)據(jù)庫(kù)提交SQL語句,以完成用戶請(qǐng)求的操作。即通過執(zhí)行SQLAllocHandle或SQLAllocStmt來分配語句句柄。調(diào)用SQLAllocStmt 函數(shù)獲取語句句柄。例如:
SQLstmt= "SELECT * FROM authors"
rc= SQLAllocStmt(hdbc, hstmt)
? 執(zhí)行SQL語句
執(zhí)行SQL語句。 執(zhí)行SQL 語 句 的方法比較多, 最簡(jiǎn)單明了的方法是調(diào)用SQLAllocStmt函數(shù),例如:
SQLstmt= "SELECT * FROM authors"
rc= SQLExecDirect(hstmt, SQLstmt, Len(SQLstmt))
如果SQL語句被順利提交并正確執(zhí)行,那么就會(huì)產(chǎn)生一個(gè)結(jié)果集。檢索結(jié)果集的方法有很多,最簡(jiǎn)單最直接的方法是調(diào)用SQLFetch 和SQLGetData 函 數(shù)。
SQLFetch函數(shù)的功能是將結(jié)果集的當(dāng)前記錄指針移至下一個(gè)記錄;
SQLGetData函數(shù)的功能是提取結(jié)果集中當(dāng)前記錄的某個(gè)字段值。通??梢圆捎靡粋€(gè)循環(huán)以提取結(jié)果集中所有記錄的所有字段值,該循環(huán)重復(fù)執(zhí)行SQLFetch和SQLGetData函數(shù),直至SQLFetch函數(shù)返回SQL_NO_DATA_FOUND, 這表示已經(jīng)到達(dá)結(jié)果集的末尾。
DimColVal As String * 225
ColVal= String(255, 0)
? 結(jié)束應(yīng)用程序
在應(yīng)用程序完成數(shù)據(jù)庫(kù)操作, 退出運(yùn)行之前,必須釋放程序中使用的系統(tǒng)資源。這些系統(tǒng)資源包括:語句句柄、連接句柄和ODBC環(huán)境句柄。完成這個(gè)過程的如下:
調(diào)用SQLFreeStmt 函數(shù)釋放語句句柄及其相關(guān)的系統(tǒng)資源。例如:
rc= SQLFreeStmt(hstmt, SQL_DROP)
調(diào)用SQLDisconnect 函數(shù)關(guān)閉連接。 例 如:
rc= SQLDisconnect(hdbc)
調(diào)用SQLFreeConnect函數(shù)釋放連接句柄及其相關(guān)的系統(tǒng)資源。例如:
rc= SQLFreeConnect(hdbc)
調(diào)用SQLFreeEnv函數(shù)釋放環(huán)境句柄及其相關(guān)的系統(tǒng)資源,停止ODBC 操作。 例如:
rc= SQLFreeEnv(henv)
(7)錯(cuò) 誤 處 理
所有DBCAPI函 數(shù), 若在執(zhí)行期間發(fā)生錯(cuò)誤, 都將返回一個(gè)標(biāo)準(zhǔn)錯(cuò)誤代碼SQL_ERROR。
一般來講,在每次調(diào)用ODBC API 函 數(shù) 之 后, 都應(yīng)該檢查該函數(shù)返回值,確定該函數(shù)是否成功地執(zhí)行,再?zèng)Q定是否繼續(xù)后續(xù)過程。 而詳細(xì)的錯(cuò)誤信息,可以調(diào)用SQLError 函數(shù)獲得。SQLError 函數(shù)將返回下列信息: 標(biāo)準(zhǔn)的ODBC錯(cuò)誤狀態(tài)碼 ODBC 數(shù)據(jù)源提供的內(nèi)部錯(cuò)誤編碼錯(cuò)誤信息串
四、開發(fā)環(huán)境的配置
1.創(chuàng)建Oracle ODBC數(shù)據(jù)源
對(duì)于WIN 7系統(tǒng)來說,打開控制面板,找到ODBC,具體位置如下圖所示,如果沒有找到,可以在右上角搜索欄里面輸入ODBC,就可以找到了。
對(duì)于WIN XP系統(tǒng)來說,打開控制面板,找到管理工具,找到數(shù)據(jù)源(ODBC),顯示ODBC數(shù)據(jù)源管理器對(duì)話框。對(duì)話框如下圖所示。
2.設(shè)置和配置一個(gè)系統(tǒng)DSN,單擊“系統(tǒng)DSN標(biāo)簽”,選擇“添加”。
3.找到需要配置的數(shù)據(jù)源,單擊完成,彈出如下對(duì)話框,文章來源:http://www.zghlxwxcb.cn/news/detail-401199.html
4.輸入數(shù)據(jù)源的名稱,一個(gè)簡(jiǎn)單的描述,用戶名和網(wǎng)絡(luò)連接名。點(diǎn)擊確認(rèn)。文章來源地址http://www.zghlxwxcb.cn/news/detail-401199.html
五、學(xué)生表創(chuàng)建
create table stu(
sno char(11) ,
sname varchar2(10),
sex char(2),
sage number,
sdepart varchar2(30)
);
到了這里,關(guān)于ODBC連接數(shù)據(jù)庫(kù)詳細(xì)說明的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!