SQL Server XML数据类型在.NET中转换为什么?如何将其转换为XmlDocument?

我们在数据库中有一个类型为xml 。 我正在通过.net SqlDataReader读取此信息,但我不确定要将其转换为什么。

msdn表( http://msdn.microsoft.com/en-us/library/cc716729.aspx )表明它是.net类型的Xml ,但是没有System.Xml ,只有System.Web.UI.WebControls.Xml所以我不确定这是否正确。

所以我的问题是:

当我从SqlDataReader读取它时,我将SqlDbType.Xml转换为什么,以及如何将其转换为XmlDocument

我记得把它扔成一个字符串。 用字符串提供XmlDocument就像平常一样。

它转换为SqlXml ,您可以从中获取带有SqlXml.CreateReaderXmlReader 。 您必须使用SqlDataReader.GetSqlXml方法来获取类型而不是字符串。

例如:

  SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { SqlXml xmlData = reader.GetSqlXml(0); XmlReader xmlReader = xmlData.CreateReader(); xmlReader.MoveToContent(); while (xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { string elementName = xmlReader.LocalName; xmlReader.Read(); Console.WriteLine(elementName + ": " + xmlReader.Value); } } } 

更新:回答@Wiktor Zychla的有用评论

这种方法的性能更好,并且在处理大型XML字段时可以更好,因为SqlReader.GetStringSqlReader.GetString将字段内容加载到字符串中,而SqlReader.GetSqlXml直接从流中创建XmlReader。 可以通过查看Reflector中的System.Data或类似工具来快速validation。

我自己使用这个方法,使用SqlCommand.ExecuteXmlReader();

 XmlDocument xdoc = new XmlDocument(); using (SqlCommand command = new SqlCommand(queryString, connection)) { XmlReader reader = command.ExecuteXmlReader(); if (reader.Read()) { xdoc.Load(reader); } } 

当然,有一个System.Xml命名空间 :

System.Xml命名空间为处理XML提供基于标准的支持。

但是,要使用它,您可能必须将其添加为项目中的参考。 Microsoft有在Visual Studio中执行此操作的说明 。