Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

O que o tipo de dados XML do SQL Server traduz no .NET e como faço para convertê-lo em XmlDocument?


Ele se traduz em SqlXml e você pode obter um XmlReader com SqlXml.CreateReader a partir dele. Você teria que usar SqlDataReader.GetSqlXml método para obter o tipo em vez de uma string.

Por exemplo:
        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);
                }
            }
        }

ATUALIZAÇÃO: Para responder a um comentário útil de @Wiktor Zychla

O desempenho dessa abordagem é melhor e pode ser muito melhor ao lidar com campos XML grandes porque SqlReader.GetString carregará o conteúdo do campo em uma string primeiro enquanto SqlReader.GetSqlXml cria um XmlReader diretamente do fluxo. Isso pode ser verificado rapidamente com uma olhada no System.Data no Reflector ou em uma ferramenta similar.