版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、達夢接口編程實例一一ODBC篇ODBQOpen Database Connectibvity )是被人們廣泛接受的用于數據庫訪問的標準API (應用程序編程接口)。對于數據庫 API,它以X/Open和ISO/IEC的Call-LevelInterface(CLI) 規(guī)范為基礎,并使用結構化查詢語言(SQL作為其數據庫訪問語言。結構化查詢語言SQL是一種用來訪問數據庫的語言。通過使用ODBC應用程序能夠使用相同的源代碼和各種各樣的數據庫交互。這使得開發(fā)者不需要以特殊的數據庫管理系統DBMS目標,或者了解不同支撐背景的數據庫的詳細細節(jié),就能夠開發(fā)和發(fā)布客戶/服務器應用程序。達夢數據庫(DM DA
2、TABASE以下簡稱 DM的 DM ODBC 3.0遵照 Microsoft ODBC 3.0 規(guī)范設計 與開發(fā),實現了 ODBCS用程序與 DM的互連接口。用戶可以直接調用 DMODBC3.0接口函數訪問DM 也可以使用可視化編程工具如 Visual C+、C+ Builder、PowerBuilder 等利用DM ODBC 3.0訪問 DM本文中以武漢達夢數據庫公司的DMODBC3.0驅動程序為實例,以Visual C+為工具,在Windows2000 Professio nal操作系統上,用一個實例來介紹DM ODBC勺編程方法。1創(chuàng)建DM ODB(數據源在DM客戶端軟件安裝過程中,如果
3、選擇了安裝ODB動程序的相關選項,安裝工具可完成將DM ODBC 3.0驅動程序復制到硬盤,并在Win dows注冊表中登記 DM ODBC區(qū)動程序信息的工作。在使用DM ODB(方法訪問一個DM數據庫服務器之前,必須先對自己的應用程序所用的ODBC資源進行配置。在客戶機上配置DM ODB(資源的步驟如下:1.1依次打開控制面板-管理工具-數據源(ODBC)顯示ODBC數據源管理器對話框,如圖1.1.1所示。圖1.1.1 ODBC數據源管理器對話框1.2設置和配置一個系統 DSN請單擊系統 DSN標簽,單擊添加按鈕增加一個新的DSN顯示如圖1.1.2所示的對話框。2d創(chuàng)建番數雰源名稱iliM
4、oweDRTVEROrODBC Driver SQL Server選擇您:揑為苴安裝數據誘的馳動稈序迄)O版本1. 00.0i0.018.01.06.00Z000. ai.9030.04公司 華工達夢螯 Ortel CoMicroioft襯I11上一完成 | 取消 |圖1.1.2創(chuàng)建新數據源對話框1.3選擇DM ODBC 3.0驅動程序,即 DM ODBC DRIVER單擊完成按鈕,顯示如圖1.1.3所示的DM ODBC 3.0數據源配置對話框。圖1.1.3創(chuàng)建新的DM數據源對話框1.4輸入數據源的名稱,一個簡單的描述,并選擇你想要連接的數據庫服務器的名字,使用的 端口號,缺省使用的DB,驗證
5、登錄用戶ID真?zhèn)蔚姆绞?,如果使?DM Server驗證方式則需要輸入登錄數據源的ID以及密碼等信息,選擇系統提示信息的語種,以及選擇是否使用 選項。1.5單擊測試按鈕測試你配置的數據源是否正確,得到數據源測試報告如圖DMServer的增強1.1.4所示,如果測試成功,可以單擊確定按鈕以保存你設置的新的系統數據源,如圖1.1.5所示。圖3.1.4數據源測試報告圖3.1.5完成系統數據源的設置1.6單擊確定按鈕關閉 ODB(數據源管理器對話框。2、DM ODBC應用程序編寫的基本步驟使用DM ODB編程的基本步驟如圖 2.1所示。圖2.1直接使用DM ODB(函數開發(fā)應用程序的基本步驟2.1 申
6、請環(huán)境與連接句柄客戶程序要和一個遠程的服務器或數據庫進行通訊, 必須首先和這個服務器或數據庫建立連接,如何通過ODBC!立一個連接以及使用連接呢?是我們下面將要介紹的內容。為了建立一個ODB(數據源連接,需要使用到環(huán)境句柄以及連接句柄。句柄有一個層次的概念, 一個連接句柄總是和一個唯一的環(huán)境句柄相聯系的, 所有的連接句柄必須在環(huán)境句柄釋放之前釋放。 客戶程序可以通過調用函數 SQLAllocHandle 來申請一個環(huán)境句柄,調用函數 SQLAllocHandle 時必 須傳入句柄選項 SQL_HANDLE_EN當申請環(huán)境句柄成功之后,可以在此環(huán)境句柄上申請連接句柄。申請環(huán)境句柄和連接句柄的代碼
7、示范如下:#include #include #include #include /*檢測返回代碼是否為成功標志,當為成功標志返回TRUE否則返回FALSE */#define RC_SUCCESSFUL(rc) (rc) = SQL_SUCCESS | (rc) = SQL_SUCCESS_WITH_INFO)/*檢測返回代碼是否為失敗標志,當為失敗標志返回TRUE否則返回FALSE */#define RC_NOTSUCCESSFUL(rc) (!(RC_SUCCESSFUL(rc)HENVhenv;/*環(huán)境句柄*/HDBChdbc;/*連接句柄*/SQLRETURNsret;/*返回代碼
8、*/void main(void)/* 申請一個環(huán)境句柄 */SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);/* 申請一個連接句柄 */SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); 2.2聲明應用程序的 ODBC版本在應用程序分配連接之前,必須先設置SQL_ATTR_ODBC_VERSI環(huán)境屬性。這個屬性說明應用程序是遵循 ODBC 2.x還是ODBC 3.x規(guī)范。設置環(huán)境句柄的 ODBC版本屬性的代碼范例如下:HENV henv; /* 環(huán)境句柄 */SQLSetEnvAttr(henv,SQL_ATTR_
9、ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);2.3 連接數據源或驅動程序ODBC的連接是從數據源開始的,數據源是ODBC對一個特定的數據庫的別稱。為了訪問由數據源提供的數據,你的程序中必須首先建立和數據源之間的連接,在環(huán)境和連接句柄正確分配之后, 才能通過這些連接管理數據訪問。連接 ODBC數據源時,ODBC提供三種不同的連接函數,即SQLConnec、SQLDriverConnect 和SQLBrowseConnec,t 每個函數都有不同的參數以及不同級別的一致性。SQLConnect是連接ODBC數據源的最基本的方法,在所有
10、的一致性級別上都支持。SQLConnect函數有以下參數:連接句柄,數據源名稱,數據源名稱長度,用戶名(用戶ID),用戶名長度,用戶口令以及口令長度。返回代碼有:SQL_SUCCE,SSQL_SUCCESS_WITH_I,NFSOQL_ERROR或者SQL_INVALID_HANDLE使用SQLConnect函數連接數據源的代碼示范如下:HDBC hdbc; /* 連接句柄 */sret = SQLConnect(hdbc, (SQLCHAR *)DM4, SQL_NTS, (SQLCHAR*)SYSDBA, SQL_NTS, (SQLCHAR *)SYSDBA, SQL_NTS);if (R
11、C_NOTSUCCESSFUL(sret) /* 連接數據源失敗 ! */進行相應的錯誤處理exit(0);SQLDriverConnect提供了比SQLConnect更靈活的方法來建立 ODBC連接。它支持:要求更多連 接參數的數據源;對話框提示用戶輸入所有的連接信息;以及沒有在系統信息表中定義的數據源。SQLDriverConnect 提供以下的連接方法:(1) 用一個連接字符串建立一個連接,這個字符串包括建立連接的所有數據,如DSN 一個或 多個用戶 ID 及其口令,以及其他的數據庫所需要的連接信息。(2) 用一個并不完整的連接字符串來建立連接,使得ODBC驅動程序管理器來提示用戶輸入所
12、 需要的連接信息。(3) 用一個沒有在系統信息表中登記的數據源建立連接,驅動程序自動提示用戶輸入連接信息。(4) 用一個連接字符串建立連接,這個字符串在DSN配置文件中是確定的。SQLDriverConnect 函數 fDriverCompletion 參數說明:(1) SQL_DRIVER_PROM設置此選項用來顯示一個對話框來提示用戶輸入連接信息。(2) SQL_DRIVER_COMPLE如果函數調用中包含了足夠的信息,ODBC 就進行連接,否則彈出對話框提示用戶輸入連接信息,此時等同于SQL_DRIVER_PROMPT(3) SQL_DRIVER_COMPLETE_REQUIR這個參數與
13、 SQL_DRIVER_COMPLE參數唯一的不同是用 戶不能改變由函數提供的信息。(4) SQL_DRIVER_NOPROM如果函數調用時有足夠的信息, ODBC就進行連接,否則返回 SQL_ERROR使用 SQLDriverConnect 連接數據源的代碼示范如下:HDBC hdbc;/* 連接句柄 */SQLCHARszConnStrIn256=DSN=DM4;DRIVER=DMODBCDRIVER;DATABASE=SYSTEM;UID=SYSDBA;PWD=SYSDBA;SQLCHAR szConnStrOut256;SQLSMALLINT cbConnStrOut;sret = S
14、QLDriverConnect(hdbc, hwnd, szConnStrIn, SQL_NTS, szConnStrOut, 256, &cbConnStrOut, SQL_DRIVER_PROMT);if (RC_NOTSUCCESSFUL(sret) /* 連接數據源失敗 ! */進行相應的錯誤處理 exit(0);SQLBrowseCo nnect 函數時,SQLBrowseConnect 函數與 SQLDriverConnect 函數相似,但是調用 程序在運行時可以再形成一個連接字符串,使用這個函數可以用一個交互的方式來決定連接到數據 源時所需要的一些信息。使用 SQLBrowseC
15、onnect 函數連接數據源的代碼示范如下:HDBC hdbc;/* 連接句柄 */SQLCHARszConnStrIn256=DRIVER;DATABASE=SYSTEM;UID=SYSDBA;PWD=SYSDBA;SQLCHAR szConnStrOut256;SQLSMALLINT cbConnStrOut;sret = SQLBrowseConnect(hdbc, szConnStrIn, &cbConnStrOut);if (RC_NOTSUCCESSFUL(sret) /* 連接數據源失敗 ! */進行相應的錯誤處理exit(0);DSN=DM4;DRIVER=DMSQL_NTS,
16、 szConnStrOut,ODBC256,2.4 設置與取得連接的屬性建立連接之后,應用程序可以通過調用 SQLSetConnectAttr 全方面的管理。具體的連接屬性,用戶可以參考 DM程序員手冊 可以通過調用 SQLGetConnectAttr 函數來取得當前連接的屬性。設置與取得連接屬性的代碼示范如下:函數來設置連接屬性,對連接進行,在這里不做介紹了。應用程序HDBC hdbc; /* 連接句柄 */ SQLINTEGER AUTOCOMMIT_MODE; /* 設置連接句柄屬性,關閉自動提交功能 SQLSetConnectAttr(hdbc, (SQLPOINTER)SQL_AUT
17、OCOMMIT_OFF,SQL_IS_INTEGER);/* 取得連接句柄屬性,取得提交的模式 */ SQLGetConnectAttr(hdbc, (SQLPOINTER)&AUTOCOMMIT_MODE,sizeof(SQLINTEGER), NULL);*/SQL_ATTR_AUTOCOMMIT,SQL_ATTR_AUTOCOMMIT,2.5 分配和設置語句句柄ODBC應用程序通過執(zhí)行 SQL語句完成它們幾乎所有的數據庫訪問。在應用程序執(zhí)行語句之前, 它必須要先分配語句句柄。分配語句句柄的范例代碼如下:HSTMT hsmt; /* 語句句柄 */SQLAllocHandle(SQL_HA
18、NDLE_STMT, hdbc, &hsmt);語句屬性就是語句的特征。 例如,是否使用書簽和對語句的結果集使用哪種游標就是語句屬性。 語句屬性用 SQLSetStmtAttr 設置,且它們的當前設置用 SQLGetStmtAttr 檢索。對于應用程序設置 任何屬性沒有什么要求;所有語句屬性都有缺省,其中一些是驅動程序指定的。2.6 執(zhí)行語句執(zhí)行語句有四種方法 (直接執(zhí)行、準備執(zhí)行、過程、編目函數 ) ,這取決于數據庫引擎編譯準備 它們的時間及誰定義它們。直接執(zhí)行是執(zhí)行語句最簡單的方法。直接執(zhí)行常常為在運行時建立和執(zhí)行語句的普通應用程序 所執(zhí)行。直接執(zhí)行的范例代碼如下:HSTMT hsmt;
19、/* 語句句柄 */SQLExecDirect(hsmt,(SQLCHAR*)CREATE TABLE TEST_TABLE(COL0 INT,COL1 CHAR(10); ,SQL_NTS);準備執(zhí)行是多次執(zhí)行一條語句的有效途徑。語句首先被編譯或準備成一個訪問計劃。接著,在 以后的時間里,該訪問計劃將一次或多次執(zhí)行。準備執(zhí)行的范例代碼如下 :HSTMT hsmt; /* 語句句柄 */SQLPrepare(hsmt,(SQLCHAR*)CREATE TABLE TEST_TABLE(COL0 INT,COL1 CHAR(10); ,SQL_NTS); /* 準備語句 */SQLExecute
20、(hsmt); /* 執(zhí)行語句 */過程是存儲在數據源上的可執(zhí)行對象。一般來說是已預先編譯好的一個或多個SQL語句。執(zhí)行過程的范例代碼如下:HSTMT hsmt; /* 語句句柄 */SQLExecDirect(hsmt,(SQLCHAR*) “create or replace procedure test_proc (c1 in int) ”a ”“as”“declare c2 int ”a .”“begin ”“c2 := c1 + 100 ”“end;”, SQL_NTS); /* 創(chuàng)建存儲過程 */SQLExecDirect(hsmt,(SQLCHAR*)”call test_pro
21、c(123);”,SQL_NTS); /* 調用存儲過程 */所有數據庫都有一個概括如何在本數據庫中保存數據的結構。這個結構連同其他信息,如權限 等,保存在一套叫做數據庫編目的系統表中,即數據字典( data dictionary ) 。應用程序可以通過 對編目函數的調用發(fā)現這個結構。 編目函數在結果集中返回信息, 并通常經過對編目中各表的 SELECT 語句來實施。執(zhí)行編目函數的范例代碼如下:HSTMT hsmt; /* 語句句柄 */*SQLProcedures(hsmt, “SYSTE”M ,SQL_NTS“, SYSDB”A ,SQL_NTS“, TEST_PRO”C,SQL_NTS)
22、此函數來獲取DM存儲過程與函數的字典信息*/SQLProcedureColumns(hsmt,“SYSTE”M ,SQL_NTS“, SYSDB”A ,SQL_NTS“, TEST_PRO”C,SQL_N TS,NULL,0) /* 返回存儲模塊的參數信息 */2.7 語句參數參數就是SQL語句中的變量。SQL語句中的每個參數在執(zhí)行該語句之前必須與應用程序中的變 量相關,即綁定。運用參數綁定的代碼范例如下:HSTMT hsmt;/*語句句柄 */char buf10;/* 此緩沖區(qū)用于存放參數數據 */longlen;/*此緩沖區(qū)用于存放參數長度 */SQLExecDirect(hsmt, (
23、SQLCHAR*)CREATETABLETEST_TABLE(COL0char(10), SQL_NTS); /* 創(chuàng)建表 */SQLPrepare(hsmt, (SQLCHAR*)INSERT INTO TEST_TABLE(COL0)VALUES(?), SQL_NTS); /* 準 備插入數據 */SQLBindParameter(hsmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,10,0,buf,10,&len); /* 綁定參數 */memset(buf,A,10);len = SQL_NTS;SQLExecute(hsmt); /* 執(zhí)行語句 *
24、/2.8 綁定結果集和獲得數據從數據源上獲取的數據返回到應用程序中為此而分配的變量中。在這些完成之前,應用程序必 須為結果集中的列關聯或綁定這些變量。應用程序調用SQLBindCol 綁定列,這個函數每次綁定一列。從結果集中檢索行并將它們返回給應用程序的過程叫獲取,應用程序用游標(cursor)來獲取數據。為獲取一行數據,應用程序可調用SQLFetch。SQLFetch能夠以任何形式的游標調用SQLFetch,但它只能在向前的方向上移動行集游標。而使用 SQLFetchScroll 從結果集合中取指定行集的數據并返 回所有被綁定列的數據。行集可以按絕對或相對位置或按書簽來指定。HSTMThsm
25、t;/* 語句句柄 */charszcode6;/*廠商編號 */longcbcode = 0;charszname21; /*廠商名 */longcbname = 0;charszasset13;/* 資產總值 */longcbasset = 0;charszaddress11;/*廠商地址 */longcbaddress = 0;SQLExecDirect(hsmt, (SQLCHAF*)SELECT廠商編號,廠商名,資產總值,廠商地址FROM廠 商登記;, SQL_NTS);/* 綁定數據緩沖區(qū) */SQLBindCol(hsmt, 1, SQL_C_CHAR, szcode, sizeof(szcode), &cbcode);SQLBindCol(hsmt, 2, SQL_C_CHAR, szname, sizeof(szname), &cbname);SQLBindCol(hsmt, 3, SQL_C_CHAR, szasset, sizeof(szasset), &cbasset);SQLBindCol(hsm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 推進綠色綜合醫(yī)院建設的工作計劃
- 主管年度工作計劃的核心工作項
- 戰(zhàn)略投資風險評估計劃
- 股票交易撮合協議三篇
- 生產操作標準化與規(guī)范化計劃
- 提升工作效率的個人目標設定計劃
- 2024行政前臺接待禮儀培訓
- 河北省部分學校2024-2025學年高三上學期11月階段調研檢測二 英語 含解析
- 金華十校2024年11月高三模擬考試(一模)數學試卷(含標準答案)
- 聽力教程1 Unit2英語
- 血栓風險評估及個體化干預(遺傳性易栓癥風險基因檢測)
- 課題-初中數學作業(yè)優(yōu)化設計的研究研究報告及課題研究報告
- 多抓魚的分析報告
- 《新生兒顱內出血》課件
- 《汽車喇叭電路》課件
- 教師二次成長論-教師專業(yè)發(fā)展路徑及要領
- 婚博會活動方案
- 《軟件項目質量管理》課件
- 《清潔能源的應用》課件
- 《人大復印資料》課件
- 2024年西南油氣田分公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論