| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> c/c++ >> 在C++中的ODBC API數據庫編程
 

在C++中的ODBC API數據庫編程

2008-06-01 02:07:47  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  一、動態加載數據源

  1、通過修改注冊表加載數據源:

  ·用戶數據源:HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI

  ·系統數據源:HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI

  對于不同類型的數據源,注冊表的修改也不同,但基本上要修改兩個地方,一個是在ODBC.INI子鍵下建立一個與數據源描述名同名的子鍵,並在該子鍵下建立與數據源配置相關的項;另一個是在\ODBC.INI\ODBC Data Sources子鍵下建立一個新項以便告訴驅動程序治理器ODBC數據源的類型。

  2、通過ODBC API加載:Windows系統子目錄下的動態鏈接庫Odbcinst.dll提供了一個可以動態增加、修改和刪除數據源的函數SQLConfigDataSource,由于VC的默認庫文件中不包含此函數,因此使用前需將Odbcinst.h文件包含在工程的頭文件中,在工程的setting屬性框Link頁的Object/library module編輯框中增加Odbc32.lib,同時保證系統目錄system32下有文件Odbccp32.dll。

  3、文件數據源的連接:除了ODBC治理器,還可以通過SQLDriverConnect來添加文件數據源。

  二、ODBC API編程

  假如一個ODBC API函數執行成功,則返回SQL_SUCCESS或SQL_SUCCESS_WITH_INFO,SQL_SUCCESS指示可通過診斷記錄獲取有關操作的具體信息,SQL_SUCCESS_WITH_INFO指示應用程序執行結果帶有警告信息,可通過診斷記錄獲取具體信息。假如函數調用失敗,返回碼爲SQL_ERROR。

  一般,編寫ODBC程序主要有一下幾個步驟:

  1、分配環境句柄:聲明一個SQLHENV的變量,調用函數SQLAllocHandle。

  設置環境屬性:完成環境分配後,用函數SQLSetEnvAttr設置環境屬性,注冊ODBC版本號。

  釋放環境句柄:完成數據訪問任務時,應調用SQLFreeHandle釋放前面分配的環境。

  2、分配連接句柄:聲明一個SQLHDBC類型的變量,調用SQLAllocHandle函數分配句柄。

  設置連接屬性:所有連接屬性都可通過函數SQLSetConnectAttr設置,調用函數SQLGetConnectAttr可獲取這些連接屬性的當前設置值。

  3、 連接數據源:對于不同的程序和用戶接口,可以用不同的函數建立連接

  SQLConnect:該函數只要提供數據源名稱、用戶ID和口令,就可以進行連接了。

  SQLDriverConnect:該函數用一個連接字符串建立至數據源的連接,它可以讓用戶輸入必要的連接信息,使用系統中還沒定義的數據源。

  SQLBrowseConnect:該函數支持以一種叠代的方式獲取到數據源的連接,直到最後建立連接,它基于客戶機/服務器體系結構,因此本地數據庫不支持該函數。

  4、 預備並執行SQL語句

  A、 分配語句句柄:語句句柄是通過調用SQLAllocHandle函數分配的。

  函數SQLGetStmrrAttr和SQLSetStmrrAttr用來獲取和設置一個語句句柄的選項,使用完,調用SQLFreeHandle釋放該句柄。

  B、 執行SQL語句

  SQLExecDirect:該函數直接執行SQL語句,對于只執行一次的SQL語句來說,該函數是執行最快的方法。

  SQLPrepare和SQLExecute:對于需要多次執行的SQL語句來說,可先調用SQLPrepare預備SQL語句的執行,用SQLExecute執行預備好的語句。

  C、 使用參數:使用參數可以使一條SQL語句多次執行,得到不同的結果。

  函數SQLBindParameter負責爲參數定義變量,將一段SQL語句中的一個參數標識符("?")捆綁在一起,實現參數值的傳遞。

  5、 獲取記錄集

  A、 綁定列:首先必須分配與記錄集中字段相對應的變量,然後通過函數SQLBindCol將記錄字段同程序變量綁定在一起,對于長記錄字段,可以通過調用函數SQLGetData直接取回數據。

  綁定字段可以根據自己的需要全部綁定,也可以綁定其中的某幾個字段。

  通過調用函數SQLBindCol將變量地址值賦爲NULL,可以結束對一個記錄字段的綁定,通過調用函數SQLFreeStmt,將其中選項設爲SQL_UNBIND,或者直接釋放句柄,都會結束所有記錄字段的綁定。

  B、SQLFetch:該函數用于將記錄集的下一行變成當前行,並把所有捆綁過的數據字段的數據拷貝到相應的緩沖區。

  C、 光標:應用程序獲取數據是通過光標(Cursor)來實現的,在ODBC中,主要有3種類型的光標:單向光標、可滾動光標和塊光標。

  

   有些應用程序不支持可滾動光標和塊光標,ODBC SDK提供了一個光標庫(ODBCCR32.DLL),在應用程序中可通過設置連接屬性(SQL_STTR_ODBC_CURSOR)激活光標庫。

  6、 記錄的添加、刪除和更新:數據源數據更新可通過3種方式:通過SQLExecDirect函數使用相應的SQL語句;調用SQLSetPos函數實現記錄集定義更新;調用SQLBulkOperations函數實現數據更新。

  第一種方式適用于任何ODBC數據源,後兩種方式有的數據源不支持,可調用SQLGetInfo確定數據源。

  SQLBulkOperations:該函數操作基于當前行集,調用前,須先調用SQLFetch或SQLFetchScroll獲取。

  函數調用後,塊光標的位置變爲未定義狀況,因此,應該先調用函數SQLFetchScroll設定光標位置。

  7、錯誤處理:每個ODBC API函數都能産生一系列反映操作信息的診斷記錄,可以用SQLGetDiagField函數獲取診斷記錄中特定的域,另外,可以使用SQLGetDiagRec獲取診斷記錄中一些常用的域。

  8、事務處理:事務提交有兩種方式:自動提交模式和手動提交模式。應用程序可通過調用函數SQLSetConnectAttr設定連接屬性SQL_ATTR_AUTOCOMMIT,自動提交模式是默認的連接屬性設置,對于所有的ODBC驅動程序都能適應這種模式下,所有語句都是作爲一個獨立的事務進行處理的。

  手動提交模式把一組SQL語句放入一個事務中,程序必須調用函數SQLEenTran明確地終止一個事務。若使用多個激活的事務,就必須建立多個連接,每一個連接包含一個事務。

  9、斷開數據連接並釋放環境句柄:完成數據庫操作後,可調用SQLDisconnect函數關閉同數據庫的連接。
 
 
 
上一篇《C/C++:如何在程序中加載JPG圖片?》
下一篇《創世紀的C++ Builder--入門例子》
 
 
 
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

河南夫妻在溫嶺網絡直播“造人”內容涉黃被刑事拘留

夫妻網絡直播“造人”爆紅   1月9日,溫嶺城北派出所接到南京警方的協查通告,他們近期打掉了一個涉黃直播APP平台。而根據掌握的線索,其中有一對涉案的夫妻主播...

如何防止牆紙老化?牆紙變舊變黃怎麽辦?

如何防止牆紙老化? (1)選擇透氣性好的牆紙 市場上牆紙的材質分無紡布的、木纖維的、PVC的、玻璃纖維基材的、布面的等,相對而言,PVC材質的牆紙最不透氣...

鮮肌之謎非日本生産VS鮮肌之謎假日貨是謠言

觀點一:破日本銷售量的“鮮肌之謎” 非日本生産 近一段時間,淘寶上架了一款名爲“鮮肌之謎的” 鲑魚卵巢美容液,號稱是最近日本的一款推出的全新護膚品,産品本身所...

中國最美古詩詞精選摘抄

系腰裙(北宋詞人 張先) 惜霜蟾照夜雲天,朦胧影、畫勾闌。人情縱似長情月,算一年年。又能得、幾番圓。 欲寄西江題葉字,流不到、五亭前。東池始有荷新綠,尚小如...

關于女人的經典語句

關于女人的經典語句1、【做一個獨立的女人】 思想獨立:有主見、有自己的人生觀、價值觀。有上進心,永遠不放棄自己的理想,做一份自己喜愛的事業,擁有快樂和成就...

未來我們可以和性愛機器人結婚嗎?

你想體驗機器人性愛嗎?你想和性愛機器人結婚嗎?如果你想,機器人有拒絕你的權利嗎? 近日,第二屆“國際人類-機器人性愛研討會”大會在倫敦金史密斯大學落下帷幕。而...

全球最變態的十個地方

10.土耳其地下洞穴城市 變態指數:★★☆☆☆ 這是土耳其卡帕多西亞的一個著名景點,傳說是當年基督教徒們爲了躲避戰爭而在此修建。裏面曾住著20000人,...

科學家稱,人類死亡後意識將在另外一個宇宙中繼續存活

據英國《每日快報》報道,一位科學家兼理論家Robert Lanza博士宣稱,世界上並不存在人類死亡,死亡的只是身體。他認爲我們的意識借助我們體內的能量生存,而且...

《屏裏狐》片頭曲《我愛狐狸精》歌詞是什麽?

《我愛狐狸精》 - 劉馨棋   (電視劇《屏裏狐》主題曲)   作詞:金十三&李旦   作曲:劉嘉   狐狸精 狐狸仙   千年修...

 
 
 
一、動態加載數據源 1、通過修改注冊表加載數據源: ·用戶數據源:HKEY_CURRENT_USER\SOFTWARE\ODBC\ODBC.INI ·系統數據源:HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI 對于不同類型的數據源,注冊表的修改也不同,但基本上要修改兩個地方,一個是在ODBC.INI子鍵下建立一個與數據源描述名同名的子鍵,並在該子鍵下建立與數據源配置相關的項;另一個是在\ODBC.INI\ODBC Data Sources子鍵下建立一個新項以便告訴驅動程序治理器ODBC數據源的類型。 2、通過ODBC API加載:Windows系統子目錄下的動態鏈接庫Odbcinst.dll提供了一個可以動態增加、修改和刪除數據源的函數SQLConfigDataSource,由于VC的默認庫文件中不包含此函數,因此使用前需將Odbcinst.h文件包含在工程的頭文件中,在工程的setting屬性框Link頁的Object/library module編輯框中增加Odbc32.lib,同時保證系統目錄system32下有文件Odbccp32.dll。 3、文件數據源的連接:除了ODBC治理器,還可以通過SQLDriverConnect來添加文件數據源。 二、ODBC API編程 假如一個ODBC API函數執行成功,則返回SQL_SUCCESS或SQL_SUCCESS_WITH_INFO,SQL_SUCCESS指示可通過診斷記錄獲取有關操作的具體信息,SQL_SUCCESS_WITH_INFO指示應用程序執行結果帶有警告信息,可通過診斷記錄獲取具體信息。假如函數調用失敗,返回碼爲SQL_ERROR。 一般,編寫ODBC程序主要有一下幾個步驟: 1、分配環境句柄:聲明一個SQLHENV的變量,調用函數SQLAllocHandle。 設置環境屬性:完成環境分配後,用函數SQLSetEnvAttr設置環境屬性,注冊ODBC版本號。 釋放環境句柄:完成數據訪問任務時,應調用SQLFreeHandle釋放前面分配的環境。 2、分配連接句柄:聲明一個SQLHDBC類型的變量,調用SQLAllocHandle函數分配句柄。 設置連接屬性:所有連接屬性都可通過函數SQLSetConnectAttr設置,調用函數SQLGetConnectAttr可獲取這些連接屬性的當前設置值。 3、 連接數據源:對于不同的程序和用戶接口,可以用不同的函數建立連接 SQLConnect:該函數只要提供數據源名稱、用戶ID和口令,就可以進行連接了。 SQLDriverConnect:該函數用一個連接字符串建立至數據源的連接,它可以讓用戶輸入必要的連接信息,使用系統中還沒定義的數據源。 SQLBrowseConnect:該函數支持以一種叠代的方式獲取到數據源的連接,直到最後建立連接,它基于客戶機/服務器體系結構,因此本地數據庫不支持該函數。 4、 預備並執行SQL語句 A、 分配語句句柄:語句句柄是通過調用SQLAllocHandle函數分配的。 函數SQLGetStmrrAttr和SQLSetStmrrAttr用來獲取和設置一個語句句柄的選項,使用完,調用SQLFreeHandle釋放該句柄。 B、 執行SQL語句 SQLExecDirect:該函數直接執行SQL語句,對于只執行一次的SQL語句來說,該函數是執行最快的方法。 SQLPrepare和SQLExecute:對于需要多次執行的SQL語句來說,可先調用SQLPrepare預備SQL語句的執行,用SQLExecute執行預備好的語句。 C、 使用參數:使用參數可以使一條SQL語句多次執行,得到不同的結果。 函數SQLBindParameter負責爲參數定義變量,將一段SQL語句中的一個參數標識符("?")捆綁在一起,實現參數值的傳遞。 5、 獲取記錄集 A、 綁定列:首先必須分配與記錄集中字段相對應的變量,然後通過函數SQLBindCol將記錄字段同程序變量綁定在一起,對于長記錄字段,可以通過調用函數SQLGetData直接取回數據。 綁定字段可以根據自己的需要全部綁定,也可以綁定其中的某幾個字段。 通過調用函數SQLBindCol將變量地址值賦爲NULL,可以結束對一個記錄字段的綁定,通過調用函數SQLFreeStmt,將其中選項設爲SQL_UNBIND,或者直接釋放句柄,都會結束所有記錄字段的綁定。 B、SQLFetch:該函數用于將記錄集的下一行變成當前行,並把所有捆綁過的數據字段的數據拷貝到相應的緩沖區。 C、 光標:應用程序獲取數據是通過光標(Cursor)來實現的,在ODBC中,主要有3種類型的光標:單向光標、可滾動光標和塊光標。 有些應用程序不支持可滾動光標和塊光標,ODBC SDK提供了一個光標庫(ODBCCR32.DLL),在應用程序中可通過設置連接屬性(SQL_STTR_ODBC_CURSOR)激活光標庫。 6、 記錄的添加、刪除和更新:數據源數據更新可通過3種方式:通過SQLExecDirect函數使用相應的SQL語句;調用SQLSetPos函數實現記錄集定義更新;調用SQLBulkOperations函數實現數據更新。 第一種方式適用于任何ODBC數據源,後兩種方式有的數據源不支持,可調用SQLGetInfo確定數據源。 SQLBulkOperations:該函數操作基于當前行集,調用前,須先調用SQLFetch或SQLFetchScroll獲取。 函數調用後,塊光標的位置變爲未定義狀況,因此,應該先調用函數SQLFetchScroll設定光標位置。 7、錯誤處理:每個ODBC API函數都能産生一系列反映操作信息的診斷記錄,可以用SQLGetDiagField函數獲取診斷記錄中特定的域,另外,可以使用SQLGetDiagRec獲取診斷記錄中一些常用的域。 8、事務處理:事務提交有兩種方式:自動提交模式和手動提交模式。應用程序可通過調用函數SQLSetConnectAttr設定連接屬性SQL_ATTR_AUTOCOMMIT,自動提交模式是默認的連接屬性設置,對于所有的ODBC驅動程序都能適應這種模式下,所有語句都是作爲一個獨立的事務進行處理的。 手動提交模式把一組SQL語句放入一個事務中,程序必須調用函數SQLEenTran明確地終止一個事務。若使用多個激活的事務,就必須建立多個連接,每一個連接包含一個事務。 9、斷開數據連接並釋放環境句柄:完成數據庫操作後,可調用SQLDisconnect函數關閉同數據庫的連接。
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
小龍女彤彤之情溢皇都
龔潔
智能手機形象美女
崔潔彤
回家的路上----
中國一站(哈爾濱)
清明植物園的花。
桃花堤印象之豎版
 
>>返回首頁<<
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有