Ответ 1
Я помню, как он переводил его в строку. Кормление XmlDocument со строкой работает как обычно.
У нас есть столбец в базе данных, который имеет тип xml
. Я читаю эту информацию через .net SqlDataReader
, но я не уверен, к чему это можно отнести.
Таблица msdn (http://msdn.microsoft.com/en-us/library/cc716729.aspx) предполагает, что это тип .net xml
, но нет System.Xml
, только System.Web.UI.WebControls.Xml
, поэтому я не уверен, что это правильно.
Итак, мой вопрос:
Что мне придает SqlDbType.Xml
, поскольку я читаю его с SqlDataReader
, и как мне преобразовать его в XmlDocument
?
Я помню, как он переводил его в строку. Кормление XmlDocument со строкой работает как обычно.
Это означает SqlXml
, и вы можете получить XmlReader
с SqlXml.CreateReader
. Вам нужно будет использовать метод SqlDataReader.GetSqlXml
, чтобы получить тип вместо строки.
Например:
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);
}
}
}
ОБНОВЛЕНИЕ: Чтобы ответить на полезный комментарий от @Wiktor Zychla
Эффективность этого подхода лучше и может быть намного лучше при работе с большими полями XML, потому что SqlReader.GetString
будет загружать содержимое поля в строку сначала, а SqlReader.GetSqlXml
напрямую создает XmlReader из потока. Это можно быстро проверить, посмотрев System.Data в Reflector или аналогичный инструмент.
Я использую этот метод самостоятельно, используя SqlCommand.ExecuteXmlReader();
XmlDocument xdoc = new XmlDocument();
using (SqlCommand command = new SqlCommand(queryString, connection))
{
XmlReader reader = command.ExecuteXmlReader();
if (reader.Read())
{
xdoc.Load(reader);
}
}
Конечно, существует пространство имен System.Xml:
Пространство имен System.Xml предоставляет стандартную поддержку для обработки XML.
Чтобы использовать его, вам, вероятно, придется добавить его в качестве ссылки в свой проект. Microsoft выполнила инструкции для этого в Visual Studio.