熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

掌握ADO.NET的十個熱門技巧[1]

2013-11-13 11:05:51  來源: .NET編程 

  ADONET提供了一個統一的編程模式和一組公用的類來進行任何類型的數據訪問而不管你用何種語言來開發代碼ADONET是全新的但又與ADO盡可能保持一致它使編程模式從一個客戶端/服務器基於連接的模式轉變到了一個新的模式這個新模式可以讓斷開的前端下載記錄離線工作然後重新連接來提交變化ADONET是WinForms應用程序ASPNET應用程序和Web services的一個共有的特點其功能可以跨LAN和Internet連接來實現可以在有狀態(stateful)和無狀態(stateless)情況下實現
 
  這就意味著作為一個共有的技術ADONET的對象在所有可能的環境中並不是同等強大的用ADONET為一個富客戶端(rich client)構建一個數據層同為一個客戶端通常是共享的和重要的實體(如Web服務器)的Web應用程序構建一個數據層並不一樣
 
  如果你從前是個ADO開發人員現在已經用ADONET了那麼你可能把數據訪問看做是一個萬能的對象如Recordset我們很自然地會將舊的對象模式同新的對象模式匹配起來並將現有的方法用於NET應用程序然而在ADO環境中的某些好的方法在轉換到ADONET環境時就可能並不強大了而且看起來很微不足道的ADONET對象模式的復雜性可能會導致很糟糕的編程情況不理想的代碼甚至是功能不能實現我將講述在ADONET編程中可能會給你帶來麻煩的個方面並提供技巧和解決方法來避免它們
 
   避免DatabaseAgnostic形式的編程

  ADONET中的數據訪問是強類型的就是說在任何時候你都必須了解你正在處理的是什麼數據源(data source)相反在ADO中你可以編寫數據訪問代碼(它們充分利用了OLE DB提供者的通用模式)並將基本的數據源只看做是個參數ADO對象模式提供了唯一的連接和命令對象它們隱藏了基本的DBMS的特征一旦你在Connection對象上設置了Provider屬性那麼為SQL Server或Oracle創建一個命令對象就需要同樣的代碼許多開發人員都通過該功能來使用生產環境外的Access數據庫以便很快地測試或演示應用程序
 
  在ADONET中是不能這麼做的因為在ADONET中至少連接對象必須是特定於數據源的你不能以一種間接或通用的方式來創建連接除非你決定運用ADO的數據訪問技術——OLE DB在ADONET中你可以用OleDbConnection類創建到一個數據庫的連接這個類可以讓你訪問各種數據源NET托管環境中運用SystemDataOleDb名字空間中的類並不特別有效因為它們是用OLE DB來訪問數據的你只能用OLE DB來訪問那些沒有NET數據提供者的數據源
 
  如果你的應用程序必須訪問全異的數據源(而且你知道可能涉及什麼數據源——一個合理的假設)那麼你可以創建一個集中的factory類它返回一個連接對象並通過一個通用的接口(IDbConnection接口)來管理這個連接對象Factory類在內部運用應用程序參數來決定使用什麼NET數據提供者

@# Create the connection
Dim factory As New MyAppConnectionFactory
Dim conn As IDbConnection
conn = factoryCreateConnection(connString)

@# Create the command
Dim cmd As IDbCommand = connCreateCommand(query) 

  一旦你得到了一個連接對象你就可以以databaseagnostic的方式來創建和執行一個命令了而不管使用的數據源是什麼你可以使用CreateCommand方法並通過IDbCommand接口來引用命令然後你可以用IDbCommand接口上的ExecuteReader方法或ExecuteNonQuery方法來執行命令如果你用ExecuteReader你就可以得到一個data reader並可以用IDataReader接口來對它進行一般的訪問了
 
  你不能用一個通用的數據庫編程模式來填充一個DataSet對象實際上你不能像創建一個命令那樣以一種間接的方式來創建data adapter對象原因就是在有些情況下data adapter不同於命令對象它可以在內部隱含地創建一個連接然而它必須以一種強類型的方式工作而且必須知道基本的數據庫服務器是什麼

   運用字符串來串行化擴展的屬性

  幾個ADONET對象都擁有一個叫做ExtendedProperties的集合該屬性就像收集貨物(cargo collection)一樣可以用來存儲任何類型的用戶信息DataSetDataTable和DataColumn就是可以提供該數據成員的類ADONET通過運用PropertyCollection類封裝的一個哈希表來實現這個ExtendedProperties屬性你可以用Add方法將數據插入到集合中Add方法使用了兩個參數來保存數據——key和value該方法的原形將參數定義為通用的對象類型你可以存儲任何類型的信息然而在特殊情況下你應該特別注意那些被保存為擴展屬性的對象的類型
 
  如果你想將包含擴展屬性的ADONET對象串行化到XML最好只用字符串如果不行你必須對ADONET的內在的serializer的行為采取對策
 
  當ADONET將一個DataSet對象保存到XML時ExtendedProperties集合的內容就被串行化到內存中了但大概是出於性能的原因ADONET運用了ToString方法而不是XML serializer來實現串行化更重要的是當ADONET對象被讀回並復原時ExtendedProperties集合包含的是對象的字符串表現形式而不是對象本身

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/net/201311/15153.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.