日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【7】AccessDB快速数据访问

發(fā)布時間:2024/4/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【7】AccessDB快速数据访问 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

閱讀目錄

  • C#和VB數(shù)據(jù)訪問的比較
  • AccessDB的設計
  • 數(shù)據(jù)庫的連接
  • 三種主要操作
  • 錯誤輸出及調(diào)試
  • 小結

?

回到頂部

C#和VB數(shù)據(jù)訪問的比較

C#中要進行一次普通的數(shù)據(jù)庫查詢,需要創(chuàng)建連接,再根據(jù)具體的數(shù)據(jù)庫類型,創(chuàng)建相關的適配器對象,再創(chuàng)建命令對象,執(zhí)行后,將結果填入到Dataset中,用戶拿到Dataset后,再從其中的DataTable中取得數(shù)據(jù)。這種處理方式存在種種不便之處:

1、需要一系列復雜操作才能完成一個簡單功能,涉及的對象多、實現(xiàn)的邏輯和自然的思維習慣有所不同。

2、對不同類型的數(shù)據(jù)庫處理有所不同,用戶需要記憶不同類型數(shù)據(jù)庫之間細微的差異。

3、有些底層工作需要用戶完成,如連接有效性的檢查、出錯后連接的重建等工作。

回顧微軟的開發(fā)平臺的發(fā)展歷史,最有用戶基礎的莫過于Visual Basic了。1998年推出的VB6,在2014年的Tiobe 編程語言排行中仍在前十之列。

在VB6中,數(shù)據(jù)庫的操作可謂簡單至極,只要拖一個數(shù)據(jù)庫的控件就可以使用大多數(shù)的數(shù)據(jù)庫操作了。即使要用純代碼方式控制,也非常簡單,通過以下步驟即可完成:

上面的代碼,懶得進VB去輸入,直接手工輸入的,估計也差不離,從另一個側面也可以看出VB代碼的簡潔。習慣了這樣簡單的數(shù)據(jù)庫訪問方式,一直覺得C#中的數(shù)據(jù)庫處理方式過于復雜。正因為如此,才不斷摸索簡化數(shù)據(jù)庫訪問的手段。經(jīng)過各種思路的演化,由繁到簡,最終形成一個適用性較強的、經(jīng)過多次開發(fā)實踐檢驗的快速數(shù)據(jù)訪問機制AccessDB。

回到頂部

AccessDB的設計

從我個人的經(jīng)驗出發(fā),回顧參與過的各種軟件開發(fā)項目,數(shù)據(jù)庫訪問的要求大同小異,用20/80法則可以很好地概況:80%的情況下,只會用到20%的功能。因此,只要能夠封裝這20%的功能,就可以適應絕大多數(shù)數(shù)據(jù)庫操作的要求了。如果恰好需要剩余的20%的話,那就按照常規(guī)的方法來訪問即可。

綜合起來,希望數(shù)據(jù)訪問機制能夠達到以下的目標:

1、足夠簡單。簡單到無需記憶。

2、適用多種數(shù)據(jù)庫。中小型應用系統(tǒng)采用的數(shù)據(jù)庫類型往往多變,甚至同一個項目在不同階段更換數(shù)據(jù)庫也很常見(我的習慣是用Access開發(fā),后期換Sql Server)。因此,必須要能夠在多種常用數(shù)據(jù)庫間任意遷移。當前支持的有Access/Sqlserver/Sqlite,可以做到在切換數(shù)據(jù)庫時,只要修改連接串,代碼無需做任何改動。

3、具備擴展性。這套數(shù)據(jù)訪問機制,是隨著需求的不斷豐富,不斷重構、擴展,而變成當前的樣子的,未來可能還會不斷增加新內(nèi)容。最近的一個升級,就是解決了以前web.config中配置mdb文件路徑時,必須要使用絕對路徑的問題。

基于以上的設計目標,經(jīng)過不斷的總結,實現(xiàn)了一個以AccessDB類為核心的數(shù)據(jù)庫訪問機制。AccessDB是一個入口類,無需實例化,提供了常用的靜態(tài)方法。使用者只需記住AccessDB類名即可訪問絕大多數(shù)的數(shù)據(jù)庫功能。在整個CommonCode庫中,保持了類似的命名風格,訪問Web的入口類為AccessWeb,訪問文件的入口類為AccessFile……

AccessDB會根據(jù)初始化條件(配置文件或初始化命令)創(chuàng)建具體的數(shù)據(jù)訪問實體對象,如SqlserverDB、SqliteDB等。這些對象都實現(xiàn)了IDB接口,IDB接口的功能包括了我們常用的數(shù)據(jù)庫訪問功能。

AccessDB中直接調(diào)用IDB接口對象,執(zhí)行各種操作。因為AccessDB的主要方法都是靜態(tài)方法,因此IDB對象也必須是靜態(tài)對象。換言之,在系統(tǒng)運行中,數(shù)據(jù)庫訪問對象只有一個。在少數(shù)特殊的情況下,需要同時操作多個數(shù)據(jù)庫,這時,可以通過直接創(chuàng)建IDB對象的方法,來訪問其他的數(shù)據(jù)庫。AccessDB的結構如下圖:

上圖是在VS的類圖基礎上,按類別進行了修改調(diào)整,以便看得更加一目了然。dbobject就是IDB的靜態(tài)對象,屬性和方法中的第一層方法,都是和IDB接口對應的,一方面這些方法本身就是通用性強、常用的方法,另一方面,刻意把這些方法和IDB的接口方法保持一致,這樣,用戶在自行創(chuàng)建SqlserverDB、SqliteDB對象時,用到的方法和AccessDB是相似的,降低了使用的復雜性。

方法中的第二類,是完成靜態(tài)連接的創(chuàng)建、維護、檢查錯誤等工作的,這部分代碼經(jīng)過不斷的修改,已經(jīng)比較健壯。也就是說,使用AccessDB開發(fā)的程序,在數(shù)據(jù)庫連接方面,是比較穩(wěn)定的,不管是網(wǎng)站,還是桌面程序,長期運行(制作的若干網(wǎng)站持續(xù)運行很少因為數(shù)據(jù)庫而出問題,桌面程序中寫過一個數(shù)據(jù)采集設備的通信服務器,也可以長期運行)數(shù)據(jù)庫功能都保持正常;在中等并發(fā)節(jié)點訪問的情況下(碰到算多的情況是200左右的終端同時訪問,持續(xù)2節(jié)課)也能夠正常工作。

方法中的第三類,是常用數(shù)據(jù)操作,在本系列的另外一個帖子(【6】頁面數(shù)據(jù)和控件的自動交換機制)中,用到Add和Update以及GetEmptyRow,這些都是實際數(shù)據(jù)訪問中常用的方法。這些方法本質(zhì)上還要調(diào)用標準的數(shù)據(jù)訪問接口來實現(xiàn),只在AccessDB中提供這些實用數(shù)據(jù)操作,在具體的IDB中不提供這些方法。

回到頂部

數(shù)據(jù)庫的連接

連接可以通過兩種方式創(chuàng)建,一種方式是隱式方式,即通過配置文件來控制連接的創(chuàng)建,一種是顯示方式,調(diào)用一個方法來完成連接的創(chuàng)建。

隱式方式常用于web應用程序中連接的創(chuàng)建,顯式方式常用于桌面應用程序中連接的創(chuàng)建。

1、隱式的連接

通過配置文件創(chuàng)建連接時,使用的數(shù)據(jù)庫連接串和普通的數(shù)據(jù)庫連接串完全一致。唯一特別的要求,是配置的連接串的鍵值必須為mainDB2。因為最早的連接串名使用了mainDB2,后來盡管不斷升級,為了和前面的代碼兼容,這個就一直沒有改變。

連接串格式兼容正常的連接串,以下是連接串的各種寫法:

2、顯式連接的創(chuàng)建

通過CheckConn方法可以顯式創(chuàng)建連接。CheckConn方法的主要作用是檢測全局的連接是否存在,如果存在,則返回,否則就根據(jù)傳遞的參數(shù)創(chuàng)建連接——參數(shù)就是前面提到的各種形式的連接串。CheckConn方法是建立和保持連接的主要方法,具有以下功能:

1) 如果傳遞連接串,則創(chuàng)建連接;

2) 如果傳遞空串,則檢查原鏈接是否有效,如果失效則使用保存的連接串重建連接;

3) 自動檢測web.config文件,根據(jù)指定的連接串創(chuàng)建連接;

CheckConn的實現(xiàn)代碼如下所示:

通過調(diào)用CreateDBObj方法來創(chuàng)建連接。CreateDBObj方法根據(jù)連接串中的特征信息,創(chuàng)建不同的IDB對象,并將連接的配置信息保存起來,便于在任何時候都可以恢復連接。

為了便于使用,兩個輔助的函數(shù)GetAccessConnectionString和GetSqlServerConnectionString,構造常見的連接串。

連接的保持,采用了被動方式進行。即不進行主動的定期檢測,而是在每次調(diào)用數(shù)據(jù)庫功能的時候進行檢測。如果遇到異常,則重建連接并重新執(zhí)行操作。

回到頂部

三種主要操作

1、查詢數(shù)據(jù)集

調(diào)用IDB接口對象dbobject中的GetData方法,將數(shù)據(jù)返回。

其中dbobject是根據(jù)連接所創(chuàng)建的具體的實現(xiàn)類。

2、執(zhí)行非查詢操作

非查詢操作的執(zhí)行和查詢一樣,都是調(diào)用IDB對象的相應方法來實現(xiàn)。

3、按分頁查詢

分頁功能是Web應用程序中最為常用的功能,但是,如果按照Visual Studio的分頁的方式,則每次需要查詢出所有的數(shù)據(jù),再傳遞給顯示控件,這種處理模式在數(shù)據(jù)量龐大的時候,將會造成巨大的浪費。因此,對于分頁往往需要自行定義,每次檢索只查詢用到的那一頁數(shù)據(jù)。一般的做法,是通過存儲過程來完成,但考慮到多種數(shù)據(jù)庫的兼容,因此把分頁功能集成到快速訪問框架中。

AccessDB的GetPage同樣需要調(diào)用IDB對象的方法:

分頁的方法沒有什么特別的,都是來源于網(wǎng)上的,經(jīng)過測試,效率還能接受而已。

回到頂部

錯誤輸出及調(diào)試

AccessDB的調(diào)試非常簡單,所有重要操作都會跟蹤并輸出日志信息。日志系統(tǒng)采用另一篇博文提到的基于Log4Net的日志系統(tǒng)。

當AccessDB出錯后,可以從錯誤日志中看到詳細的信息。如果希望了解AccessDB執(zhí)行的具體細節(jié),可以通過IDB的兩個屬性OutputSelectLog、OutputNonQueryLog來控制。OutputSelectLog屬性,決定是否輸出執(zhí)行的每一個Select語句;OutputNonQueryLog屬性,決定是否輸出執(zhí)行的非查詢類的語句。默認情況下,二者都關閉。

回到頂部

小結

以AccessDB為中心,提供了一套快速的數(shù)據(jù)庫訪問機制,通用的使用步驟如下:

1、引用CommonCode.dll,Log4Net.dll。把log4net.config復制到應用程序文件夾下。

2、初始化(web.config或者CheckConn)

3、GetData/Getpage查詢,返回DataTable

4、DoNonQuery執(zhí)行查詢

5、在log文件夾下查看輸出

轉載于:https://www.cnblogs.com/jetz/p/3744925.html

總結

以上是生活随笔為你收集整理的【7】AccessDB快速数据访问的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。