WCF分布式開發步步為贏(8):使用數據集、數據表、集合傳遞數據

作者: Frank Xu Lei  來源: 博客園  發布時間: 2009-06-01 11:18  閱讀: 6361 次  推薦: 0   原文鏈接   [收藏]  
 
摘要:數據集(DataSet)、數據表(DataTable)、集合(Collection)概念是.NET FrameWork里提供數據類型,在應用程序編程過程中會經常使用其來作為數據的載體,屬于ADO.NET的一部分。
[1] 數據集(DataSet)、數據表(DataTable)
[2] 集合(Collection)
[3] 示例代碼分析

  數據集(DataSet)、數據表(DataTable)、集合(Collection)概念是.NET FrameWork里提供數據類型,在應用程序編程過程中會經常使用其來作為數據的載體,屬于ADO.NET的一部分。今天我們WCF分布式開發步步為贏第8節的內容:使用數據集(DataSet)、數據表(DataTable)、集合(Collection)傳遞數據。本節內容除了介紹幾個類型概念外的,同樣會詳細給出代碼的實現過程。此外我們會分析這幾種數據類型的優勢和缺點,以及在面向對象的服務開發過程中如何解決這些問題。

  【1】數據集(DataSet)、數據表(DataTable):

  我們首先來介紹這兩個類型的相關概念,然后在介紹其在WCF應用程序開發中的使用方式。

  【1.1】基本概念:

  數據集(DataSet)、數據表(DataTable),相信大家都不回陌生,只要做過ADO.NET進行數據庫編程的開發人員來說,都會使用到這兩個類。DataSet 是 ADO.NET 結構的主要組件,它是從數據源中檢索到的數據在內存中的緩存。DataSet 由一組 DataTable 對象組成,您可使這些對象與 DataRelation 對象互相關聯。您還可通過使用 UniqueConstraint 和 ForeignKeyConstraint 對象在 DataSet 中實施數據完整性。有關使用 DataSet 對象的詳細信息,請參見 在 ADO.NET 中使用 DataSet。

  盡管 DataTable 對象中包含數據,但是 DataRelationCollection 允許您遍覽表的層次結構。這些表包含在通過 Tables 屬性訪問的 DataTableCollection 中。當訪問 DataTable 對象時,請注意它們是按條件區分大小寫的。例如,如果一個 DataTable 被命名為“mydatatable”,另一個被命名為“Mydatatable”,則用于搜索其中一個表的字符串被認為是區分大小寫的。但是,如果“mydatatable”存在而“Mydatatable”不存在,則認為該搜索字符串不區分大小寫。有關使用 DataTable 對象的更多信息,請參見 創建 DataTable。

  DataSet 可將數據和架構作為 XML 文檔進行讀寫。數據和架構可通過 HTTP 傳輸,并在支持 XML 的任何平臺上被任何應用程序使用。可使用 WriteXmlSchema 方法將架構保存為 XML 架構,并且可以使用 WriteXml 方法保存架構和數據。若要讀取既包含架構也包含數據的 XML 文檔,請使用 ReadXml 方法。

  在典型的多層實現中,用于創建和刷新 DataSet 并依次更新原始數據的步驟包括:

  1. 通過 DataAdapter 使用數據源中的數據生成和填充 DataSet 中的每個 DataTable。
  2. 通過添加、更新或刪除 DataRow 對象更改單個 DataTable 對象中的數據。
  3. 調用 GetChanges 方法以創建只反映對數據進行的更改的第二個 DataSet。
  4. 調用 DataAdapter 的 Update 方法,并將第二個 DataSet 作為參數傳遞。
  5. 調用 Merge 方法將第二個 DataSet 中的更改合并到第一個中。
  6. 針對 DataSet 調用 AcceptChanges。或者,調用 RejectChanges 以取消更改。

  【1.2】
  DataSet 和 DataTable 對象從 MarshalByValueComponent 繼承而來,并支持用于遠程處理的 ISerializable 接口。這些是僅有的可以遠程處理的 ADO.NET 對象。   我們先來看一下DataSet的定義,使用Reflector工具查看,部分代碼如下:

[Serializable, ToolboxItem("Microsoft.VSDesigner.Data.VS.DataSetToolboxItem,
Microsoft.VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7
f11d50a3a
"), DefaultProperty("DataSetName"), XmlSchemaProvider("GetDataSetSc
hema
"), ResDescription("DataSetDescr"), XmlRoot("DataSet"), Designer("Microsoft.
VSDesigner.Data.VS.DataSetDesigner, Microsoft.VSDesigner, Version=8.0.0.0,
Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
")]
public class DataSet : MarshalByValueComponent, IListSource, IXmlSerializable,
 ISupportInitializeNotification, ISupportInitialize, ISerializable
{
    
// Fields
    private bool _caseSensitive;
    
private CultureInfo _culture;
    
private bool _cultureUserSet;
    
private string _datasetPrefix;
    
private object _defaultViewManagerLock;
    
private readonly int _objectID;
    
private static int _objectTypeCount;
    
private SerializationFormat _remotingFormat;
    
private string dataSetName;
    
private DataViewManager defaultViewManager;
    
private bool enforceConstraints;
    
internal PropertyCollection extendedProperties;
    
private bool fBoundToDocument;
    
internal bool fEnableCascading;
    
internal bool fInitInProgress;

 
}

 DataTable的部分實現代碼如下:

[Serializable, Editor("Microsoft.VSDesigner.Data.Design.DataTableEditor, Microsoft.
VSDesigner, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
",
 
"System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=
neutral, PublicKeyToken=b03f5f7f11d50a3a
"), DefaultProperty("TableName"),
DesignTimeVisible(
false), ToolboxItem(false), XmlSchemaProvider("GetDataTableS
chema
"), DefaultEvent("RowChanging")]
public class DataTable : MarshalByValueComponent, IListSource, ISupportInitialize
Notification, ISupportInitialize, ISerializable, IXmlSerializable
{
    
// Fields
    private bool _caseSensitive;
    
private bool _caseSensitiveUserSet;
    
internal DataColumn _colUnique;
    
private CompareOptions _compareFlags;
    
private CompareInfo _compareInfo;
    
}

  在WCF分布式應用程序開發過程中,可以使用來作為數據契約類型,在服務和客戶端傳遞。兩者在定義之初都包含了[Serializable]聲明,因此兩者的對象都是可以序列化的。可以使用在客戶端和服務端傳遞數據。

0
0
 
標簽:WCF
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()