ODBC

ODBC

ODBC(OpenDatabaseConnectivity,開放資料庫互連)是微軟公司開放服(WOSA,WindowsOpenServicesArchitecture)中有關資料庫的一個組成部分,它建立了一組規範,並提供了一組對資料庫訪問的標準API(應用程式編程接口)。這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支持,用戶可以直接將SQL語句送給ODBC。

基本信息

架構

應用程式

應用程式對外提供使用者交談界面,同時對內執行資料之準備工作資料庫系統所傳回來的結果在顯示給使用者看。簡單來說,應用程式即ODBC界面執行下列主要工作:1.Requestaconnection(i.e.session)withadatasource.2.SendSQLrequeststothedatasource.3.DefinestorageareasanddataformatsfortheresultofSQLrequests.4.Requestresults.5.Processerrors.6.Requestacommitorrollbackofoperationsfortranscationcontrol.7.Terminateaconnectionadatasource.

驅動管理器

驅動管理器本身是MSWindows中一個動態連線程式庫檔案(ODBC.DLL)。應用程式透過驅動管理器去載入並連線數據源的驅動程式(driver)並連線數據源。驅動管理器主要工作如下:
1.UsesODBCINIfiletomapadatasourcenametoaspecificdriverDLL.
2.ProcessesserverODBCinitializationcalls.
3.ProvidesentrypointstoODBCfunctionsforeachdriver.
4.ProvidesparametervalidationandsequencevalidationforODBCcalls.

驅動程式

驅動程式也是一個動態連線程式庫檔案,當應用程式呼叫ODBC函式,SQLConnect或SQLDriverConnect時,驅動管理器就會載入相對的驅動程式與應用程式呼應。驅動程式主要是執行ODBC之相對函式,並與對應的數據源(DataSource)做溝通。驅動程式之工作如下:
1.Establishesaconnecttoadatasource.
2.Submitsrequeststoadatasources.
3.Translatesdatatoorfromotherformats,ifrequestedbytheapplication.
4.Returnresultstotheapplication.
5.Formatserrorsintostandarderrorcodesandreturnsthemtotheapplication.
6.Declaresandmanipulatescursorsifnecessary(invisibletotheapplication).
7.Initiatestransactionsifthedatasourcerequiresexplicittransactioninitiation(invisibletotheapp).

數據源

ODBC程式流程ODBC程式流程
數據源唯一資料庫系統(DBMS)或是資料庫作業系統的一個組合。舉例來說,套用庫系統可以同時與下列兩個或其中一個數據源連線。
1.ADBMakerDBMSrunningonaMicrosoftWindowsNTaccessedbyNTaccessedbyTCP/IP.
2.ATandemNonStopSQLDBMSrunningontheGuardian90accessedviaagateway.
套用系統程式通過標準API來連線數據源,因此開發過程中不需指定特定的資料庫系統,所以資料庫系統的開放性從此被建立。筆者認為在計算機系統進入開放時代之時,我們應可體會到標準的建立與系統的發展是同樣的重要。而信息系統架構在資料庫的必要性也隨著信息化社會的蓬勃發展而更顯重要,因此在ODBC標準日益成熟的同時,我們也同時可以感受到資料庫系統在開放架構下,更需扮演強而有力的角色。
依據ODBC的規格,其API共可分為以下九類:
1.SQLAllocEnv.
2.SQLAllocConnect.
3.SQLConnect.
4.SQLPriverConnect.
5.SQLBrowseConnect.
1.SQLDataSource.
2.SQLGetInfo.
3.SQLGetFunctions.
4.SQLGetTypeInfo.
1.SQLSetConnectOption.
IV.準備SQL指令之需求
1.SQLAllocStmt.2.SQLPrepare.3.SQLSetParam.4.SQLParamOptions.5.SQLGetCursorName.6.SQLSetCursorName.7.SQLSetScrollOptions.
1.SQLExecute.2.SQLExecDirect.3.SQLNativeSql.4.SQLDescribeParanl.5.SQLNumParams.6.SQLParamData.7.SQLPutData.
VI.取得執行結果及有關結果的訊息
1.SQLRowCount.2.SQLNumResultCols.3.SQLDescribeCol.4.SQLColAttributes.5.SQLBindCol.6.SQLFetch.7.SQLExtendedFetch.8.SQLGetData.9.SQLSetDos.10.SQLMoreResults.11.SQLError.
VII.取得有關數據源系統回錄(SystemtablesorCatalog)的訊息
1.SQLColumnPrivileges.2.SQLColumns.3.SQLForeignkeys.4.SQLPrimaryKeys.5.SQLProcedureColumns.6.SQLProcedures.7.SQLSpecialColumns.8.SQLStatistics.9.SQLTablePrivileges.10.SQLTables.
VIII.結束SQL指令需求
1.SQLFreeStmt.2.SQLCancel.3.SQLTransact.
IX.結束與數據源的連線
1.SQLDisconnect.2.SQLFreeConnect.3.SQLFreeEnv.
以上所列之ODBCAPI函式,我們發現全都以SQL為開頭。除以上述分類外,各個函式在其必要性或複雜度上,更被規定在不同的幾個層級中ODBC函式的層級為核心層(Corelevel),第一層(Level1),和第二層(Level2)。我們再來看一個很基本的應用程式步驟是如何呢?下圖告訴我們這個答案。
回顧ODBC的架構及其執行過程,ODBC造就了"應用程式獨立性(ApplicationIndependency)"的特性,使應用程式不需在乎數據源是何種資料庫系統或者純粹是個資料或文本檔案,只要相對驅動程式能完成銜接的功能,則應用程式即可達到高度的獨立性。

更新

ODBC現在看來是一個比較古老的東西,在1996年左右就比較定型了,其最新的版本是3.8(Win7自帶;Win8上有更新但仍叫3.8),MICROSOFT也不打算對它做什麼大的更新,更多的目光應該被放到OLEDB、.NETDATAPROVIDER身上了。然而,正因為它是一個比較成熟和古老的規範,ODBC在大多數DBMS上都可以使用,可以說一個像樣的DBMS都應該支持ODBC3.0或以上的版本。
如果你打算學習如何開發一個ODBCDRIVER,最好的參考資料還是MSDN。如果你不打算採用ODBCAPI做開發,學習和了解ODBC也可以增加對DBMS的了解,也能更好地理解其他的資料庫訪問接口和技術。
一個基於ODBC的應用程式對資料庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的資料庫操作由對應的DBMS的ODBC驅動程式完成。也就是說,不論是FoxPro、Access還是Oracle資料庫,均可用ODBCAPI進行訪問。由此可見,ODBC的最大優點是能以統一的方式處理所有的資料庫。
開放資料庫互連(ODBC)是Microsoft引進的一種早期資料庫接口技術。它實際上是我們要在本章後面加以討論的ADO的前身。Microsoft引進這種技術的一個主要原因是,以非語言專用的方式,提供給程式設計師一種訪問資料庫內容的簡單方法。換句話說,訪問DBF檔案或AccessBasic以得到MDB檔案中的數據時,無需懂得Xbase程式設計語言。事實上,VisualC++就是這樣一個程式設計平台,即Microsoft最初是以ODBC為目標的。
你會發現,ODBC工作起來和Windows一樣,它用包含在DLL內的驅動程式完成任務。其實,ODBC提供一套兩個驅動程式:一個是資料庫管理器的語言,另一個為程式設計語言提供公用接口。允許VisualC++用標準的函式調用經公用接口訪問資料庫的內容,是這兩個驅動程式的匯合點。當然,還有其它和ODBC有關的實用程式類型的DLL。例如,一個這樣的DLL允許你管理ODBC數據源。ODBC的實際管理接口出現在SYSTEM資料夾中的某個CPL(控制臺)檔案中尋找我們在後面要談到這方面的問題。ODBC的確能履行承諾,提供對資料庫內容的訪問,並且沒有太多的問題。它沒有提供資料庫管理器和C之間儘可能最好的數據轉換,這種情況是有的,但它多半能像廣告所說的那樣去工作。唯一影響ODBC前程的是,它的速度極低至少較早版本的產品是這樣。ODBC最初面世時,一些開發者曾說,因為速度問題,ODBC永遠也不會在資料庫領域產生太大的影響。然而,以Microsoft的市場影響力,ODBC毫無疑問是成功了。今天,只要有兩種ODBC驅動程式的一種,那么幾乎每一個資料庫管理器的表現都會很卓越。

使用

ODBCODBC
在可以用ODBC做任何事之前,必須有一個資料庫模型在腦子裡。在一個像Access這樣的應用程式中創建資料庫框架通常會更容易一些,因為Access可以非常輕鬆地提供完成任務所需的各種功能。但是,如果你安裝了所需的ODBC驅動程式,那就可以在C++中創建程式框架。一設計了資料庫,就要為其創建ODBC數據源,我們會在本節中看到這一點。下面的過程並沒有嚴格地說明活動的經過,只是說明了一種配置數據源的技術。
注釋我會在第5章中說明如何創建一個Access資料庫。現在,我們只是看一看,為了訪問那個資料庫,我們下一步要做些什麼。
ODBCODBC
2.
ODBCODBC
單擊Add按鈕。會看到CreateNewDataSource(創建新的數據源)對話框,如下圖所示。
技巧檢查ODBCDataSourceAdministrator(ODBC數據源管理員)對話框的About選項卡,可以確定你正在使用的ODBC驅動程式的最新版本。這個選項卡包含了各種ODBCDLL的版本號、生產廠商的名稱以及出現在SYSTEM資料夾中的檔案名稱。大多數情況下,通過查看版本號可以驗證ODBC驅動程式是否是最新的版本。
3.選擇一個數據源。對本練習來說,我選擇了Access數據源。單擊Finish(完成),會看到某種類型的配置對話框,如下面的ODBCMicrosoftAccess97Setup(設定)對話框所示。
注釋:如果你選擇的數據源和我在本實例中選擇的不同,那么所需的配置步驟也和這裡說明的不同棗每個ODBC驅動程式都要求不同類型的配置。
4.在DataSourceName(數據源名)域內輸入數據源名稱。一定要選擇意義明確但又不過於冗長的名稱。我選擇FoodDatabase(食品資料庫),因為我最終要創建一個與食品庫存有關的資料庫的連結。
5.在Description(描述)域內輸入一段說明性文字。可以讓這個項比上一個項稍長一些,因為它描述資料庫的用途。另一方面,也不要寫入像《戰爭與和平》那樣大的小說。對本練習,我輸入了:Thisdatabasecontainsinventoryinformationforafoodstore(本資料庫包含食品存儲的庫存信息)。
6.單擊Select(選擇)按鈕。你會看到一個FileOpen-type(檔案ODBC打開類型)對話框,可以在那裡選擇一個現有的資料庫。ODBC驅動程式會自動選擇正確的檔案擴展名。
技巧並不是一定要提前設計資料庫。請注意,AccessODBC驅動程式還包括一個創建新資料庫的按鈕。很多ODBC驅動程式都提供了這種功能,但並不是全都這樣。單擊這個按鈕會啟動資料庫管理器應用程式,並允許你設計資料庫。注意有一點很有意思,AccessODBC驅動程式還會允許你使用這個對話框壓縮或修補資料庫。
ODBCODBC
7.選擇系統資料庫選項。在大多數情況下要選擇None(無),除非你為應用程式特別創建了一個系統資料庫。如果確實添加了系統資料庫,它會出現在ODBCMicrosoftAccess97Setup(設定)對話框的SystemDSN(系統DSN)選項卡上。
8.單擊Advanced(高級)按鈕,會看到SetAdvancedOptions(設定高級選項)對話框,如下圖所示。無需對很多項做修改。但是,要把客戶名添加到LoginName(註冊名)域中,把客戶口令添加到Password(口令)域中。這允許客戶在訪問你的資料庫時,根本不用了解訪問的細節--甚至不用了解被記錄的客戶名。技巧為最最佳化潛在的區域,可以瀏覽一下ODBC驅動程式提供的一系列高級選項。例如,AccessODBC允許你更改DBMS所用的執行緒數量。預設設定3通常提供了不錯的性能,但是你會發現,複雜程式中執行緒多一些的話,可以提高前台任務的速度。由於Windows使用了一些處理器循環對執行緒實施管理,所以使用了過多的執行緒又會降低應用程式的速度。
9.設定完所需的高級選項後單擊OK。
10.再次單擊OK關閉ODBCMicrosoftAccess97Setup(設定)對話框。應該看到,新的設定項已經添加到ODBCDataSourceAdministrator(ODBC數據源管理員)對話框中。如果今後要為資料庫更改這些設定,只要簡單地加亮它並單擊Configure(配置)。刪除資料庫配置也很容易,只要加亮DSN並單擊Remove(刪除)即可。創建系統DSN和製作用戶DSN差不多。兩者間一個顯著的差別是,使用它們的目的不同。系統DSN告訴應用程式如何與資料庫相連,在一些情況下如何與之互動作用。系統DSN不包含資料庫所需的任何數據--它包含連線標準,其中可以包括從用戶列表到重要檔案位置的一切信息。

種類

管理方法

ODBC分為單束式和多束式兩類
ODBC使用層次的方法來管理資料庫,在資料庫通信結構的每一層,對可能出現依賴資料庫產品自身特性的地方,ODBC都引入一個公共接口以解決潛在的不一致性,從而很好地解決了基於資料庫系統應用程式的相對獨立性,這也是ODBC一經推出就獲得巨大成功的重要原因之一。
從結構上分,ODBC分為單束式和多束式兩類。

單束式驅動程式

ODBCODBC
單束式驅動程式介於應用程式和資料庫之間,像中介驅動程式一樣數據提供一個統一的數據訪問方式。當用戶進行資料庫操作時,應用程式傳遞一個ODBC函式調用給ODBC驅動程式管理器,由ODBCAPI判斷該調用是由它直接處理並將結果返回還是送交驅動程式執行並將結果返回。由上可見,單束式驅動程式本身是一個資料庫引擎,由它直接可完成對資料庫的操作,儘管該資料庫可能位於網路的任何地方。

多束式驅動程式

多束式驅動程式負責在資料庫引擎和客戶應用程式之間傳送命令和數據,它本身並不執行數據處理操作而用於遠程操作的網路通信協定的一個界面。
前端應用程式提出對資料庫處理的請求,該請求轉給ODBC驅動程式管理器,驅動程式管理器依據請求的情況,就地完成或傳給多束驅動程式,多束式驅動程式將請求翻譯為特定廠家的資料庫通信接口(如Oracle的SQLNet)所能理解的形式並交於接口去處理,接口把請求經網路傳送給伺服器上的數據引擎,伺服器處理完後把結果發回給資料庫通信接口,資料庫接口將結果傳給多束式ODBC驅動程式,再由驅動程式將結果傳給應用程式。

檔案DSN

你可能已經注意到了,上一節中的實例有問題。如果想單獨配置網路上的每一台機器,它會工作得很好,但這可能不是一個好主意。還有一種存儲創建數據源所需信息的方式:檔案DSN。這正是我們要在本節中討論的。下面的過程說明了設定檔案DSN的一般方法。

ODBCODBC
1.雙擊ControlPanel(控制臺)中的32位ODBC小程式,會看到ODBCDataSourceAdministrator(ODBC數據源管理員)對話框。選擇FileDSN(檔案DSN)選項卡,會看到如下圖所示的對話框。要做的第一件事是,選擇存儲DSN信息的地方。2.單擊LookIn(觀察)下拉列表框,會看到一系列當前機器的目錄和驅動器。可以為DSN使用任何存儲位置。我通常在網路上選擇資料庫存儲目錄。使用UNC(通用命名標準)意味著,每個人都會用相同的路徑來訪問DSN檔案。
技巧UpOneLevel(上一和在Explorer中是一樣的。可以用該按鈕返回到上一級目錄。最後,你會在MyComputer(我的電腦)處結束,看到機器上所有驅動器的清單。
3.單擊Add(添加),會看到CreateNewDataSource(創建新的數據源)對話框。
4.在列表中選擇一個ODBC驅動程式,然後單擊Next(下一個)。對本示例來說,我再次選擇Access。你會看到CreateNewDataSource(創建新的數據源)對話框的下一頁顯示出來。在這裡選擇數據源的名稱和存儲位置。單擊Browse(瀏覽)會看到FileOpen-type(檔案打開類型)對話框,在這裡選擇存儲位置。輸入一個檔案名稱,ODBC嚮導自動添加DSN作為擴展名。在本示例中,我選擇SAMPLE.DSN作為DSN檔案的名稱。5.單擊Next(下一個)會看到一個摘要對話框,如下圖所示。它說明正準備創建的DSN的參數。6.單擊Finish(完成)。這時,會看到ODBCMicrosoftAccess97Setup(設定)對話框的修改版。不能像我們在上一節所做的那樣,在DataSourceName(數據源名)或Description(描述)欄位中添加信息了,不過,其它的都和以前一樣。7.一定要單擊Select(選擇)按鈕輸入資料庫的名稱,然後選擇想要使用的資料庫(如果想創建一個新資料庫,也可以單擊Create(創建))。
8.完成配置過程時單擊OK,你會在ODBCDataSourceAdministrator(ODBC數據源管理員)對話框中看到一個新的DSN檔案項。和我們創建的前一個DSN不同,這個DSN實際上創建可以用文本編輯器來查看和編輯的檔案。圖4.1顯示了我的檔案的外觀。請注意,它符合標準的INI檔案格式。你可以在頂端看到【ODBC】標題。下面是我選擇的全部設定。這個檔案允許我從VisualC++選擇數據源,而機器間的傳輸也是非常容易的。我甚至能在安裝過程中按要求更改位置--在你不知道用戶會有什麼樣的設定時,這一點確實很不錯。

圖書信息

圖書一

開放資料庫互聯(ODBC)技術與套用開放資料庫互聯(ODBC)技術與套用
基本信息
開放資料庫互聯(ODBC)技術與套用
作者:文必龍
ISBN:9787030055888
出版社:科學出版社
出版時間:1997
主題:資料庫管理系統--接口
內容簡介
開放資料庫互聯(ODBC)為資料庫應用程式訪問異構型資料庫提供了統一的數據存取API,應用程式不必重新編譯、連線就可以與不同的DBMS相聯。目前支持ODBC的有Oracle,Access,X-Base等10多種流行的DBMS。本書介紹了ODBC的基本原理及SQL語言,並從兩個角度介紹ODBC技術:一是從ODBC應用程式設計者的角度,將套用和開發中通常要用到的編程環節先總結成框架形式,然後分步驟講解;另一是從ODBC驅動程式開發人員的角度,介紹如何開發ODBC驅動程式。本書還介紹了有關ODBC軟體安裝及數據源配置的方法。本書適用於廣大資料庫套用人員和開發人員,也可供大、中專院校師生參考。
圖書二
書名:開放資料庫互連
作者:(美)QueCorporation著
ISBN號:7-302-02035-3
價格:40.00
出版地:北京
出版社:清華大學出版社
出版時間:1995.11
頁數:355頁
開本:16開
附註:北京科海培訓中心
本書原文名:UsingODBC2
其他版本:UsingODBC2
主題:關係資料庫--應用程式
科圖分類號:73.967
責任者:QueCorporation著
孟小峰譯

記錄事務

調試應用程式時加以記錄,這一點很重要。ODBCDataSourceAdministrator(ODBC數據源管理員)對話框也提供了這樣的功能。可以選擇跟蹤你通過ODBC對資料庫進行的各種事務。當然,這些記錄可能會變得相當大,但我們並不是總要使用它們。
開始記錄事務時,只要雙擊控制臺(ControlPanel)中的32位ODBC小程式,打開ODBCDataSourceAdministrator(ODBC數據源管理員)對話框。選擇Tracing(跟蹤)選項卡,你會看到如下圖所示的對話框(請注意,該對話框的Windows98版本略有不同)。如你所見,有三個單選按鈕確定何時跟蹤ODBC調用。預設設定是Don'tTrace(不跟蹤)。如果打算調試單個應用程式,應該選擇AlltheTime(全部時間)。One-TimeOnly(只一次)在下一次連線期間跟蹤ODBC調用棗只要連線一拆除,跟蹤就關閉。當用戶帶著特定的問題調用時,這是一個不錯的選擇。可以監視一次會話期間的連線,然後用該信息幫助創建排除錯誤的計畫。
跟蹤不會自動開始。還要單擊對話框右側的StartTracingNow(現在開始跟蹤)。只要跟蹤一開始,按鈕標題就變成StopTracingNow(現在停止跟蹤)。再次單擊按鈕關閉跟蹤過程。
唯一要擔心的其它設定是LogFilePath(記錄檔案路徑)。ODBC通常在根目錄下的SQL.LOG檔案中放入事務信息。但是,也可以將該信息放在網路驅動器上,或者用戶看不到的地方。在調試過程中,預設位置通常就比較適宜。
注釋除非你想創建自己的日誌記錄DLL,否則不要更改CustomTraceDLL(自定義跟蹤DLL)域內的設定。在這裡列出的DLL棗ODBCTRAC.DLL棗負責維持事務記錄。

相關詞條

相關搜尋

熱門詞條

聯絡我們