Przekłada się na SqlXml
i możesz otrzymać XmlReader
z SqlXml.CreateReader
z tego. Musisz użyć SqlDataReader.GetSqlXml
metoda, aby uzyskać typ zamiast ciągu.
Na przykład:
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);
}
}
}
AKTUALIZACJA: Aby odpowiedzieć na pomocny komentarz od @Wiktor Zychla
Wydajność tego podejścia jest lepsza i może być dużo lepiej w przypadku dużych pól XML, ponieważ SqlReader.GetString
najpierw załaduje zawartość pola do ciągu, podczas gdy SqlReader.GetSqlXml
tworzy XmlReader bezpośrednio ze strumienia. Można to szybko zweryfikować, patrząc na System.Data w Reflectorze lub podobnym narzędziu.