Microsoft KB Archive/309184

= How To Persist an ADO.NET DataSet into XML by Using Visual C++ .NET =

Article ID: 309184

Article Last Modified on 5/13/2007

-

APPLIES TO


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

-



This article was previously published under Q309184



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

For a Microsoft Visual Basic .NET version of this article, see 308064.

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

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 Extensible Markup Language (XML).

back to the top

Requirements
The following list outlines the recommended hardware, software, network infrastructure, and service packs that are required:
 * A Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, or Microsoft Windows NT 4.0 Server-based computer
 * Installation of Microsoft Visual Studio .NET

This article assumes that you are familiar with the following topics:
 * Microsoft 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 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 requires just one parameter, and the second set of four overloaded methods requires an additional parameter (XmlWriteMode), along with one of the previously 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: public: void 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. public: void 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. public: void 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. public: void 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 (XSD) language 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 code creates a DataSet from the customer table in the Northwind database and uses the WriteXml method to persist the DataSet into XML. The following steps demonstrate how to use two of the commonly used overloaded versions of WriteXml. For other examples, refer to MSDN for individual overload topics related to this method.  Start Visual Studio .NET. Create a new Managed C++ application project named MyApp.  Copy and paste the following code to MyApp.cpp file, replacing the default code:
 * 1) include &quot;stdafx.h&quot;


 * 1) using 
 * 2) include 


 * 1) using 
 * 2) using 
 * 3) using 

using namespace System; using namespace System::Data; using namespace System::Data::SqlClient; using namespace System::Xml;

void writeToXmlTextWriter; void writeToFile; // This is the entry point for this application int _tmain(void) {   // TODO: Please replace the sample code below with your own. writeToXmlTextWriter; //comment the above line and uncomment the following line to write the xml to file. //writeToFile;

return 0; } void writeToXmlTextWriter {   SqlConnection* cnn = new SqlConnection(&quot;Data Source=MySqlServer;uid=sa;pwd=sa;Initial Catalog=NorthWind&quot;); SqlDataAdapter* da = new SqlDataAdapter(&quot;select * from customers&quot;,cnn); DataSet* ds = new DataSet;

try {   da->Fill(ds, &quot;Cust&quot;); }   catch(System::Data::SqlClient::SqlException * ex) {       System::Console::WriteLine(ex->get_Message->ToString); }

String* strFName = &quot;c:\\mySchema.xml&quot;;

System::IO::FileStream* myFileStream = new System::IO::FileStream(strFName, System::IO::FileMode::Create); XmlTextWriter* MyXmlTextWriter = new XmlTextWriter(myFileStream, System::Text::Encoding::Unicode );

try {   //Write the xml along with the inline schema (Default). ds->WriteXml (MyXmlTextWriter, System::Data::XmlWriteMode::WriteSchema ); //Write the xml only. //ds->WriteXml (MyXmlTextWriter, System::Data::XmlWriteMode::IgnoreSchema ); //Write the xml as a DiffGram. //ds->WriteXml (MyXmlTextWriter, System::Data::XmlWriteMode::DiffGram ); }   catch(System::Exception* ex) {       System::Console::WriteLine (&quot;Error: {0}&quot;,ex->get_Message); }   __finally {       MyXmlTextWriter->Close ; myFileStream->Close; }

}

void writeToFile {   SqlConnection* cnn = new SqlConnection(&quot;Data Source=MySqlServer;uid=sa;pwd=sa;Initial Catalog=NorthWind&quot;); SqlDataAdapter* da = new SqlDataAdapter(&quot;select * from customers&quot;,cnn); DataSet* ds = new DataSet;

da->Fill(ds, &quot;Cust&quot;);

String* strFName = &quot;c:\\mySchema.xml&quot;;

try {   //Write the xml along with the inline schema (Default). ds->WriteXml (strFName, System::Data::XmlWriteMode::WriteSchema ); //Write the xml only. //ds->WriteXml (strFName, System::Data::XmlWriteMode::IgnoreSchema ); //Write the xml as a DiffGram. //ds->WriteXml (strFName, System::Data::XmlWriteMode::DiffGram ); }   catch(System::Exception* ex) {       System::Console::WriteLine (&quot;Error: {0}&quot;,ex->get_Message); } }                    Modify the connection string (myConnectionString) and XML file path (myXMLfile) as appropriate for your environment.</li> Save your project.</li> On the Debug menu, click Start to run your project.</li> Start your Web browser, and then 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