18

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

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

所以我的问题是:

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

4

4 回答 4

27

它转化为SqlXml,你可以从中得到XmlReader一个SqlXml.CreateReader。您必须使用 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.GetString,因为会先将字段内容加载到字符串中,同时SqlReader.GetSqlXml直接从流中创建 XmlReader。这可以通过查看 Reflector 中的 System.Data 或类似工具来快速验证。

于 2012-12-03T20:24:30.217 回答
5

我记得把它转换成一个字符串。然后像往常一样用字符串输入 XmlDocument。

于 2012-12-03T20:24:14.620 回答
4

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

XmlDocument xdoc = new XmlDocument();
using (SqlCommand command = new SqlCommand(queryString, connection))
{
    XmlReader reader = command.ExecuteXmlReader();
    if (reader.Read())
    {
        xdoc.Load(reader);
    }
}
于 2012-12-03T20:33:26.330 回答
0

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

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

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

于 2012-12-03T20:23:37.553 回答