sql >> Base de Datos >  >> RDS >> Sqlserver

¿A qué se traduce el tipo de datos XML de SQL Server en .NET y cómo lo convierto a XmlDocument?

Se traduce como SqlXml y puede obtener un XmlReader con SqlXml.CreateReader de eso. Tendría que usar SqlDataReader.GetSqlXml método para obtener el tipo en lugar de una cadena.

Por ejemplo:

        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);
                }
            }
        }

ACTUALIZACIÓN: Para responder a un comentario útil de @Wiktor Zychla

El rendimiento de este enfoque es mejor y puede ser mucho mejor cuando se trata de grandes campos XML porque SqlReader.GetString cargará el contenido del campo en una cadena primero mientras SqlReader.GetSqlXml crea un XmlReader desde la secuencia directamente. Eso se puede verificar rápidamente con un vistazo a System.Data en Reflector o una herramienta similar.