本書深入淺出地介紹了ADO與ADO.NET編程,介紹用這兩種API編寫適用于各種數據源和前端的數據訪問代碼,介紹如何用ADO技術支持遺留系統(tǒng),如何利用ADO.NET的特殊功能,如XML支持與切斷數據。還介紹了結構修改、數據同步、多維累計之類的功能。書中詳細介紹了客戶端與服務器方功能,還介紹了SQLSever、Oracle和Jet,VisualBasic、Access和Excel,還可以充分利用.NET平臺的特性。本書是數據庫編程方面的優(yōu)秀讀物,非常適合于開發(fā)人員使用.前言我在PC機上使用的第一個數據庫是PC-File,也許你根本沒有聽說過,當時這是Buttonware公司的產品(該公司是JimButton創(chuàng)辦的,他是“共享件之父”),是相當高級的。PC-File是個平面文件數據庫,可以自己配置。在20世紀80年代中期和后期,我大量用PC-File管理郵件清單和其他信息。但由于PC-File的過時文件格式和磁盤尺寸的改變,我在PC-File數據庫中的信息早已消失了。PC數據庫訪問的一般化API還沒有發(fā)明,把數據放在PC-File數據庫中,它會保持在那里。20世紀90年代初,短暫使用Q&A編程之后(這是個集成很差的程序,不值一提),我轉而用MicrosoftAccess滿足數據庫需要。Windows對PC世界進行了變革性的編程(盡管曾幾何時,人們懷疑Windows或OS/2能否成為廣泛接受的平臺),Access是這場風暴的一部分。這個桌面數據庫不僅能夠完成PC-File和Q&A夢寐以求的工作,而且可以實際讀取用其他文件格式存儲的數據。如果愿意,也可以用Access直接竊取dBASE編程人員的數據。與此同時,還出現了Microsoft公司的第一個數據訪問對象模型DAO。我至今記得當時的缺陷報告,Users有個Groups集合,而Groups有個Users集合——當然,這個特性是完全故意的。此后Microsoft在數據訪問方面進步不大,但1996年,DAO第一版過時,Microsoft文獻中開始大量出現UDA(通用數據訪問)一詞。我個人認為UDA是個管道,是進行相互連接的標準管道,能夠緊固所有接頭,轉換數值,讓數據從應用程序一端流到另一端。不同尺寸的管道之間要用接頭和耦合器進行連接,使來自不同來源的項目能夠相互連接。ADO提供了數據訪問編碼模式,可以一遍一遍地復用,不管一端的用戶界面和另一端的數據源如何。2002年,出現了ADO.NET。根據我自己的經驗,我相信這是今后五年我自己的應用程序中大部分數據訪問代碼要使用的API。從某種意義上說,ADO.NET是ADO的改進;從某種意義上說,ADO.NET又是全新的世界觀。最主要的新功能是切斷數據和XML兼容性。ADO可以在任何應用程序中使用任何數據源,ADO.NET改進了這個功能,不再需要與數據源保持連接??梢匀〉靡玫臄祿?,通過HTTP將它發(fā)送到全世界,明天再進行編輯,后天再發(fā)送回去,而更新照樣能夠成功。ADO.NET和一般.NETFramework必將大大改變開發(fā)人員編寫與部署應用程序的方式(從桌面到Web)。.NETFramework平臺消除了桌面編程與分布式編程的大部分差別,只要學習一種(盡管相當復雜)數據訪問技術,就可以隨處使用。.NETFramework可以在具有完全特性的IDE中編寫代碼,結果又可以在幾乎任何Web瀏覽器中使用,開發(fā)人員不用編寫一行HTML代碼。Microsoft公司在數據訪問與框架開發(fā)方面的數年經驗將對采用這個新環(huán)境的用戶大有幫助。另一方面,新代碼出現了,并不表明舊代碼就要死亡了。ADO仍然是今后幾年可行的數據?夢蔄PI,有些方面仍然明顯優(yōu)于ADO.NET。例如,有些OLEDB提供者測試并支持ADO,但還不支持ADO.NET。如果要使用這些提供者,則只能使用ADO。不難看出,數據訪問是任何真正應用程序代碼的一部分,封閉的、相互不可操作的文件格式(曾記得PC-File?)使開發(fā)人員很難處理數據。當然,在ADO與ADO.NET世界中,仍然要學習許多不同技術。從簡單數據檢索與編輯到結構修改與多維累計,到使用XML表示同步關系型數據,這些API有許多用途。本書要廣泛介紹ADO.NET與ADO,但不準備詳細介紹每個細節(jié),例如OLAP或SQLServer開發(fā)本身就可以寫成一本書。但本書可以作為所有數據訪問工作的第一參考書。本書的組織本書包含六個部分和一些附錄。第一部分(第1章~第2章)概述數據訪問問題。這幾章介紹本書使用的軟件,簡要介紹早期的Microsoft數據訪問API,然后介紹ADO與ADO.NET的總體體系結構。第二部分(第3章~第10章)介紹基于COM的“傳統(tǒng)”ADO。這幾章介紹讀取與改變數據的基礎以及一些高級技術,如使用層次式Recordsets、切斷數據和ADO事件。第三部分(第11章~第13章)介紹.NETFramework,其中有些材料不完全針對數據訪問,但這也許是許多讀者第一次接觸.NET。這個部分還介紹.NET應用程序中基于COM的ADO。第四部分(第14章~第19章)詳細介紹ADO.NET,首先介紹檢索與編輯數據的基礎,然后介紹一些高級技術,如XML同步和使用ASP.NET與ADO.NET。第五部分(第20章~第23章)主要介紹ADO的提供者特定方面。盡管ADO可以使用不同來源的數據,但也可以利用各個數據源的特殊功能。本書這個部分介紹SQLServer、Oracle、Jet和另外幾個不常見的提供者。第六部分(第24章~第27章)介紹客戶端特定技術,包括從VisualBasic、Access、Excel與VisualBasic.NET中使用ADO與ADO.NET。最后,本書幾個附錄介紹書中使用的主要對象模型,以及一些重要實用程序和SQL與MDX查詢語言入門知識。說明:本書中的ADO指COM對象的ADO2.7庫,除非另有說明;新的.NET版本指ADO.NET。關于樣本代碼本書選配光盤包含書中的所有樣本代碼。使用樣本代碼時要注意幾點:·大多數情況下,每章有一個樣本代碼。樣本代碼采用簡單的命名規(guī)則:例如ADOChapter3樣本代碼包含第3章的所有代碼?!DO樣本通常用VB6編寫,而ADO.NET樣本通常用VisualBasic.NET編寫。本書第六部分的有些樣本代碼是對Access2002與Excel2002編寫的?!ご蠖鄶禈颖咀畛躏@示一個菜單窗體,有一組按鈕,運行本章的各段代碼,哪個按鈕對應哪段代碼是一目了然的?!に写绑w用窗體名作為窗體標題。這樣,如果屏幕圖形中標題為“frmHierarchy”,則很容易找到樣本項目中的相應窗體。·大部分代碼是演示質量的,而不是生產質量的。特別是,大多數樣本代碼的錯誤捕獲很簡單(只限于向用戶界面顯示錯誤)或根本沒有。要在應用程序中使用這些代碼,就要進行一些修改。更新本書是2001年用下列軟件寫成的:·SQLServer2000withServicePack1·VisualBasic6withServicePack5·Windows2000withServicePack2·OfficeXP·Oracle8iRelease3(8.1.7)·VisualStudio.NETBeta2我用VisualBasic與VisualBasic.NET提供樣本代碼,因為這是廣泛使用的語言,適用于本書介紹的所有API和對象。這些語言也使開發(fā)人員更容易閱讀,即使不是VisualBasic開發(fā)人員。當然,編寫的軟件難免要進行更新。細心的讀者可以將找到的任何缺陷告訴Sybex公司和作者本人。如果樣本代碼有任何重大修改,將在Sybex網站www.sybex.com中提供(在Sybex主頁Search框中輸入本書ISBN號2994找到本書頁面)。特別地,發(fā)布VisualStudio.NET時,我會發(fā)布.NET樣本代碼的更新拷貝,供讀者下載。如果發(fā)現樣本代碼中的任何問題或者有任何意見與建議,歡迎發(fā)E-mail到MikeG1@larkfarm.com。當然,我不能保證每信必復,但我會盡力而為。關于本書選配光盤本書選配光盤包含下列內容:·本書的所有樣本代碼和應用程序·附錄E“ADO和ADO.NET實用程序”·附錄F“SQL和MDX語言入門”·開放源代碼MySQL數據庫·GeorgePoulouse的ADO查詢工具·SmithVoice的數據庫代碼創(chuàng)建器·PEYO的ADOExplorer·LockwoodTechSoftware的Query-Blaster與Proc-Blaster·JosephAlbahari的ADO.NETQueryExpress·BlueshellDataGuy要使用本書選配光盤內容,只要將光盤插入光驅中,即可自動啟動光盤的安裝程序。如果關閉AutoPlay特性,則可以打開本書選配光盤根目錄中的readme.htm文件,看看如何使用。致謝感謝編輯組將模糊的思想變成這本書:RichardMills、DeniseSantoroLincoln、ChristineMcGeever、LizBurke、JimGabbert與AceyBunch。感謝生產小組完成了許多艱辛的工作:MaureenForys、TonyJonick、NancyRiddiough、YarivRabinovitch、NelsonKim、NanetteDuffy、JenniferCampbell、LaurieOConnell、EricaYee與KevinLy。除了寫序之外,KenGetz還幫我處理了許多編程問題。AndyBaron、MaryChipman與BrianRandell也在多年來幫我理解了數據訪問的許多技術。當然,還有很多朋友給予過幫助?!癝martAccessExtra”的讀者和AccessD郵件清單貢獻者推動我涉及了ADO世界的邊邊