第8章數(shù)據(jù)庫(kù)編程(2)_第1頁(yè)
第8章數(shù)據(jù)庫(kù)編程(2)_第2頁(yè)
第8章數(shù)據(jù)庫(kù)編程(2)_第3頁(yè)
第8章數(shù)據(jù)庫(kù)編程(2)_第4頁(yè)
第8章數(shù)據(jù)庫(kù)編程(2)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1/16數(shù)據(jù)庫(kù)原理及應(yīng)用數(shù)據(jù)庫(kù)原理及應(yīng)用Principle and Application of Database第八章數(shù)據(jù)庫(kù)編程第八章數(shù)據(jù)庫(kù)編程( (續(xù)續(xù)) )2/16掌握掌握ODBC的工作原理的工作原理理解理解ODBC API基礎(chǔ)基礎(chǔ)掌握掌握ODBC的工作流程的工作流程熟練掌握熟練掌握ODBC編程實(shí)例編程實(shí)例3/16數(shù)據(jù)庫(kù)互連概述:數(shù)據(jù)庫(kù)互連概述:應(yīng)用程序需要共享多個(gè)部門的數(shù)據(jù)資源,訪應(yīng)用程序需要共享多個(gè)部門的數(shù)據(jù)資源,訪問不同的問不同的RDBMS,盡管這些,盡管這些RDBMS均遵循均遵循SQL標(biāo)準(zhǔn),但它標(biāo)準(zhǔn),但它們還存在著許多差異。為了能使數(shù)據(jù)庫(kù)系統(tǒng)開放和互連,微軟們還存在著許多差異。為

2、了能使數(shù)據(jù)庫(kù)系統(tǒng)開放和互連,微軟推出了推出了ODBC(Open DataBase Connectivity) ,它建立了一,它建立了一組規(guī)范,并提供了一組訪問數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)組規(guī)范,并提供了一組訪問數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)API。ODBC工作原理概述:工作原理概述:使用使用ODBC開發(fā)應(yīng)用系統(tǒng),體系結(jié)構(gòu)由開發(fā)應(yīng)用系統(tǒng),體系結(jié)構(gòu)由四個(gè)部分構(gòu)成。四個(gè)部分構(gòu)成。4/16應(yīng)用程序:應(yīng)用程序:提供用戶界面、應(yīng)用邏輯和事務(wù)邏輯,使用提供用戶界面、應(yīng)用邏輯和事務(wù)邏輯,使用ODBC API調(diào)用接口與數(shù)據(jù)庫(kù)進(jìn)行交互,內(nèi)容有:調(diào)用接口與數(shù)據(jù)庫(kù)進(jìn)行交互,內(nèi)容有:請(qǐng)求連接數(shù)據(jù)庫(kù);請(qǐng)求連接數(shù)據(jù)庫(kù);向數(shù)據(jù)源發(fā)送向數(shù)據(jù)源發(fā)送SQL語(yǔ)句;語(yǔ)

3、句;為為SQL語(yǔ)句執(zhí)行結(jié)果分配存儲(chǔ)空間,定義所讀取的數(shù)據(jù)格式;語(yǔ)句執(zhí)行結(jié)果分配存儲(chǔ)空間,定義所讀取的數(shù)據(jù)格式;進(jìn)行數(shù)據(jù)處理并向用戶提交處理結(jié)果;進(jìn)行數(shù)據(jù)處理并向用戶提交處理結(jié)果;請(qǐng)求事務(wù)的提交和回滾操作;請(qǐng)求事務(wù)的提交和回滾操作;斷開與數(shù)據(jù)源的連接。斷開與數(shù)據(jù)源的連接。驅(qū)動(dòng)程序管理器:驅(qū)動(dòng)程序管理器:用來(lái)管理各種驅(qū)動(dòng)程序,主要功能包括裝載用來(lái)管理各種驅(qū)動(dòng)程序,主要功能包括裝載ODBC驅(qū)動(dòng)程序、選擇和連接正確的驅(qū)動(dòng)程序、管理數(shù)據(jù)源、驅(qū)動(dòng)程序、選擇和連接正確的驅(qū)動(dòng)程序、管理數(shù)據(jù)源、檢查檢查ODBC調(diào)用參數(shù)的合法性及記錄調(diào)用參數(shù)的合法性及記錄ODBC函數(shù)的調(diào)用等,當(dāng)函數(shù)的調(diào)用等,當(dāng)應(yīng)用程序需要時(shí)返回

4、驅(qū)動(dòng)程序的有關(guān)信息。應(yīng)用程序需要時(shí)返回驅(qū)動(dòng)程序的有關(guān)信息。5/16驅(qū)動(dòng)程序:驅(qū)動(dòng)程序:提供應(yīng)用系統(tǒng)與數(shù)據(jù)庫(kù)平臺(tái)的獨(dú)立性。應(yīng)用程序不提供應(yīng)用系統(tǒng)與數(shù)據(jù)庫(kù)平臺(tái)的獨(dú)立性。應(yīng)用程序不能直接存取數(shù)據(jù)庫(kù),其各種操作請(qǐng)求由驅(qū)動(dòng)程序管理器提交給能直接存取數(shù)據(jù)庫(kù),其各種操作請(qǐng)求由驅(qū)動(dòng)程序管理器提交給某個(gè)驅(qū)動(dòng)程序,通過調(diào)用驅(qū)動(dòng)程序所支持的函數(shù)來(lái)存取數(shù)據(jù)庫(kù)某個(gè)驅(qū)動(dòng)程序,通過調(diào)用驅(qū)動(dòng)程序所支持的函數(shù)來(lái)存取數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的操作結(jié)果也通過驅(qū)動(dòng)程序返回給應(yīng)用程序。若應(yīng)用,數(shù)據(jù)庫(kù)的操作結(jié)果也通過驅(qū)動(dòng)程序返回給應(yīng)用程序。若應(yīng)用程序要操縱不同的數(shù)據(jù)庫(kù),就要?jiǎng)討B(tài)地鏈接不同的驅(qū)動(dòng)程序。程序要操縱不同的數(shù)據(jù)庫(kù),就要?jiǎng)討B(tài)地鏈接不同的驅(qū)動(dòng)

5、程序。數(shù)據(jù)源:數(shù)據(jù)源:是用戶最終訪問的數(shù)據(jù),包含了數(shù)據(jù)庫(kù)位置和數(shù)據(jù)庫(kù)是用戶最終訪問的數(shù)據(jù),包含了數(shù)據(jù)庫(kù)位置和數(shù)據(jù)庫(kù)類型等信息,實(shí)際上是一種數(shù)據(jù)連接的抽象。類型等信息,實(shí)際上是一種數(shù)據(jù)連接的抽象。ODBC給每個(gè)被給每個(gè)被訪問的數(shù)據(jù)源指定惟一的數(shù)據(jù)源名訪問的數(shù)據(jù)源指定惟一的數(shù)據(jù)源名DSN(Data Source Name),它包含了用戶名、服務(wù)器名和所連接的數(shù)據(jù)庫(kù)名,用戶無(wú)需,它包含了用戶名、服務(wù)器名和所連接的數(shù)據(jù)庫(kù)名,用戶無(wú)需知道知道DBMS、網(wǎng)絡(luò)以及有關(guān)、網(wǎng)絡(luò)以及有關(guān)ODBC驅(qū)動(dòng)程序的細(xì)節(jié),數(shù)據(jù)源對(duì)驅(qū)動(dòng)程序的細(xì)節(jié),數(shù)據(jù)源對(duì)用戶是透明的。用戶是透明的。示例:配置學(xué)生表示例:配置學(xué)生表Studen

6、t對(duì)應(yīng)的數(shù)據(jù)源對(duì)應(yīng)的數(shù)據(jù)源stu?;诨贠DBC的數(shù)據(jù)庫(kù)應(yīng)用本章不介紹,詳見第十三章。的數(shù)據(jù)庫(kù)應(yīng)用本章不介紹,詳見第十三章。6/16ODBC API基礎(chǔ):基礎(chǔ):各數(shù)據(jù)庫(kù)廠商的各數(shù)據(jù)庫(kù)廠商的ODBC應(yīng)用程序接口應(yīng)用程序接口(ODBC Application Interface)都要符合都要符合API和語(yǔ)法的一致性。和語(yǔ)法的一致性。函數(shù)概述:函數(shù)概述:ODBC3.0標(biāo)準(zhǔn)提供了標(biāo)準(zhǔn)提供了76個(gè)函數(shù)接口,大致分為:個(gè)函數(shù)接口,大致分為:分配和釋放環(huán)境句柄、連接句柄、語(yǔ)句句柄。分配和釋放環(huán)境句柄、連接句柄、語(yǔ)句句柄。連接函數(shù)連接函數(shù)(SQLConnect等等)。與信息相關(guān)的函數(shù)與信息相關(guān)的函數(shù)(SQL

7、GetData等等)。執(zhí)行相關(guān)函數(shù)執(zhí)行相關(guān)函數(shù)(SQLExecDirect等等)。句柄及其屬性:句柄及其屬性:句柄是一代表指針的句柄是一代表指針的32位整數(shù)值,位整數(shù)值,ODBC3.0中句柄分為環(huán)境句柄、連接句柄、語(yǔ)句句柄和描述符句柄。中句柄分為環(huán)境句柄、連接句柄、語(yǔ)句句柄和描述符句柄。環(huán)境句柄:環(huán)境句柄:每個(gè)每個(gè)ODBC應(yīng)用程序需要建立一個(gè)應(yīng)用程序需要建立一個(gè)ODBC環(huán)境,分環(huán)境,分配一個(gè)環(huán)境句柄,存取數(shù)據(jù)的全局性背景如環(huán)境狀態(tài)、當(dāng)前在配一個(gè)環(huán)境句柄,存取數(shù)據(jù)的全局性背景如環(huán)境狀態(tài)、當(dāng)前在環(huán)境句柄上分配的連接句柄。環(huán)境句柄上分配的連接句柄。7/16連接句柄:連接句柄:一個(gè)環(huán)境句柄可以建立多個(gè)

8、連接句柄,每個(gè)連接句一個(gè)環(huán)境句柄可以建立多個(gè)連接句柄,每個(gè)連接句柄實(shí)現(xiàn)與一個(gè)數(shù)據(jù)源之間的連接。柄實(shí)現(xiàn)與一個(gè)數(shù)據(jù)源之間的連接。語(yǔ)句句柄:語(yǔ)句句柄:在一個(gè)連接中可以建立多個(gè)語(yǔ)句句柄,它不僅是一在一個(gè)連接中可以建立多個(gè)語(yǔ)句句柄,它不僅是一個(gè)個(gè)SQL語(yǔ)句,還包括語(yǔ)句,還包括SQL語(yǔ)句產(chǎn)生的結(jié)果集以及相關(guān)的信息。語(yǔ)句產(chǎn)生的結(jié)果集以及相關(guān)的信息。描述符句柄:描述符句柄:描述描述SQL語(yǔ)句的參數(shù)、結(jié)果集列的元數(shù)據(jù)集合。語(yǔ)句的參數(shù)、結(jié)果集列的元數(shù)據(jù)集合。數(shù)據(jù)類型:數(shù)據(jù)類型:ODBC定義了兩套數(shù)據(jù)類型,即定義了兩套數(shù)據(jù)類型,即SQL數(shù)據(jù)類型和數(shù)據(jù)類型和C數(shù)據(jù)類型,前者用于數(shù)據(jù)源,后者用于應(yīng)用程序的數(shù)據(jù)類型,前者

9、用于數(shù)據(jù)源,后者用于應(yīng)用程序的C代碼。代碼。ODBC的工作流程的工作流程配置數(shù)據(jù)源:配置數(shù)據(jù)源:示例:將示例:將ss數(shù)據(jù)庫(kù)定義成一個(gè)系統(tǒng)數(shù)據(jù)源。數(shù)據(jù)庫(kù)定義成一個(gè)系統(tǒng)數(shù)據(jù)源。初始化環(huán)境:初始化環(huán)境:調(diào)用調(diào)用SQLAllocHandle函數(shù)分配環(huán)境句柄。函數(shù)分配環(huán)境句柄。建立連接:建立連接:調(diào)用調(diào)用SQLAllocHandle函數(shù)分配連接句柄,通過函數(shù)分配連接句柄,通過SQLConnect與數(shù)據(jù)源連接,其輸入?yún)?shù)為數(shù)據(jù)源名稱、用戶與數(shù)據(jù)源連接,其輸入?yún)?shù)為數(shù)據(jù)源名稱、用戶ID和口令。和口令。8/16分配語(yǔ)句句柄:分配語(yǔ)句句柄:在處理任何在處理任何SQL語(yǔ)句之前,首先通過調(diào)用函數(shù)語(yǔ)句之前,首先通過調(diào)

10、用函數(shù)SQLAllocHandle分配一個(gè)語(yǔ)句句柄。分配一個(gè)語(yǔ)句句柄。執(zhí)行執(zhí)行SQL語(yǔ)句:語(yǔ)句:程序處理程序處理SQL語(yǔ)句有預(yù)處理語(yǔ)句有預(yù)處理(SQLPrepare)和和直接執(zhí)行直接執(zhí)行(SQLExecDirect)兩種方式。兩種方式。結(jié)果集處理:結(jié)果集處理:ODBC使用游標(biāo)處理結(jié)果集的數(shù)據(jù),但其游標(biāo)的使用游標(biāo)處理結(jié)果集的數(shù)據(jù),但其游標(biāo)的打開方式不同于嵌入式打開方式不同于嵌入式SQL,前者不是顯式聲明而是由系統(tǒng)自,前者不是顯式聲明而是由系統(tǒng)自動(dòng)產(chǎn)生一個(gè)游標(biāo),結(jié)果集剛生成時(shí),游標(biāo)指向第一行數(shù)據(jù)之前動(dòng)產(chǎn)生一個(gè)游標(biāo),結(jié)果集剛生成時(shí),游標(biāo)指向第一行數(shù)據(jù)之前,應(yīng)用程序通過,應(yīng)用程序通過SQLBindCo

11、l函數(shù)把查詢結(jié)果綁定到應(yīng)用程序函數(shù)把查詢結(jié)果綁定到應(yīng)用程序的緩沖區(qū)中,通過的緩沖區(qū)中,通過SQLFetch移動(dòng)游標(biāo)獲取結(jié)果集中的每一行移動(dòng)游標(biāo)獲取結(jié)果集中的每一行數(shù)據(jù),當(dāng)緩沖區(qū)不足以容納所有數(shù)據(jù)時(shí),可通過數(shù)據(jù),當(dāng)緩沖區(qū)不足以容納所有數(shù)據(jù)時(shí),可通過SQLGetData分多次獲取。分多次獲取。終止處理:終止處理:處理結(jié)束后,應(yīng)用程序首先用處理結(jié)束后,應(yīng)用程序首先用SQLFreeHandle釋釋放語(yǔ)句句柄,然后用放語(yǔ)句句柄,然后用SQLDisconnect斷開數(shù)據(jù)庫(kù)連接,最后斷開數(shù)據(jù)庫(kù)連接,最后用用SQLFreeHandle依次釋放連接句柄和環(huán)境句柄。依次釋放連接句柄和環(huán)境句柄。9/16一個(gè)一個(gè)OD

12、BC編程實(shí)例:在編程實(shí)例:在C語(yǔ)言中通過語(yǔ)言中通過ODBC訪問訪問Student表。表。 #include #include #include #include #include #include #include #define MaxNameLen 8 int main() SQLHENV henv=SQL_NULL_HENV; /定義環(huán)境句柄定義環(huán)境句柄 SQLHDBC hdbc1=SQL_NULL_HDBC; /定義數(shù)據(jù)庫(kù)連接句柄定義數(shù)據(jù)庫(kù)連接句柄 SQLHSTMT hstmt1=SQL_NULL_HSTMT; /定義語(yǔ)句句柄定義語(yǔ)句句柄10/16 /SQLBindCol variab

13、les SQLCHAR nameMaxNameLen; SQLCHAR deptMaxNameLen; SQLINTEGER columnLen=0; /數(shù)據(jù)庫(kù)定義中該屬性列的長(zhǎng)度數(shù)據(jù)庫(kù)定義中該屬性列的長(zhǎng)度 RETCODE retcode; /錯(cuò)誤返回碼錯(cuò)誤返回碼 /Allocate the ODBC Environment and save handle retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv); if(retcode0) /錯(cuò)誤處理錯(cuò)誤處理 printf(allocate ODBC Environment handle er

14、rors.); return -1; /Notify ODBC this is an ODBC 3.0 application retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3,SQL_IS_INTEGER);11/16 /Execute an SQL statement directly on the statement handle retcode=SQLExecDirect(hstmt1,(SQLCHAR*)SELECT sname, sdept FROM student,SQL_NTS

15、); if(retcode0) printf(name=%s dept=%sn,name,dept); else printf(name=%s dept=NULLn,name,dept); #else while(1) retcode=SQLFetch(hstmt1); if(retcode=SQL_NO_DATA) break; retcode=SQLGetData(hstmt1,1,SQL_C_CHAR,name, MaxNameLen,&columnLen); retcode=SQLGetData(hstmt1,2,SQL_C_CHAR,dept, MaxNameLen,&columnLen); if(columnLen0) printf(name=%s dept=%sn,name,dept); else printf(name=%s dept=NULLn,name,dept); 13/16 #endif /*Clean up*/ SQLFreeHand

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論