Microsoft KB Archive/308064

= How To Persist an ADO.NET DataSet as XML by Using Visual Basic .NET =

Article ID: 308064

Article Last Modified on 5/13/2007

-

APPLIES TO


 * Microsoft ADO.NET 1.1
 * Microsoft ADO.NET 1.0
 * Microsoft Visual Basic .NET 2003 Standard Edition
 * Microsoft Visual Basic .NET 2002 Standard Edition

-



This article was previously published under Q308064



For a Microsoft Visual C# .NET version of this article, see 309183.

For a Microsoft Visual C++ .NET version of this article, see 309184.

This article refers to the following Microsoft .NET Framework Class Library namespaces:
 * System.Data.SqlClient
 * System.IO

IN THIS TASK
SUMMARY
 * Requirements
 * Description of the Technique
 * Create Project and Add Code
 * Notes

REFERENCES



SUMMARY
This article demonstrates how to persist an ADO.NET DataSet object to XML.

back to the top

Requirements
The following list outlines the recommended hardware, software, network infrastructure, and service packs that you need:
 * Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server, or Windows NT 4.0 Server
 * Microsoft Visual Studio .NET

This article assumes that you are familiar with the following topics:
 * Visual Studio .NET
 * ADO.NET fundamentals and syntax
 * XML fundamentals

back to the top

Description of the Technique
You can use the WriteXml method to write Extensible Markup Language (XML) schema and data from the DataSet object. The XML data is written to a file, a Stream class, an XmlWriter class, or a TextWriter class. You can use one of two sets of overloaded methods for WriteXml, depending on your needs. The first set of four overloaded methods takes just one parameter, and the second set of four overloaded methods takes an additional parameter (XmlWriteMode) along with one of the above-mentioned parameters. Each of these methods is described in this section.

To write the current schema and data for the DataSet to the specified file, use the following code: Overloads Public Sub WriteXml(String) To write the current schema and data for the DataSet, use the specified TextWriter class. The TextWriter class is designed for character output. Overloads Public Sub WriteXml(TextWriter) To write the current schema and data for the DataSet, use the specified System.IO.Stream. The Stream class is designed for byte input and output. Overloads Public Sub WriteXml(Stream) To write the current schema and data for the DataSet to the specified XmlWriter, use the following code. This provides a fast, non-cached, forward-only method to generate streams or files that contain XML data to conform to the World Wide Web Consortium (W3C) XML 1.0 specification and the namespaces in the XML specification. Overloads Public Sub WriteXml(XmlWriter) The XmlWriteMode enumeration specifies how to write XML data and schema from the DataSet. XmlWriteMode includes the following options:
 * DiffGram: Writes the entire DataSet as a DiffGram.
 * IgnoreSchema: Writes the current contents of the DataSet as XML data, without an XML Schema Definition language (XSD) schema.
 * WriteSchema: Writes the current contents of the DataSet as XML data with the relational structure as inline XSD schema.

back to the top

Create Project and Add Code
The following sample creates a DataSet from the customer table in the Northwind database and uses the WriteXml method to persist the DataSet into XML. This sample demonstrates how to use two of the commonly used overloaded versions of WriteXml. For other examples, refer to MSDN for individual overload topics of this method.  Start Visual Studio .NET. Create a new Windows Application project in Visual Basic .NET. Make sure that your project contains a reference to the System.Data namespace, and add a reference to this namespace if it does not. Place two Command buttons on Form1. Change the Name property of the first button to btnWriter and its Text property to Writer.

Change the Name property of the second button to btnFile and its Text property to File .  Use the Imports statement on the System and System.Data namespaces so that you are not required to qualify declarations in those namespaces later in your code. Imports System Imports System.Data Imports System.Data.SqlClient   Copy and paste the following code in the code window after the &quot;Windows Form Designer generated code&quot; region: Private Sub btnWriter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnWriter.Click Dim myConnectionString As String _ = &quot;User ID=sa;password=sa;Initial Catalog=Northwind;Data Source=mySQLServer&quot; Dim mySelectQuery As String _ = &quot;Select * From Customers&quot; Dim myXMLfile As String = &quot;c:\mySchema.xml&quot; Dim con As New SqlConnection(myConnectionString) Dim daCust As New SqlDataAdapter(mySelectQuery, con) Dim ds As New DataSet daCust.Fill(ds, &quot;Cust&quot;) Dim myFileStream As New System.IO.FileStream _ (myXMLfile, System.IO.FileMode.Create) Dim MyXmlTextWriter As New System.Xml.XmlTextWriter _ (myFileStream, System.Text.Encoding.Unicode) Try 'Write the XML along with the inline schema (default). ds.WriteXml(MyXmlTextWriter, XmlWriteMode.WriteSchema) 'Write the XML only. 'ds.WriteXml(MyXmlTextWriter, XmlWriteMode.IgnoreSchema) 'Write the XML as a DiffGram. 'ds.WriteXml(MyXmlTextWriter, XmlWriteMode.DiffGram) MsgBox(&quot;Save complete&quot;) Catch ex As Exception MessageBox.Show(ex.ToString) Finally MyXmlTextWriter.Close myFileStream.Close End Try End Sub Private Sub btnFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles btnFile.Click Dim myConnectionString As String _ = &quot;User ID=sa;password=sa;Initial Catalog=Northwind;Data Source=mySQLServer&quot; Dim mySelectQuery As String _ = &quot;Select * From Customers&quot; Dim myXMLfile As String = &quot;c:\mySchema.xml&quot; Dim con As New SqlConnection(myConnectionString) Dim daCust As New SqlDataAdapter(mySelectQuery, con) Dim ds As New DataSet daCust.Fill(ds, &quot;Cust&quot;) Try 'Write the XML along with the inline schema (default). ds.WriteXml(MyXmlFile, XmlWriteMode.WriteSchema) 'Write the XML only. 'ds.WriteXml(MyXmlFile, XmlWriteMode.IgnoreSchema) 'Write the XML as a DiffGram. 'ds.WriteXml(MyXmlFile, XmlWriteMode.DiffGram) MsgBox(&quot;Save complete&quot;) Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub  Modify the connection string (myConnectionString) and XML file path (myXMLfile) as appropriate for your environment.</li> Save your project.</li> From the Debug menu, click Start, and run your project.</li> Click any of the buttons to persist the data into the file.</li> Open your browser, and open the XML file. Notice that the data in the DataSet has been persisted successfully in XML format based on the XmlWriteMode that you specified.</li></ol>

back to the top