生成XML格式的查询结果的SQL语句:
别忘了加上名称空间:
select
ID,UserName,UserPwd
from
UserInfo
for
xml auto,elements
下面一段代码说明如何在VS2005中将查询出来的XML格式的结果保存到一个叫UserInfo.xml的文件中,当然我们首先得新建一个XML文件叫UserInfo.xml.
代码如下:
SqlConnection conn
=
new
SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings[ " connString " ].ConnectionString;
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = " select ID,UserName,UserPwd from UserInfo for xml auto,elements " ; // 查询XML格式的SQL语句
conn.Open();
XmlReader xrd = cmd.ExecuteXmlReader(); // 用ExecuteXmlReader方法将查询结果生成一个XmlReader对象
XmlDocument xmldom = new XmlDocument(); // 新建一个XmlDocument对象xmldom
XmlDeclaration declaration = xmldom.CreateXmlDeclaration( " 1.0 " , " utf-8 " , null ); // 声明这个XML对象的版本,编码方式
xmldom.AppendChild(declaration); // 将声明节点添加进xmldom
XmlElement root = xmldom.CreateElement( " root " ); // 添加一个根节点root
xmldom.AppendChild(root); // 将根节点添加进xmldom,因为每个XML文件都要有一个根节点,所以必须添加
XmlElement node = null ; // 新建一个root下面的子节点
XmlElement child = null ; // 新建一个node下面的子节点
XmlText text = null ; // 新建一个文本节点,比如<ID>1</ID>,中间的那个1也是一个节点,是XmlTextNode类型的节点
while (xrd.Read()) // 逐个读取节点
... {
if (xrd.NodeType == XmlNodeType.Element)//如果节点类型是开始元素类型,Element是开始元素类型如<ID>,EndElement是结束节点类型如</ID>
...{
if (xrd.Name.Equals("UserInfo"))//如果节点元素名为UserInfo
...{
node = xmldom.CreateElement(xrd.Name);//实例化一个节点元素,名字为xrd.Name的值
root.AppendChild(node);//添加到root的子节点
}
else//如果节点元素名不为UserInfo,即为ID或UserName或UserPwd
...{
child = xmldom.CreateElement(xrd.Name);
node.AppendChild(child);//将该节点添加到node的子节点
}
}
if(xrd.NodeType==XmlNodeType.Text)//如果节点类型为文本类型,即开始节点和结束节点中间的文本值
...{
text = xmldom.CreateTextNode(xrd.Value);
child.AppendChild(text);//实例化一个文本节点,将其添加到child的子节点
}
}
xmldom.Save(Server.MapPath( " UserInfo.xml " )); // 将xmldom的内容保存到UserInfo.xml中
xrd.Close(); // 关闭XmlReader对象.注意:用完XmlReader对象之后一定要关闭.道理和SqlDataReader对象是一样的,因为它是以独占式访问该数据库链接
// 释放数据库操作的相关资源
conn.Close();
conn.Dispose();
cmd.Dispose();
conn.ConnectionString = ConfigurationManager.ConnectionStrings[ " connString " ].ConnectionString;
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = " select ID,UserName,UserPwd from UserInfo for xml auto,elements " ; // 查询XML格式的SQL语句
conn.Open();
XmlReader xrd = cmd.ExecuteXmlReader(); // 用ExecuteXmlReader方法将查询结果生成一个XmlReader对象
XmlDocument xmldom = new XmlDocument(); // 新建一个XmlDocument对象xmldom
XmlDeclaration declaration = xmldom.CreateXmlDeclaration( " 1.0 " , " utf-8 " , null ); // 声明这个XML对象的版本,编码方式
xmldom.AppendChild(declaration); // 将声明节点添加进xmldom
XmlElement root = xmldom.CreateElement( " root " ); // 添加一个根节点root
xmldom.AppendChild(root); // 将根节点添加进xmldom,因为每个XML文件都要有一个根节点,所以必须添加
XmlElement node = null ; // 新建一个root下面的子节点
XmlElement child = null ; // 新建一个node下面的子节点
XmlText text = null ; // 新建一个文本节点,比如<ID>1</ID>,中间的那个1也是一个节点,是XmlTextNode类型的节点
while (xrd.Read()) // 逐个读取节点
... {
if (xrd.NodeType == XmlNodeType.Element)//如果节点类型是开始元素类型,Element是开始元素类型如<ID>,EndElement是结束节点类型如</ID>
...{
if (xrd.Name.Equals("UserInfo"))//如果节点元素名为UserInfo
...{
node = xmldom.CreateElement(xrd.Name);//实例化一个节点元素,名字为xrd.Name的值
root.AppendChild(node);//添加到root的子节点
}
else//如果节点元素名不为UserInfo,即为ID或UserName或UserPwd
...{
child = xmldom.CreateElement(xrd.Name);
node.AppendChild(child);//将该节点添加到node的子节点
}
}
if(xrd.NodeType==XmlNodeType.Text)//如果节点类型为文本类型,即开始节点和结束节点中间的文本值
...{
text = xmldom.CreateTextNode(xrd.Value);
child.AppendChild(text);//实例化一个文本节点,将其添加到child的子节点
}
}
xmldom.Save(Server.MapPath( " UserInfo.xml " )); // 将xmldom的内容保存到UserInfo.xml中
xrd.Close(); // 关闭XmlReader对象.注意:用完XmlReader对象之后一定要关闭.道理和SqlDataReader对象是一样的,因为它是以独占式访问该数据库链接
// 释放数据库操作的相关资源
conn.Close();
conn.Dispose();
cmd.Dispose();
using
System.Xml;
using System.Data.SqlClient;
using System.Text;
using System.Data.SqlClient;
using System.Text;