Что означает тип данных SQL Server XML в .NET и как его преобразовать в XmlDocument? - программирование
Подтвердить что ты не робот

Что означает тип данных SQL Server XML в .NET и как его преобразовать в 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?

4b9b3361

Ответ 1

Я помню, как он переводил его в строку. Кормление XmlDocument со строкой работает как обычно.

Ответ 2

Это означает 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 или аналогичный инструмент.

Ответ 3

Я использую этот метод самостоятельно, используя SqlCommand.ExecuteXmlReader();

XmlDocument xdoc = new XmlDocument();
using (SqlCommand command = new SqlCommand(queryString, connection))
{
    XmlReader reader = command.ExecuteXmlReader();
    if (reader.Read())
    {
        xdoc.Load(reader);
    }
}

Ответ 4

Конечно, существует пространство имен System.Xml:

Пространство имен System.Xml предоставляет стандартную поддержку для обработки XML.

Чтобы использовать его, вам, вероятно, придется добавить его в качестве ссылки в свой проект. Microsoft выполнила инструкции для этого в Visual Studio.