《電子技術應用》
您所在的位置:首頁 > 其他 > 设计应用 > 基于.NET的数据访问策略研究与实现
基于.NET的数据访问策略研究与实现
毛 莉1, 刘广强2
摘要: 基于.NET构架的四种数据访问策略,以及这些策略对连接数据源的要求和数据库读取方式的内部运行机制。
關鍵詞: 数据库 数据访问 .NET
Abstract:
Key words :

  摘  要: 基于.NET構架的四種數(shù)據(jù)訪問策略,以及這些策略對連接數(shù)據(jù)源的要求和數(shù)據(jù)庫讀取方式的內部運行機制。
  關鍵詞: 數(shù)據(jù)提供程序  .NET  Data Access

   .NET提供了編寫分布式應用程序的模型,此模型簡單明了,功能強大。ADO.NET是.NET中對數(shù)據(jù)存取問題的解決方案。.NET定義了二種數(shù)據(jù)提供程序(SQL Server.NET和OLE DB.NET)來連接數(shù)據(jù)源,提供了DataReader和DataSet二種方法讀取數(shù)據(jù)庫中的數(shù)據(jù)。本文結合具體實例介紹使用不同的策略訪問數(shù)據(jù)庫的方法,并歸納總結了各種數(shù)據(jù)庫訪問策略適用于何種系統(tǒng)環(huán)境。
1  .NET數(shù)據(jù)提供程序和數(shù)據(jù)讀取方式簡介
1.1 .NET數(shù)據(jù)提供程序

  .NET數(shù)據(jù)提供程序是為連接到特定數(shù)據(jù)源而優(yōu)化的專門類集,它通過繼承System Data中的IdbAdapter接口來構建。目前的.NET SDK版本中,Microsoft提供了二個數(shù)據(jù)提供程序。如圖1所示:①SQL Server.NET數(shù)據(jù)提供程序用于連接到Microsoft  SQL  Server 7.0和更高級版本上。②OLE DB.NET數(shù)據(jù)提供程序是常規(guī)的數(shù)據(jù)提供程序,用于連接到任何經(jīng)過傳統(tǒng)OLE  DB提供程序訪問的任何其他數(shù)據(jù)源。

 


1.2 數(shù)據(jù)讀取方式
  ADO.NET提供DataSet和DataReader二種不同的方式讀取數(shù)據(jù)庫中的數(shù)據(jù)。DataReader提供只向前的讀取方法,通過執(zhí)行命令在數(shù)據(jù)源生成結果集。一次只能使用單個結果集,如果要同時使用一個以上的結果集,就需要有多個活動的DataReader;DataSet是一個內存數(shù)據(jù)庫,它能保存幾個表,可以使某個內部表與其他內部表相關聯(lián),還可以管理對數(shù)據(jù)的約束條件并暫存數(shù)據(jù)。
1.3 訪問數(shù)據(jù)庫策略
  在訪問數(shù)據(jù)源時,首先需要連接數(shù)據(jù)庫,然后將數(shù)據(jù)庫中的數(shù)據(jù)讀取到內存中,再對數(shù)據(jù)進行操作。這樣就存在四種訪問數(shù)據(jù)庫策略,如表1所示。

 


2  基于不同策略訪問數(shù)據(jù)源的示例
2.1 在SQL Server中使用DataSet

  本例將查詢SQL Server數(shù)據(jù)庫。首先將數(shù)據(jù)存儲到DataSet中,然后顯示這些數(shù)據(jù)。假設服務器名為HPDB,將SQL Server數(shù)據(jù)庫實例名定義為TEST,用戶名為SA,密碼為空,關系名為EmpList。數(shù)據(jù)結構如表2所示。


  該操作步驟如下:
  (1)使用SQL Server7.0數(shù)據(jù)庫的SqlConnection連接數(shù)據(jù)庫。
  (2)創(chuàng)建一個DataSet對象。
  (3)使用SqlDataAdapter對象的Fill( )方法,將數(shù)據(jù)庫中的數(shù)據(jù)加載到DataSet中。
  (4)利用DataSet對象的Tables方法指定DataTables集合的錨點。
  (5)利用Foreach的嵌套操作顯示EmpList表中的數(shù)據(jù)。
  以下為該示例程序的完整代碼:
  

  

  運行結果如表3所示。


2.2 在OLE DB數(shù)據(jù)源中使用DataReader
  OLE DB數(shù)據(jù)源是指具有OLE DB驅動程序的任何數(shù)據(jù)源,其中包括Access、Oracle、DB2、SQL Server6.0版本或更早期版本。本例是連接到Microsoft Access 7.0數(shù)據(jù)源,關系名為EmpList,數(shù)據(jù)結構如表2。
  操作步驟如下:
  (1)使用Microsoft Access數(shù)據(jù)庫的OLE DB 連接數(shù)據(jù)庫。
  (2)通過將SQL SELECT 語句和OleDbConnection對象作為參數(shù)傳遞到重載構造函數(shù)來創(chuàng)建OleDbCommand對象。
  (3)調用OleDbCommand對象的ExecuteReader( )方法并存儲返回的OleDbDataReader對象。
  (4)調用OleDbDataReader對象的Read( )方法,在屏幕上打印結果,直到返回false為止。
  (5)如果出現(xiàn)異常,發(fā)出消息。
  該示例的代碼如下:
  

  

  運行結果同表3。
3  比  較
3.1 比較二種不同的數(shù)據(jù)連接方式
  ADO.NET提供了一組功能強大的類,用于連接到數(shù)據(jù)庫、執(zhí)行SQL語句和調用存儲過程。使用SqlConnection類就可以連接到SQL  Server 7.0和更高級版本,而使用OleDbConnection類可以連接到SQL Server數(shù)據(jù)庫6.0版本或更早期版本以及其他OLE DB數(shù)據(jù)源。連接到數(shù)據(jù)庫必須使用恰當?shù)?NET數(shù)據(jù)提供程序。
  由于.NET數(shù)據(jù)提供程序具有與SQL  Server進行信息交流的能力,所以訪問數(shù)據(jù)速度相當快。但是并非每個用戶都使用SQL Server。所以OLE DB保留了仍然受到廣泛支持的訪問數(shù)據(jù)標準。事實上,在開發(fā)更多被優(yōu)化用于特定數(shù)據(jù)庫的數(shù)據(jù)提供程序之前,OLE DB類只是權宜之計。無論是從數(shù)據(jù)連接、數(shù)據(jù)提取、數(shù)據(jù)更新方面,SQL Server.NET提供程序的執(zhí)行效率比OLE DB.NET提供程序都具有明顯優(yōu)勢。
3.2 比較二種不同的數(shù)據(jù)庫讀取方式
  使用DataReader可以處理連接數(shù)據(jù),一次只載入一行數(shù)據(jù),這樣能提高應用程序的總性能并降低系統(tǒng)開銷。雖然DataReader運行速度很快,但是其功能非常有限。DataReader提供的數(shù)據(jù)不能被修改,DataReader的標準上沒有引用以前提供數(shù)據(jù)元素的方法,DataReader需要數(shù)據(jù)庫持久的、活動的連接。
  DataSet是ADO.NET中的主類,因為它允許表示客戶端上的多個表、關系和約束條件,甚至可以將整個數(shù)據(jù)庫保存在客戶端,能將對數(shù)據(jù)庫的修改推回到數(shù)據(jù)存儲器中。DataSet能有效地為從數(shù)據(jù)源中讀取的數(shù)據(jù)提供內存高速緩存。與DataReader不同,它會讀取并將整個數(shù)據(jù)立即保存到內存中。一旦填充完數(shù)據(jù),DataSet就會完全從其原始數(shù)據(jù)源斷開。
  與其他任何工具一樣,DataReader和DataSet也都適合于某些特定的應用。例如,DataReader適用于快速獲取綁定到只讀空間的大量數(shù)據(jù),而DataSet則更適用于編輯合并來自多個數(shù)據(jù)源的數(shù)據(jù)。
4  總  結
  使用ADO.NET訪問數(shù)據(jù)時,如果數(shù)據(jù)源是SQL  Server7.0或更高級版本,則建議采用SqlConnection類進行數(shù)據(jù)庫連接;如果數(shù)據(jù)源是SQL Server數(shù)據(jù)庫6.0版本或更早期版本以及其他DBMS,則只能使用OleDbConnection類;如果只是在Web窗體中簡單顯示數(shù)據(jù),則將幾十行的數(shù)據(jù)“推入”DataSet是沒有意義的,建議使用DataReader。同理,使用DataReader填充編輯時保存數(shù)據(jù)的集合,然后編寫已修改數(shù)據(jù)填充回數(shù)據(jù)源的方法非常低效,這時建議使用DataSet。
參考文獻
1   Ferracchiati F C,Glynn J. .NET數(shù)據(jù)服務C#高級編程.北京:清華大學出版社,2001
2   金燦. .NET框架中三種數(shù)據(jù)訪問技術及效率比較.計算機應用研究,2003;(4)
3   Dickinson P. ADO.NET高級編程.北京:中國電力出版社,2003
 

此內容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉載。