Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

In che cosa si traduce il tipo di dati XML di SQL Server in .NET e come lo converto in XmlDocument?

Si traduce in SqlXml e puoi ottenere un XmlReader con SqlXml.CreateReader da. Dovresti usare SqlDataReader.GetSqlXml metodo per ottenere il tipo invece di una stringa.

Ad esempio:

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

AGGIORNAMENTO: Per rispondere a un utile commento di @Wiktor Zychla

Le prestazioni di questo approccio sono migliori e possono essere molte meglio quando si ha a che fare con campi XML di grandi dimensioni perché SqlReader.GetString caricherà prima il contenuto del campo in una stringa mentre SqlReader.GetSqlXml crea un XmlReader direttamente dal flusso. Questo può essere verificato rapidamente dando un'occhiata a System.Data in Reflector o uno strumento simile.