複製鏈接
請複製以下鏈接發送給好友

數據庫編程

鎖定
隨着數據庫技術的廣泛應用,開發各種數據庫應用程序已成為計算機應用的一個重要方面。VB具有強大的數據庫操作功能,提供了數據管理器(Data Manager)、數據控件(DataControl)和ADO(Active Data Object)數據對象等工具,使編程人員可以輕鬆地開發出各種數據庫應用程序。當前各種主流數據庫有很多,包括Oracle, MS SQL Server, Sybase, Informix, MySQL, DB2, Interbase / Firebird, PostgreSQL, SQLite, SAP/DB, TimesTen, MS ACCESS等等。數據庫編程是對數據庫的創建、讀寫等一列的操作。數據庫編程分為數據庫客户端編程與數據庫服務器端編程。數據庫客户端編程主要使用ODBC API、ADO、ADO.NET、OCI、OTL等方法;數據庫服務端編程主要使用OLE DB等方法。數據庫編程需要掌握一些訪問數據庫技術方法,還需要注意怎麼設計高效的數據庫、數據庫管理與運行的優化、數據庫語句的優化。
中文名
數據庫編程
外文名
Database Programming
應用領域
數據庫、計算機等
主流數據庫
Oracle, MS SQL Server等
客户端編程
ODBC API、ADO等
數據庫類型
網狀數據庫層次數據庫關係數據庫

數據庫編程數據庫的基本概念

[1]  數據庫按其結構可分為三種類型:網狀數據庫、層次數據庫和關係數據庫。其中關係數據庫是一種應用最廣泛的數據庫。

數據庫編程訪問數據庫技術方法

數據庫編程分為數據庫客户端編程與數據庫服務器端編程。數據庫客户端編程主要使用ODBC API、ADO、ADO.net、OCI、OTL等方法;數據庫服務端編程主要使用OLE DB等方法。
1、幾種是數據庫訪問方法比較
ODBCAPI是一種適合數據庫底層開發的編程方法,ODBCAPI提供大量對數據源的操作,ODBCAPI能夠靈活地操作遊標,支持各種幫定選項,在所有ODBC相關編程中,API編程具有最高的執行速度。
DAO提供了很好的數據庫編程的對象模型.但是,對數據庫的所有調用以及輸出的數據都必須通過Access/Jet數據庫引擎,這對於使用數據庫應用程序,是嚴重的瓶頸。
OLEDB提供了COM接口,與傳統的數據庫接口相比,有更好的健壯性和靈活性,具有很強的錯誤處理能力,能夠同非關係數據源進行通信。
ADO最主要的優點在於易於使用、速度快、內存支出少和磁盤遺蹟小。
ADO.Net是利用數據集的概念將數據庫數據讀入內存中,然後在內存中對數據進行操作,最後將數據集數據回寫到源數據庫中。
OTL 是oracle, Odbc and DB2-CLI Template Library 的縮寫,是一個C++編譯中操控關係數據庫的模板庫, OTL中直接操作Oracle主要是通過Oracle提供的OCI接口進行,進行操作DB2數據庫則是通過CLI接口來進行,至於MS的數據庫和其它一些數據庫,則OTL只提供了ODBC來操作的方式。當然Oracle和DB2也可以由OTL間接使用ODBC的方式來進行操縱。具有以下優點:跨平台;運行效率高,與C語言直接調用API相當;開發效率高,起碼比ADO.net使用起來更簡單,更簡潔;部署容易,不需要ADO組件,不需要.net framework等。

數據庫編程VC數據庫編程幾種方法

VC數據庫編程幾種方法,包括ODBC連接、MFC ODBC連接、DAO連接、OLEDB、OLE DB Templates連接、ADO、Oracle專用方法(OCI(OracleCallInterface)訪問、OracleObjectOLEC++ClassLibrary )。

數據庫編程ODBC連接


  ODBC(Open DataBase Connectivity)是MSOA的一部分,是一個標準數據庫接口。它提供對關係數據庫訪問的統一接口,實現對異構數據源的一致訪問。
ODBC數據訪問由以下部分組成:
  <1>句柄(Handles):ODBC使用句柄來標識ODBC環境、連接、語句和描述器.
  <2>緩存區(Buffers):
  <3>數據類型(Data types)
  <4>一致性級別(Conformance levels)
  用ODBC設計客户端的一般步驟:
  <1>分配ODBC環境
  <2>分配連接句柄
  <3>連接數據源
  <4>構造和執行SQL語句
  <5>獲得查詢結果
  <6>斷開數據源的連接
  <7>釋放ODBC環境
  ODBC API是一種適合數據庫底層開發的編程方法,ODBC API提供大量對數據源的操作,ODBC API能夠靈活地操作遊標,支持各種幫定選項,在所有ODBC相關編程中,API編程具有最高的執行速度.因此,ODBC API編程屬於底層編程。

數據庫編程MFC ODBC連接


  MFC ODBC是MFCODBC進行的封裝,以簡化對ODBC API的 調用,從而實現面向對象的數據庫編程接口.
  MFC ODBC的封裝主要開發了CDatabase類和CRecordSet類
  (1) CDatabase
  CDatabase類用於應用程序建立同數據源的連接。CDatabase類中包含一個m_hdbc變量,它代表了數據源的連接句柄。如果要建立CDatabase類的實例,應先調用該類的構造函數,再調用Open函數,通過調用,初始化環境變量,並執行與數據源的連接。在通過Close函數關閉數據源。
  CDatabase類提供了對數據庫進行操作的函數及事務操作。
  (2) CRecordSet
  CRecordSet類定義了從數據庫接收或者發送數據到數據庫的成員變量,以實現對數據集的數據操作。
  CRecordSet類的成員變量m_hstmt代表了定義該記錄集的SQL語句句柄,m_nFields為記錄集中字段的個數,m_nParams為記錄集所使用的參數個數。
  CRecordSet的記錄集通過CDatabase實例的指針實現同數據源的連接,即CRecordSet的成員變量m_pDatabase.
  MFC ODBC編程更適合於界面型數據庫應用程序的開發,但由於CDatabase類和CRecordSet類提供的數據庫操作函數有限,支持的遊標類型也有限,限制了高效的數據庫開發。在編程層次上屬於高級編程。

數據庫編程DAO連接


  DAO(Data Access Object)是一組Microsoft Access/Jet數據庫引擎的COM自動化接口.DAO直接與Access/Jet數據庫通信.通過Jet數據庫引擎,DAO也可以同其他數據庫進行通信。DAO還封裝了Access數據庫的結構單元,通過DAO可以直接修改Access數據庫的結構,而不必使用SQL的數據定義語言(DDL)。
  DAO的體系結構如下:
DAO封裝的類:
  (1)CdaoWorkspace:對DAO工作區(數據庫處理事務管理器)的封裝
  (2)CdaoDatabase:對DAO數據庫對象的封裝,負責數據庫連接.
  (3)CdaoRecordset:對DAO記錄集對象的封裝,代表所選的一組記錄.
  (4)CdaoTableDef:對錶定義對象的封裝,代表基本表或附加表定義.
  (5)CdaoQueryDef:對查詢對象的封裝,包含所有查詢的定義.
  (6)CdaoException:DAO用於接收數據庫操作異常的類.
  (7)CDaoFieldExchange
  DAO提供了很好的數據庫編程的對象模型.但是,對數據庫的所有調用以及輸出的數據都必須通過Access/Jet數據庫引擎,這對於使用數據庫應用程序,是嚴重的瓶頸。
  DAO相對於ODBC來説,屬於高層的數據庫接口.

數據庫編程OLE DB連接


  OLE DB對ODBC進行了兩方面的擴展:一是提供了數據庫編程的OLE接口即COM,二是提供了一個可用於關係型和非關係型數據源的接口。
  OLE DB提供了COM接口,與傳統的數據庫接口相比,有更好的健壯性和靈活性,具有很強的錯誤處理能力,能夠同非關係數據源進行通信。
  與ODBC API一樣,OLE DB也屬於底層的數據庫編程接口,OLE DB結合了ODBC對關係數據庫的操作功能,並進行擴展,可以訪問非關係數據庫。
  OLE DB訪問數據庫的原理如下:
  OLE DB程序結構:
  OLE DB由客户(Consumer)和服務器(Provider)。客户是使用數據的應用程序,它通過OLE DB接口對數據提供者的數據進行訪問和控制。OLE DB服務器是提供OLE DB接口的軟件組件。根據提供的內容可以分為數據提供程序(Data Provider)和服務提供程序(Service Provider)。
  程序結構原理圖如下:
  <1> 數據提供程序
  數據提供程序擁有自己的數據並把數據以表格的形式呈現給使用者使用.
  <2> 服務提供程序
  服務提供程序是數據提供程序和使用者的結合。它是OLE DB體系結構中的中間件,它是OLE DB數據源的使用者和數據使用程序的提供者
  <3> 數據使用程序
  數據使用程序對存儲在數據提供程序中的數據進行使用和控制.
  OLE DB開發程序的一般步驟:
  <1> 初始化COM環境
  <2> 連接數據源
  <3> 打開對話
  <4> 執行命令
  <5> 處理結果
  <6> 清除對象

數據庫編程OLE DB Templates連接


  使用OLE DB接口編程屬於最低可能層,代碼冗長並且很難維護。因此MS Visual Studio對OLE DB進一步抽象和封裝,提供COM OLE DB Templates這個可行的中間層,從而簡化了OLE DB應用程序的編寫。
  OLE DB Templates編寫客户數據庫程序方法:
  <1>以MFC AppWizard為嚮導建立應用程序框架,添加OLE DB支持的頭文件,然後使用OLE DB類進行數據庫應用開發。
  <2>以ATL COM AppWizard為嚮導建立應用程序框架,該框架直接支持OLE DB模板類。
  OLE DB Templates包括:Consumer Templates和Provider Templates。
  (1) Consumer Templates使用者模板
  使用者模板(Consumer Templates)體系結構:
  
  (2) Provider Templates服務器模板
  服務器模板類體系結構:

數據庫編程ADO連接

在VB中,用户可以使用3種數據訪問接口,即ActiveX數據對象(ADO)、數據訪問對象(DAO)和遠程數據對象(RDO),其中ADO屬於最新的技術,它代表了Microsoft公司未來的數據訪問策略,也是最簡單、最靈活的數據訪問接口。 [1] 
與Data控件相比,ADO控件的功能更強,而且能夠連接任何符合OLEDB(一種數據訪問的技術標準)規範的數據源,數據源可以是本地的或遠程的各種數據庫,也可以是電子郵件數據、Web上的文本或圖形等。
ADO(ActiveX Data Object,ActiveX數據對象)是MS為最新和最強大的數據訪問接口OLE DB而設計,是一個便於使用的應用程序層接口。ADO是一種面向對象的、與語言無關的(Language_Neutral)數據訪問應用編程接口。它對OLE DB API進行封裝,實現對數據的高層訪問,同時它也提供了多語言的訪問技術,此外,由於ADO提供了訪問自動化接口,它也支持腳本語言。
ADO最主要的優點在於易於使用、速度快、內存支出少和磁盤遺蹟小。ADO是用來訪問OLE DB的數據庫技術。在模型層次上它基於OLE DB,但在應用上又高於OLE DB,因此它簡化了對對象模型的操作,並且不依賴於對象之間的相互層次關係。但是OLE的接口可以數據提供程序、服務提供程序和數據使用程序使用,而ADO所提供的對象只能被數據應用程序使用。並且,ADO對象使用了OLE DB服務提供程序和OLE DB數據提供程序所提供的接口和服務。
(1)ADO訪問數據庫的結構原理圖:
(2)ADO對象模型:
  ADO對象模型包括以下關鍵對象:
  <1>Connection對象:在數據庫應用裏操作數據源都通過該對象,這是數據交換的環境,代表與數據源的一個會話。
  <2>Command對象:是一個對數據源執行命令的定義。
  <3>Parameter對象:用於制定參數化查詢或者存儲過程的參數。
  <4>Recordset對象:是執行結果集存儲到本地的ADO對象。
  <5>Field對象:ADO中對列進行操作的對象。
  <6>Error對象:對ADO數據操作時發生錯誤的詳細描述。
  <7>Property對象:代表一個由提供者定義的ADO對象的動態特徵。
  ADO對象編程模型:
  Parameters
  Collection
  Execute
  Source
  Error Collection
  (Optional) Active Fields
  Connection Collection
  
  (3)ADO編程一般步驟:
  <1>創建一個Connection對象。
  <2>打開數據源,建立同數據源的連接。
  <3>執行一個SQL命令。
  <4>使用結果集。
  <5>終止連接。
  (4)ADO的數據庫訪問規範
  引入ADO支持
  #import Program Files/Common Files/System/ado/msado*.dll
  初始化和釋放ADO環境:
  CoInitialize(NULL);
  CoUninitialize();

數據庫編程ADO.NET

ADO.NET是一組用於和數據源進行交互的面向對象類庫。
ADO.NET的主要對象有哪些?
Connection :用於連接到數據庫和管理對數據庫的事務;
Command :用於對數據庫發出SQL命令;
DataReader :用於從數據源讀取只進數據記錄流;
DataSet :用於對單層數據、XML數據和關係數據進行存儲、遠程處理和編程;
DataAdapter :用於將數據推入DataSet,並使數據與數據庫保持一致;
參考資料
  • 1.    周淑秋等.Visual Basic程序設計教程:上海交大出版社,2012