ADO.NET 快速入门(十二):从 SQL Server 生成 XML 数据

本文介绍通过SQLServer生成XML的两种方式:一种是利用SqlCommand的ExecuteXmlReader方法结合DataSet的ReadXml方法;另一种则是使用SqlDataAdapter填充DataSet。示例展示了如何通过这两种方式分别获取XML数据并将其写入文件进行对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文演示如何使用2种不同的方法从 SQL Server 生成 XML。
 
方法1:使用了 SqlCommand 的 ExecuteXmlReader 方法获取 XmlReader,然后使用 DataSet 类的 ReadXml 方法把 XmlReader 填充到 DataSet。
 
方法2:使用 SqlDataAdapter 提取数据内容,并使其适应 DataSet 内部的XML 结构。SqlDataAdapter 类封装了一组数据指令和一个数据连接,用于填充 DataSet 。
 
示例1,首先打开一个 SQL Server Northwind 库的连接。然后创建 SqlCommand,从 Northwind 库的 Customers 表选择所有行。在这条指令里 FOR XML 子句,用于表达你正在请求 SQL Server 返回 XML 文档作为查询结果。FOR XML 子句上的 XMLDATA 标识说明应该返回 XML-Data Schema。
 
示例1:
 
 
复制代码
    String sConnection = "server=(local)\\SQLExpress;Integrated Security=SSPI;database=northwind";
    SqlConnection mySqlConnection = new SqlConnection(sConnection);
    SqlCommand mySqlCommand = new SqlCommand("select * from customers FOR XML AUTO, XMLDATA", mySqlConnection);
    mySqlCommand.CommandTimeout = 15;
    ...
    mySqlConnection.Open();
复制代码

 

示例2(第一部分)创建了名为 myDataSet1 的 DataSet 对象。然后,添加 XmlTextReader 和 XmlReadMode.Fragment 标识,用于使用 ReadXml 方法读取 从 SQL Server 返回到 DataSet1 的 XmlDocument 。
 
 
示例2(第二部分)创建了名为 myDataSet2 的 DataSet 对象,并且创建了 SqlDataAdapter 对象提供 SQL 指令从 SQL Serever 库访问和检索数据。然后,调用 SqlDataAdapter 上的 Fill 方法来加载数据到 myDataSet2。
 
最后一步打印2个 DataSets 从而验证数据是否相同并且审查 XML 格式(参考下面 data1.xml 和 data2.xml 生成的数据)。
 
示例2:
 
复制代码
            SqlConnection myConnection = new SqlConnection("server=(local);Integrated Security=SSPI;database=northwind;");
            myConnection.Open();

            // 使用 XML 数据填充 DataSet 对象
            DataSet myDataSet1 = new DataSet();
            SqlCommand myCommand = new SqlCommand("SELECT TOP 1 * FROM Customers FOR XML AUTO, XMLDATA", myConnection);
            XmlReader myReader = myCommand.ExecuteXmlReader();
            myDataSet1.ReadXml(myReader, XmlReadMode.Fragment);

            // 使用 SqlDataAdapter 填充 DataSet 对象
            SqlDataAdapter myAdapter = new SqlDataAdapter("SELECT TOP 1 * FROM Customers", myConnection);
            DataSet myDataSet2 = new DataSet();
            myAdapter.Fill(myDataSet2);

            // 将数据写入文件:用于比较 data1.xml 和 data2.xml
            myDataSet1.WriteXml("c:\\data1.xml");
            myDataSet2.WriteXml("c:\\data2.xml");

            // 打印 data1.xml
            Console.WriteLine("********************data1.xml********************");
            Console.WriteLine(myDataSet1.GetXml());

            // 打印 data2.xml
            Console.WriteLine("********************data2.xml********************");
            Console.WriteLine(myDataSet2.GetXml());
复制代码

 

方法1生成的 data1.xml:

<?xml version="1.0" standalone="yes"?>
<Schema1>
  <Customers CustomerID="ALFKI" CompanyName="Alfreds Futterkiste" ContactName="Maria Anders" ContactTitle="Sales Representative" Address="Obere Str. 57" City="Berlin" PostalCode="12209" Country="Germany" Phone="030-0074321" Fax="030-0076545" />
</Schema1>

 

 

方法2生成的 data2.xml:

 

复制代码
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
  <Table>
    <CustomerID>ALFKI</CustomerID>
    <CompanyName>Alfreds Futterkiste</CompanyName>
    <ContactName>Maria Anders</ContactName>
    <ContactTitle>Sales Representative</ContactTitle>
    <Address>Obere Str. 57</Address>
    <City>Berlin</City>
    <PostalCode>12209</PostalCode>
    <Country>Germany</Country>
    <Phone>030-0074321</Phone>
    <Fax>030-0076545</Fax>
  </Table>
</NewDataSet>
复制代码

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值