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

Sin*_*tic 17 .net c# sql-server-2005

我们在数据库中有一个类型为的列xml.我正在通过.net阅读这些信息SqlDataReader,但我不知道该把它投到什么.

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

所以我的问题是:

我怎么投的SqlDbType.Xml作为.我现在是读它SqlDataReader,并且我怎么将其转换成XmlDocument

Ser*_*lov 27

它翻译SqlXml,你可以得到一个XmlReaderSqlXml.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);
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

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

这种方法的性能更好,可以有很多大型XML领域打交道时更好,因为SqlReader.GetString会加载字段内容转换成字符串也先SqlReader.GetSqlXml产生直接流中的XmlReader.可以通过查看Reflector或类似工具中的System.Data来快速验证.


Wik*_*hla 5

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

  • 虽然这有效,但我认为最好使用本机类型. (4认同)
  • 虽然每个XML值都是一个字符串,但不是每个字符串都是XML,你不同意吗?至于性能,我已经查看了System.Data代码并为您更新了答案. (3认同)
  • 如果您关心这类事情,那么从一开始就是类型安全的.我希望它也会更快,因为XmlReader可以直接使用流,并且不一定必须先将所有内容加载到字符串中. (2认同)