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.