【文章內容簡介】
在 1998 年, Microsoft 公司發(fā)布具有巨大變化的 SQL 版本。 SQL 版本在數(shù)據(jù)存儲和數(shù)據(jù)引擎方面發(fā)生了根本性的變化。又經(jīng)過兩年的努力開發(fā),于 2020 年9 月發(fā)布了 SQL Server2020。從 SQL 到 SQL Server2020的變化是漸進的,沒有從 到 版本變化那么大,只是在 SQL 版本的基礎上進行了增強。 SQL Server 數(shù)據(jù)庫體系結構的核心是服務器,既數(shù)據(jù)庫引擎。SQL Server 數(shù)據(jù)庫引擎負責處 理到達的數(shù)據(jù)庫請求,并把相應的結果反饋給客戶端系統(tǒng)。 SQL Server 充分利用了可設置優(yōu)先權的多任務、虛擬內存和異步 I/O 功能,這些都是 Windows NT/2020 操作系統(tǒng)的一部分。 SQL Server 數(shù)據(jù)庫引擎可以在多線程內核上創(chuàng)建,這樣在處理多個事務的時候可獲得較高的性能。從伸縮性上來說, SQL Server 使用并行體系結構,允許自動將工作負荷分布在多個 CPU 上。對 SMP 的支持允許分離任務,以便在每個處理器上同時運行。 SQL Server 在啟動時自動檢測可用的處理器數(shù)量,并立即使用這些處理器,但并 不需要增加任何外的設置。 Microsoft SQL Server2020 是一個關系數(shù)據(jù)庫系統(tǒng),具有很大的伸縮性,既適用于桌面系統(tǒng)的單個用戶數(shù)據(jù)庫,也適用于企業(yè)級的網(wǎng)絡數(shù)據(jù)庫,甚至適用全球的 Web 站點數(shù)據(jù)庫。 SQL Server2020 是 SQL Server 的第 8 個發(fā)行版本,能夠提供一個功能豐富、成熟且穩(wěn)定的平臺。 高級數(shù)據(jù)訪問對象 ADO 介紹 OLED 和 ADO 是由 Microsoft且開發(fā)的最新數(shù)據(jù)庫訪問編程接口。毫無疑 N. ADO 是 Microsoft 提供的眾多數(shù)據(jù)訪問 API 中使用最廣的一種。至于 OLEDB, Microsoft 將其定位為 ODBC 技術的“接班人”。12 由于 ODBC 已經(jīng)取得了巨大的成功,因此 OLEDB 必須提供更為強大的功能,才能真正代替 ODBC 的地位。目前, ODBC API 已經(jīng)為廣 大用戶所接受,它提供了對用戶 自 定義的數(shù)據(jù)庫應用程序的支持。人多數(shù)的桌面軟件如 Microsoft 的 office 等,都支持 ODBC API。主要的數(shù)據(jù)庫系統(tǒng)都帶有相應的 ODBC 驅動程序。當然, ODDC 也有一定的局限性,這是因為最初設計 ODBC 的 目 的是為了處理關系數(shù)據(jù),在SQL 語句基礎上發(fā)展起來的 ODBC API 可以很好地處理 關系數(shù)據(jù)庫,但是對于非關系 型 的數(shù)據(jù)庫就無能為力了。 與 ODDC 類似, OLEDB 提供了對關系數(shù)據(jù)庫的訪問,不過在此基礎上,它對 ODBC 所提供的功能進行了一部分的擴展。作為一種標準的接口, OLE DB 可以訪問所有類型的數(shù)據(jù),既包括關系數(shù)據(jù)庫,也包括其他多種類型的數(shù)據(jù)源,例如: Excel 電子表格類型的列表數(shù)據(jù), dBase 等 ISAM 類型的文件, E_mail,或者 windows 2020 的活動目錄等。甚至連 IBM 主機上使用的 DB2 數(shù)據(jù), OLE DB 都可以進行訪問。使用 OIE DB,用戶可以使用問一個接口訪問多 種不同的、分散的數(shù)據(jù)源 . OLEDB 和通用數(shù)據(jù)訪問 從 OLE DB 的名稱上很容易知道, OLE DB 是基于 OLE 技術的。與0DBC 不同, 0DBC 提供了動態(tài)鏈接庫 (DLL)的調用接口,而 ADO 提供給OLE DB 的是 COM 接口。這樣其他遵從 OLE 規(guī)范的應用程序也可以進行調用。 Micro 的數(shù)據(jù)訪問策略叫做通用數(shù)據(jù)訪問 (Universal Data Access),是指一組通用接口,可以用來描述任何數(shù)據(jù)源所包含的數(shù)據(jù), OLE DB 就是這種通用數(shù)據(jù)訪問的基礎。如果說任何對象都可以存儲在數(shù)據(jù)庫中,那么通用數(shù)據(jù) 接口和 OLE DB 就是實現(xiàn)它們的橋梁,二者分別位于橋梁的兩端。以前,對于每一個事務,都按其請求將所13 有的數(shù)據(jù)移動到一個面向對象的數(shù)據(jù)庫中去,并為所有類型的數(shù) 據(jù) 提供一個類似的接口。 用戶 可以便用 OLE DB 訪問所有可用基本行列格 。 OLEDB 體系結構概述 一般說來,使用 OLE DB 的應用 程序可以 以分為兩種: OLEDB 提供者(OLE DB Providcr)和 OLE DB 使用者 (OLE DB Consumer)。 下圖 給出了 OLE DB 提供者和使用者的關系。 圖 21 OLE DB提供者 和使用者 從圖中 以看出, OLE DB 使用者就是使用 OLE DB 接口的應用程序。而 OLE DB 提供者則負責訪問數(shù)據(jù)源,并通過 OLE DB 接口向 OLE DB使用者提供數(shù)據(jù)。需要泣意的是: OLE DB 提供者有兩種類型:數(shù)據(jù)提供者 (data provider)和服務提供者 (service provider)。數(shù)據(jù)提供者只是簡單地從數(shù)據(jù)源中提取數(shù)據(jù),而服務提供者則負責作輸和處理數(shù)據(jù)。服務提供者還提供很多增強型函數(shù),來擴展 OLE DB 數(shù)據(jù)提供者的數(shù)據(jù)訪問功能。 Microsoft Query 就是 OLE DB服務提供者的 例子,而 Microsoft 的 OLE DB Provider for SQL Sever 則是數(shù)據(jù)提供者的一個范例 .OLE DB 根據(jù)不同的 oLE DB 提供者的能力選擇提供不同層次的功能。所有的 OLE DB 驅動成序都支持一個通用的接口,因而每一個獨立的驅動程序都可以 應用 程序( OLEDB 使用者) OLEDB 接口 OLEDB 提供者 數(shù)據(jù)源 14 在 OLE DB 所提供的最基本的功能基礎上進行擴展。與 ODBc 類似,每— 個不同的 OLEDB數(shù)據(jù)源都使用自己相應的 oLEDB提供看。 Sqlserver 2OOO 配有以下幾種 OLE DB 提供者: OLEDB Provider For SqlServer OLEDB Provider For ODBC OLEDB Provider For JET OLEDB Provider For DTS PACKAGES OLEDB Provider For Oracle 下圖 描述丁怎樣使用不同的 OLE DB提供者來訪問不同的數(shù)據(jù)源。 圖 21 OLE DB概覽 該圖從較高的層次給出了 Visual Basic 應用程序怎樣使用 OLE DB 來訪問多種異構數(shù)據(jù)源的方法。除了 ODBC 數(shù)據(jù)庫外,其他不同的數(shù)據(jù)源都使用不同的 OLE DB 提供者進行訪問 。舉例來說, SQL Server數(shù)據(jù)庫需要使用 SQLOLEDB(Microsoft 的 SQL Server OLE DB 提供者 )進行訪問。 Microsoft Excel 或各 Exchange 數(shù)據(jù)源中的數(shù)據(jù)則要使用相應的 OLE DB 提供者進行訪問。這種一個 OLE DB 提供者對府一個數(shù)據(jù)源的規(guī)則對于 ODBC 則不適用。為了能夠最大限度地與現(xiàn)有的15 ODBC 數(shù)據(jù)源保持兼容, Microsoft 開發(fā)了 MSDASQL,它是一種用于訪問 ODBC 的 OLEDB 提供者。與其他大多數(shù) OLE DB 提供者能夠直接訪問數(shù)據(jù)庫不同, MSDASQL 使用已有的 ODBC 驅動程序來訪問數(shù)據(jù)。它將OLE DB的調用映射成對應的 ODBC調用。正因為這種工作方式, MSDASQL提供的功能與 ODBC驅動程序密切相關。 SQL Server2020 所帶的 OLEDB Provider for ODBC 2. 6 與以下的 Micosoft ODBC 驅動程序兼容: SQl Server 7 和 SQL Server 2020 所帶的 SQL Server6. 5 所帶的 ODBC 每一個 OLEDB 提供者都提供數(shù)據(jù)訪問能力,并通過它的 COM 接口給出相應的功 能。然而, OLE DB COM 接口是一種底層的接口,要求用戶必須可以使用指針、數(shù)據(jù)結構,并 可以直接進行內存分配。因此對十一些不支持底層功能的開發(fā)環(huán)境,如: Visual Basic、 VBA、 VBScipt、 Java、 JScript、 JavaScript等等,就不能直接使用 0LR DB 提供者。不過沒關系 Micmson 提供了ADO 技術。對于那些小支持底層內存訪問和操作的交互式腳本語言,亦需要訪問數(shù)據(jù)時,可以使用 AD0 來訪問 OLE DB 提供者。 ActiveX 數(shù)據(jù)對象 (AD0) ADO本質上就是一個 OLEDB提供者,提供了在應用程序級上對 OLE DB 數(shù)據(jù)源的訪問能力。 ADO 是一個 OLE 自動化服務器,大多數(shù)支持OLE 的升發(fā)環(huán)境和腳本環(huán)境都可以 訪問該服務器。 AD0 還是許多Microsoft開發(fā)工具的標準組件 ,并隨之一起發(fā)布 .這些開發(fā)工具包括 Visual Visual Studio Enterprise Edition 1 和 6 Visual Basic Enterprise Edition 4 5 和 6 Visual InterDev 6 16 Microsoft Office 2020 Devetoper Edition SQL Server2020 AD0還是許多 Microsoft開發(fā)工具的標準組件 ,并隨之一起發(fā)布 .這些開發(fā)工具包括 . Visual Visual Studio Enterprise Edition 1 和 6 Visual Basic Enterprise Edition 4 5 和 6 Visual InterDev 6 Microsoft Office 2020 Devetoper Edition SQL Server2020 從上圖中可以看出, OLE DB 提供了兩種截然不同的訪問 SQL server 數(shù)據(jù)的方法:用于訪問 SQL Server 的 OLE DB 提供者和用于訪問 ODBC 的 OLEDB 提供者。 ADO 和這兩種 OLE DB 提供者都可以結合工作。 ADO 充分利用了這種多層結構,從而保證了那些使 川 ADO 對象框架的應用程序與底層的網(wǎng)絡協(xié)議和拓撲結構相互獨立。下圖描述了 ADO、 OLE DB、 OD8C 和 Pc 機網(wǎng)絡環(huán)境之間的關系。 圖 23 ADO所用的網(wǎng)絡組件 圖 23 的最上 層是 Visual Basic ADO 應用程序。它創(chuàng)建和使用了多個 ADO 對象。 ADO 對象框架負責調用適當?shù)?OLE DB 提供者。如果ADO 應用程序使用了 ODBC 的 OLEDB 提供者,那么就會相應地用到17 MSDASQL OLEDB 提供者。如果 ADO 應用程序使用的是 SQLServer 的OLEDB提供者,則會用到 SQLOLEDB提供者。當程序使用 ODBC的 OLE DB提供者時, ADO 將裝載 ,再由該動態(tài)鏈接庫裝載 ODBC 驅動程序管理器。 ODBC 的 OLE DB 提供者將 ADO 發(fā)出的 OLE DB 調用映射成對 應的 0DBC 調用,之后再傳遞給 ODBC 驅動程序管地器。 ODBC 驅動程序管地器負責裝載正確的 ODBC 驅動程序。特別需要注意的是: ODBc 驅動程序為了與訪問目標數(shù)據(jù)庫的遠程 IPC(Interprocess Communication)服務器進行通信,一般采用一種網(wǎng)絡進程間通信 (IPC)的方法來實現(xiàn),如命名管道 (Named Pipe)、 TCP/ IP 套 接字或者 SPX等。本地 SQL Server 的 OLE DB 提供者不使用任何附加的中間層。當使用 SQL server 的 OLE DB 提供者時, ADo 加載 ,由該動態(tài)鏈接庫裝載并使用適當?shù)木W(wǎng)絡 IPC 方法與數(shù)據(jù)庫進行通信。 IPC客戶端端組件通過所用的網(wǎng)絡協(xié)議來與相應的服務器端 IPC 建立通信這接。網(wǎng)絡協(xié)議負責發(fā)送和接收 IP 數(shù)據(jù)流。常用的網(wǎng)絡協(xié)議有; NetEuI, TCP/IP 和 IPX 等。圖 23 的最下面是所用的網(wǎng)絡拓撲結構。網(wǎng)絡物理層也括在 網(wǎng)絡中進行實際連接的網(wǎng)卡和電線。以太網(wǎng)和令牌環(huán)網(wǎng)是最常用的兩種網(wǎng)絡拓撲結構。 ADO 體系結構 與其他的數(shù)據(jù)訪問對象模型類似, ADO 也是采用層次對象框架 S實現(xiàn)的。但是 ADO 比 DAO(數(shù)據(jù)訪問對象 )和 RDO(遠程數(shù)據(jù)庫對象 )框架更為簡單。圖 24 給出了 ADO 對象的層次結構圖。 Connection、Recodset 和 Command 對象是 AD0 對象模型的三個主要對象。 Conion 對象代表與遠程數(shù)據(jù)源的連接,它除了負責建立與數(shù)據(jù)源的連接之外,還負責控制事務的范圍。 Connection 對象與 Recordset和 Command 對象相互關聯(lián)。 Recordset 對象代表從數(shù)據(jù)源返回的結果集。 ADo Recordset 對象可以便用一個打開的 Connection 對象,也可以自己建立與目標數(shù)據(jù)源的連接 。 Recordset 對象允許用戶查詢18 和更新數(shù)據(jù)。每個 Recordset 對象包括了一個 Field 對象集合。集合中的每一個 Field 對象代表 Recordset 中的 — 列數(shù)據(jù)。 Comm