




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、開放數據庫互聯(ODBC)Open DataBase Connectivity使用ODBC的目的l根本原因在于存在不同的DBMSEmbedded SQL只能基于特定的一個數據庫,適應性和移植性差難以同時訪問多個數據庫并實現多個數據庫相互操作l微軟于1995年推出ODBCODBC的基本原理(1)l單數據庫系統ODBC的基本原理(2)l多數據庫系統ODBC的基本原理(3)l標準的訪問方式類似打印機管理ODBC的基本原理(4)lODBC的體系結構ODBC的體系結構(1)l用戶的ODBC應用程序l驅動程序管理器(ODBC Driver Manager)微軟提供l數據庫驅動程序(ODBC Driver)
2、DBMS廠商提供l數據庫源(Data Source)ODBC的體系結構(2)l用戶的ODBC應用程序如何和數據庫交互ODBC API提供的接口函數SQLODBC的體系結構(3)l驅動程序管理器(ODBC Driver Manager)的主要作用管理應用程序和驅動程序的通信裝載、管理驅動程序管理和配置數據源l負責的主要文件C:winntsystem32odbc32.dllODBC的體系結構(4)l數據庫驅動程序(ODBC Driver)的作用對相應的數據源進行各種操作l數據庫驅動程序(ODBC Driver)的調用方式以動態鏈接庫形式(*.DLL)存在由應用程序命令裝載,由驅動程序管理器負責裝載
3、ODBC的體系結構(5)l數據源管理數據源名(Data Source Name)l對應著一個具體數據庫的連接l包括了服務器名、驅動程序、數據庫名等信息使用ODBC的第一步是首先要建立數據源名添加數據源(1)l 如何打開 ODBC 數據源管理器 在 Windows XP Professional 中打開 ODBC 數據源管理器l在“開始”菜單中,單擊“控制面板”.l在“控制面板”(“分類視圖”)中,單擊“性能和維護”,再單擊“管理工具”,或者在“控制面板”(“經典視圖”)中,單擊“管理工具”.l在“管理工具”中,單擊“數據源(ODBC)” 在 Windows 7 中打開 ODBC 數據源管理器l
4、在“開始”菜單中,單擊“控制面板”.l在“控制面板”(“分類視圖”)中,單擊“系統和安全”,再單擊“管理工具”.l在“管理工具”中,單擊“數據源(ODBC)”添加數據源(2)l系統DSN和用戶DSN區別l不同DBMS驅動程序的設置并不相同,由DBMS自身提供ODBC API(1)l理論上,為了互操作,所有DBMS提供的ODBC調用函數和SQL語句應該完全一致?不可能l驅動程序的一致性級別((Conformance Levels)API一致性:核心級、擴展1級、擴展2級語法一致性:最低限度SQL語法級、核心SQL語法級、擴展SQL語法級ODBC API(3)lODBC標準數據類型以“SQL_”開
5、頭,大寫SQL_CHAR、 SQL_DECIMAL 、 SQL_INTEGER 、 SQL_FLOAT 、 SQL_VARCHAR 、 SQL_BIT等由DBMS的驅動程序完成自身數據類型和ODBC標準數據類型的映射ODBC API(4)lODBC應用程序流程初始化階段l分配環境句柄l分配連接句柄在分配連接句柄前,最好先設置環境句柄所用的ODBC參數l建立連接 l分配語句句柄程序主體結束部分l釋放語句句柄 l斷開數據源連接l釋放連接句柄 l釋放環境句柄ODBC API(4)什么是句柄l指向一段數據結構的指針(地址)指向一段數據結構的指針(地址)l為什么要用句柄為什么要用句柄ODBC應用程序有自
6、己的運行環境,通過環境句應用程序有自己的運行環境,通過環境句柄獲得柄獲得一個環境句柄下可以建立多個連接句柄,一個連一個環境句柄下可以建立多個連接句柄,一個連接句柄對應著一個數據源連接接句柄對應著一個數據源連接一個連接中可以建立多個語句句柄一個連接中可以建立多個語句句柄ODBC API(4)什么是句柄l指向一段數據結構的指針(地址)指向一段數據結構的指針(地址)l為什么要用句柄為什么要用句柄ODBC應用程序有自己的運行環境,通過通過環應用程序有自己的運行環境,通過通過環境句柄獲得境句柄獲得一個環境句柄下可以建立多個連接句柄,一個連一個環境句柄下可以建立多個連接句柄,一個連接句柄對應著一個數據源連
7、接接句柄對應著一個數據源連接一個連接中可以建立多個語句句柄一個連接中可以建立多個語句句柄ODBC應用應用程序程序環境句柄環境句柄連接句柄連接句柄數據源數據源語句句柄語句句柄描述描述111n1n111nODBC API(5)l 申請句柄:申請句柄:lSQLRETURN SQLAllocHandle(SQLRETURN SQLAllocHandle(HandleTypeHandleType, InputHandleInputHandle,OutputHandlePtrOutputHandlePtr); ); HandleType 是一個常數,定義了希望分配的句柄是一個常數,定義了希望分配的句柄類型
8、類型.可能值如下可能值如下:lSQL_HANDLE_ENV 環境句柄環境句柄(Environment handle)lSQL_HANDLE_DBC 連接句柄連接句柄(Connection handle)lSQL_HANDLE_STMT 語句句柄語句句柄(Statement handle)lSQL_HANDLE_DESC 描述符句柄描述符句柄(Descriptor handle) 描述符是一個數據集合描述了描述符是一個數據集合描述了SQL語句參數或結果集列的元數據語句參數或結果集列的元數據集合集合ODBC API(6)InputHandle 是指向父是指向父“文本文本”的句柄的句柄.環境環境句柄
9、的是句柄的是SQL_NULL_HANDLE或或NULL。OutputHandlePtr 如果調用成功,將指向一個雙字,其中包含了被分配的句柄.返回值返回值如下:lSQL_SUCCESS 函數成功完成.lSQL_SUCCESS_WITH_INFO 函數成功完成,但帶回非致命錯誤或警告.lSQL_ERROR 函數調用失敗.lSQL_INVALID_HANDLE 傳送給函數的句柄非法.ODBC API(6)SQLAllocHandlel retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&hEnv);l SQLSetEnvAttr(henv, SQL_AT
10、TR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);l /將ODBC設置成為版本3,否則某些ODBC API 函不能被支持。l retcode= SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hDBC);l retcode= SQLAllocHandle(SQL_HANDLE_STMT,hDBC,&hSTMT);ODBC API(7)l 連接數據庫:連接數據庫:l SQLRETURN SQLConnect( SQLHDBC ConnectionHandle, SQLCHAR * Serv
11、erName, SQLSMALLINT NameLength1, SQLCHAR * UserName, SQLSMALLINT NameLength2, SQLCHAR * Authentication, SQLSMALLINT NameLength3);ConnectionHanlde:為DBC句柄,即SQLAllocHandle(SQL_HANDLE_DBC,hDBC,&hDBC);申請的句柄。ServerName:為ODBC的DSN名稱。NameLength1:指明參數ServerName數據的長度。ODBC API(8) UserName:數據庫用戶名。 NameLength
12、2:指明參數UserName數據的長度。 Authentication:數據庫用戶密碼。 NameLength3:指明參數Authentication數據的長度。 關于ServerName,UserName,Authentication參數長度可以直接指定也可以指定為SQL_NTS表明參數是以NULL字符結尾,由系統自動計算。l 例如:retcode = SQLConnect(hdbc, (SQLCHAR*) odbc_demo, SQL_NTS,(SQLCHAR*) user, SQL_NTS, (SQLCHAR*) password, SQL_NTS);ODBC API(9)l執行SQL命
13、令的兩種方式直接執行方式lSQLExecdirectlSQLBindCollSQLFetch預處理-執行方式lSQLPreparelSQLBindParameterlSQLExecute預處理-執行方式適用于SQL語句中含有參數的情況,或大批量多次執行的情況ODBC API(9)-SQLExedirectl 直接執行SQL語句l SQLRETURN SQLExecDirect( SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength);StatementHandle:SQL語句句柄,即SQLAllocHa
14、ndle(SQL_HANDLE_STMT,hDBC,&hSTMT);申請的句柄。StatementText:SQL語句。TextLength:參數StatementText的長度,可以使用SQL_NTS表示由系統自動計算。l 如果函數執行成功,你將會得到一個結果集,否則將返回錯誤信息ODBC API(9)-SQLBindColl 利用列綁定的方式在從結果集中讀取字段值l SQLRETURN SQLBindCol( SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER
15、 TargetValuePtr, SQLINTEGER BufferLength, SQLLEN * StrLen_or_Ind);ODBC API(9)-SQLBindColl StatementHandle:STMT句柄。l ColumnNumber:列的位置,從1開始計算。l ValueType:指明用于和參數綁定的C語言數據類型。l ParameterType:指明在存儲過程中ODBC數據類型。l BufferLength:指明參數指針所指向的緩沖區的字節數大小。對于字符串和結構需要指明大小,而對于普通的變量如SQLINTEGER,SQLFLOAT等設置為0就可以了。l StrLen_
16、or_IndPtr:返回拷貝的緩沖區的數據的字節數,數值型數據為0,字符型數據為SQL_NTS。ODBCAPI(9)-SQLGetDatal 得到當前記錄的對應列值l SQLRETURN SQLGetData( SQLHSTMT StatementHandle, SQLUSMALLINT ColumnNumber, SQLSMALLINT TargetType, SQLPOINTER TargetValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StrLen_or_IndPtr);l SQLGetData和SQLBindCol的區別后者在fetch
17、后不必再次執行,而前者要在循環中多次執行ODBC API(9)-SQLFetchl 推進指向結果集的指針移動SQLRETURN SQLFetch(SQLHSTMT StatementHandle);l 光標前后移動SQLRETURN SQLFetchScroll( SQLHSTMT StatementHandle, SQLSMALLINT FetchOrientation, SQLINTEGER FetchOffset);lFetchOrientation 的值:SQL_FETCH_NEXT, SQL_FETCH_PRIOR, SQL_FETCH_FIRST,SQL_FETCH_LAST, S
18、QL_FETCH_ABSOLUTE, SQL_FETCH_RELATIVEODBC API(9)- SQLPreparel預編譯帶有參數的SQL語句lSQLRETURN SQLPrepare(SQLHSTMT StatementHandle,SQLCHAR * StatementText,SQLINTEGER TextLength);StatementHandle:STMT句柄。StatementText:包含SQL語句的字符串。TextLength:SQL語句的長度,或者使用SQL_NTS。ODBC API(9)- SQLExecutel執行預處理過的SQL語句lSQLRETURN SQLE
19、xecute(SQLHSTMT StatementHandle);StatementHandle必須是已經預處理過的語句句柄ODBC API(9)- SQLBindParameterl SQLRETURN SQLBindParameter( SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT InputOutputType, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLUINTEGER ColumnSize, SQLSMALLINT DecimalD
20、igits, SQLPOINTER ParameterValuePtr, SQLINTEGER BufferLength, SQLINTEGER * StrLen_or_IndPtr);ODBC API(9)- SQLBindParameterlStatementHandle:執行SQL語句STMT句柄。lParameterNumber:指明要將變量與第幾個參數綁定,從1開始計算。lInputOutputType:指明是輸入還是輸出參數。可以取值的范圍為:SQL_PARAM_INPUT,SQL_PARAM_OUTPUT ,SQL_PARAM_INPUT_OUTPUT。lValueType:指明用于和參數綁定的C語言數據類型。lParameterType:指明在存儲過程中ODBC數據類型。lColumnSize:指明接收數據的寬度,對于字符串和結構需要指明數據的寬度,而對于普通的變量如SQLINTEGER,SQLFLOAT等設置為0就可以了。lDecimalDigits :當數據類型為SQL_NUMERIC,SQL_DECIMAL時指明數字小數點的精度,否則填0。lParameterValuePtr:在作為輸入參數指明參數的指針,在作為輸出參數時指明接收數據的變量指針。lBufferLength:指明參數指針所指向的緩
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 區塊鏈在金融交易透明化中的作用
- 物聯網APP開發與集成-全面剖析
- 區塊鏈在智能制造中的革新之路
- 音樂創作與教育融合探索-全面剖析
- 區塊鏈在保護企業核心機密中的應用研究
- 人工智能助力公共衛生體系建設與完善
- 供應鏈管理在醫療領域的應用與挑戰
- 醫療信息化建設的商業模式與創新
- 中班教育質量提升工作計劃
- 醫療信息化建設的科技支撐與創新驅動
- T-CAS 947-2024 類器官在化學品毒性測試中的應用規范
- 清理泥石流堆積體施工方案
- GB/T 45214-2025人全基因組高通量測序數據質量評價方法
- 2025年住建部建筑工程合同范文與指導性范本
- 鄭州食品工程職業學院《中國宗教史》2023-2024學年第一學期期末試卷
- 《中醫養生保健服務(非醫療)技術操作規范 刮痧》
- 洛必 達法則課件
- 水利工程冬季低溫施工方案
- DB41∕T 2572-2023 古籍保護管理規范
- 足療養生門店禮儀培訓
- 2023年國網浙江省電力有限公司招聘考試真題
評論
0/150
提交評論