从 SQL Server 2005 中处理 XML
2007-05-13 09:26:22 来源:WEB开发网您可以像在以前的版本中一样,使用 ExecuteXmlReader 从“FOR XML”查询中检索任何流。另外,此方法支持对普通 SELECT 语句生成的 XML 数据类型列进行检索。这里唯一需要提请您注意的是,当普通 SELECT 语句返回多行时,ExecuteXmlReader 仅返回第一行的内容。这里的示例使用与先前示例中相同的表展示了这一点:
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Xml;
void UseExecXmlReader {
// get a connection string from a config file
string s = GetConnectStringFromConfigFile("xmldb");
using (SqlConnection conn = new SqlConnection(s))
using (SqlCommand cmd1 = new SqlCommand(
"select * from pubs..authors for xml auto,root('root')", conn))
using (SqlCommand cmd2 = new SqlCommand(
"select * from pubs..authors for xml auto", conn))
using (SqlCommand cmd3 = new SqlCommand(
"select * from xmltab", conn))
{
conn.Open();
// contains document
XmlReader xr1 = cmd1.ExecuteXmlReader();
// contains fragment
XmlReader xr2 = cmd2.ExecuteXmlReader();
// contains contents of first row in xmltab only
XmlReader xr3 = cmd3.ExecuteXmlReader();
// use XmlReaders, then
xr1.Dispose(); xr2.Dispose(); xr3.Dispose();
}
}
为了完成关于在 ADO.NET 2.0 中获取 XML 的讨论,在各种使用方案中提到 XmlReader 内容的生命周期是有好处的。研究 XmlReader 的生命周期还有助于理解 SqlClient 执行的缓冲,以及如何使用此数据获取最高性能。XmlReader 使用资源,为了释放这些资源,应该调用 Close() 或 Dispose() 方法,就像使用 SqlConnection、SqlCommand 和 SqlDataReader 一样。在通过 SqlDataReader 读取 XML 列的情况下,可以为每一行分配一个 XmlReader。请记住,为了支持在同一行的列中向后移动,或者移动到下一行,XmlReader 的内容要在内存中缓冲。当您使用 SqlCommand 的 CommandBehavior.SequentialAccess 时,整个 XmlReader 不会在内存中缓冲,但您使用此存取方法时必须小心。使用 CommandBehavior.SequentialAccess 时,与列相关联的 XmlReader 在行集中移动到下一列之前必须完全消耗掉;在移动到下一列之后,XmlReader 看似有效,但调用它的 Read() 方法不会产生任何数据。当您使用 ExecuteXmlReader 或 ExecuteScalar 代替 ExecuteReader 时,您无需同样多的了解此行为,但此时也别忘了关闭/处理 XmlReader。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接