本文演示如何使用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 = ;
...
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>
原文链接:

ADO.NET 快速入门(十二):从 SQL Server 生成 XML 数据的更多相关文章

  1. 第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  2. 【译】第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  3. (转)SQLServer_十步优化SQL Server中的数据访问 二

    原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第五步:识别低效TSQL,采用最佳实践重构和应用TSQL 由于每个程序 ...

  4. (转)SQLServer_十步优化SQL Server中的数据访问五

    第九步:合理组织数据库文件组和文件 创建SQL Server数据库时,数据库服务器会自动在文件系统上创建一系列的文件,之后创建的每一个数据库对象实际上都是存储在这些文件中的.SQL Server有下面 ...

  5. (转)SQLServer_十步优化SQL Server中的数据访问 三

    原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第六步:应用高级索引 实施计算列并在这些列上创建索引 你可能曾经写过从 ...

  6. (转)SQLServer_十步优化SQL Server中的数据访问四

    原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第八步:使用SQL事件探查器和性能监控工具有效地诊断性能问题 在SQL ...

  7. (转)SQLServer_十步优化SQL Server中的数据访问一

    原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第一步:应用正确的索引 我之所以先从索引谈起是因为采用正确的索引会使生 ...

  8. Jmeter入门8 连接microsoft sql server数据库取数据

    本文以Jmeter 连接microsoft sql server为例. 1 从微软官网下载Microsoft SQL Server JDBC Driver 地址:http://www.microsof ...

  9. SQL Server 操作XML数据

    .xml.exist 输入为XQuery表达式,返回0,1或是Null.0表示不存在,1表示存在,Null表示输入为空 .xml.value 输入为XQuery表达式,返回一个SQL Server标量 ...

随机推荐

  1. hdu 5310 Souvenir (水)

    题意:今天是BestCoder一周年纪念日. 比赛管理员Soda想要给每个参赛者准备一个纪念品. 商店里纪念品的单价是p元, 同时也可以花q元购买纪念品套装, 一个套装里有m个纪念品.今天总共有n个参 ...

  2. 【django】request

    request.GET request.POST

  3. java读取照片信息 获取照片拍摄时的经纬度

    项目结构 源码:ImageInfo.zip 第一步:添加需要的架包metadate-extractor.jar 架包下载地址:https://code.google.com/p/metadata-ex ...

  4. 省常中模拟 Test1 Day1

    临洮巨人 排序 题意:在字符串中找出 A.B.C 三个字母出现次数相同的区间个数. 初步的解法是前缀和,用 a(i), b(i), c(i) 表示在位置 i 之前(包括 i)各有 字母 A.B.C 多 ...

  5. Linux Shell编程(2): for while

    ; i < ; i++)) do echo "current number is $i" done SERVICES="80 22 25 110 8000 23 2 ...

  6. 【大数比较】NYOJ-73

    比大小 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 给你两个很大的数,你能不能判断出他们两个数的大小呢? 比如123456789123456789要大于-1234 ...

  7. 【转】setTag()/getTag()

    原文网址:http://www.cnblogs.com/topcoderliu/archive/2011/06/07/2074419.html View中的setTag(Onbect)表示给View添 ...

  8. 微信开发之Ngrok环境准备(一)

    一.为什么要使用ngrok? 各位肯定都知道,做微信开发,我们的开发服务器需要和微信服务器做交互,SO,我们需要准备一台放置在公网的服务器,能够使得我们的服务器可以正常访问微信服务器,并且微信服务器也 ...

  9. HDU 5881 Tea

    Tea Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  10. POJ 2549 Sumsets

    Sumsets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10593   Accepted: 2890 Descript ...