共用方式為


DataSet 和 XmlDataDocument 同步處理 (ADO.NET)

ADO.NET DataSet 提供資料的關聯式表示。 若要存取階層式資料,可以使用 .NET Framework 中提供的 XML 類別。 過去,這兩個資料表示一直是分開使用; 然而,.NET Framework 會個別透過 DataSet 物件和 XmlDataDocument 物件,啟用即時、同步存取關聯式及階層式表示的資料。

DataSetXmlDataDocument 同步處理時,這兩個物件使用同一組資料; 也就是說,如果 DataSet 有變更,則變更也會反映至 XmlDataDocument,反之亦然。 DataSetXmlDataDocument 間的關聯性製造了相當大的彈性;單一應用程式使用同一組資料,即可存取 DataSet 上建置的整套服務 (例如 Web Form、Windows Form 控制項和 Visual Studio .NET 設計工具),也能存取整套 XML 服務 (包括可延伸樣式表語言 (XSL)、XSL 轉換 (XSLT) 和 XML 路徑語言 (XPath))。 您不用替應用程式選擇要將哪一組服務當成目標,因為這兩個服務都可以使用。

DataSetXmlDataDocument 同步處理的方法有下列幾種。 您可以:

  • 使用結構描述 (也就是關聯式結構) 和資料填入 DataSet,然後將它與新的 XmlDataDocument 同步處理。 如此便能提供現有關聯式資料的階層式檢視。 例如:

    Dim dataSet As DataSet = New DataSet
    
    ' Add code here to populate the DataSet with schema and data.
    
    Dim xmlDoc As XmlDataDocument = New XmlDataDocument(dataSet)
    
    DataSet dataSet = new DataSet();
    
    // Add code here to populate the DataSet with schema and data.
    
    XmlDataDocument xmlDoc = new XmlDataDocument(dataSet);
    
  • 只使用結構描述填入 DataSet (例如強型別 DataSet),將該 DataSet 與 XmlDataDocument 同步處理,然後從 XML 文件載入 XmlDataDocument。 如此能提供現有階層式資料的關聯式檢視。 您 DataSet 結構描述中的資料表名稱和資料行名稱必須要與一起同步處理 XML 項目的名稱相符。 這項比對是區分大小寫的。

    請注意,DataSet 的結構描述只需要與要公開在關聯式檢視中的 XML 項目相符。 如此,您可能會有非常大的 XML 文件,但文件中可能會有非常小的關聯式「視窗」。 即使 DataSet 只公開文件的一小部分,XmlDataDocument 仍會保留整份 XML 文件 (如需此文件的詳細範例,請參閱 同步處理 DataSet 與 XmlDataDocument (ADO.NET))(英文)。

    下列程式碼範例顯示建立 DataSet、填入其結構描述,然後將它與 XmlDataDocument 同步處理的步驟。 請注意,DataSet 結構描述只需與您要使用 DataSet 所公開的 XmlDataDocument 項目相符。

    Dim dataSet As DataSet = New DataSet
    
    ' Add code here to populate the DataSet with schema, but not data.
    
    Dim xmlDoc As XmlDataDocument = New XmlDataDocument(dataSet)
    xmlDoc.Load("XMLDocument.xml")
    
    DataSet dataSet = new DataSet();
    
    // Add code here to populate the DataSet with schema, but not data.
    
    XmlDataDocument xmlDoc = new XmlDataDocument(dataSet);
    xmlDoc.Load("XMLDocument.xml");
    

    如果 XmlDataDocument 與包含資料的 DataSet 同步處理,您便無法將其載入, 且會擲回例外狀況。

  • 建立新的 XmlDataDocument 並從 XML 文件載入它,然後使用 XmlDataDocumentDataSet 屬性來存取資料的關聯式檢視。 您需要先設定 DataSet 的結構描述,才能使用 DataSet 檢視 XmlDataDocument 中的任何資料。 同樣的,您 DataSet 結構描述中的資料表名稱和資料行名稱,必須與要和它們一起同步處理的 XML 項目的名稱相符。 這項比對是區分大小寫的。

    下列程式碼範例顯示如何存取 XmlDataDocument 中資料的關聯式檢視。

    Dim xmlDoc As XmlDataDocument = New XmlDataDocument
    Dim dataSet As DataSet = xmlDoc.DataSet
    
    ' Add code here to create the schema of the DataSet to view the data.
    
    xmlDoc.Load("XMLDocument.xml")
    
    XmlDataDocument xmlDoc = new XmlDataDocument();
    DataSet dataSet = xmlDoc.DataSet;
    
    // Add code here to create the schema of the DataSet to view the data.
    
    xmlDoc.Load("XMLDocument.xml");
    

XmlDataDocumentDataSet 同步處理的另一個好處是可以保留原始 XML 文件的架構。 如果 DataSet 是使用 ReadXml 從 XML 文件填入,則您使用 WriteXml 將資料寫回為 XML 文件時,資料可能與原始 XML 文件有相當大的出入。 這是因為 DataSet 不會維護來自 XML 文件的泛空白字元或階層式資訊 (如項目順序) 的格式。 DataSet 也不包含來自 XML 文件的被忽略項目,因為它們與 Dataset 的結構描述不符。 將 DataSetXmlDataDocument 同步處理,可讓原始 XML 文件的格式和階層式項目結構保留在 XmlDataDocument 內,同時 DataSet 只包含 DataSet 適用的資料和結構描述資訊。

DataSetXmlDataDocument 同步處理時,結果可能視您的 DataRelation 物件是否為巢狀化而有所不同。 如需詳細資訊,請參閱巢狀化 DataRelation (ADO.NET)

在本節中

相關章節