С помощью столбца типа XML на сервере SQL, каков наиболее эффективный способ считывания этого обратно в XmlDocument
в ADO.Net?
?
Для этого конкретного использования XmlDocument
необходим для произвольного доступа к загруженному документу. Использование .Net 4.0 (C #) и SQL Server 2008 R2.
Первоначально у нас была хранимая процедура, которая возвращала набор результатов. При вызове SqlDataAdapter.Fill(DataTable)
для получения результатов XML возвращается только как string
.
Затем я изменил это, чтобы T-SQL возвращал выходной параметр типа 'XML', и зарегистрировал его в .Net как выходной параметр типа SqlDbType.Xml
. После выполнения результирующий выходной параметр имеет значение .DbType
и .SqlDbType
, равное DbType.Xml
, но вызов .Value
возвращает тип System.String
.
I может вызвать .SqlValue
на этом, который возвращает тип SqlTypes.SqlXml
. Отсюда я могу назвать его .Value
- который просто возвращает string
или CreateReader
- который возвращает XmlReader
. Так что я мог бы использовать это для заполнения XmlDocument
, используя XmlDocument.Load(XmlReader)
.
Главный вопрос - есть ли какая-то польза от этого, или я должен просто вернуться к получению строки - затем передать это new XmlDocument().LoadXml(string)
? Позволит ли использование подхода SqlXml
более эффективно передавать XML между SQL и уровнем .Net или же XML будет просто прозрачно передаваться в виде строки в любом случае «по проводам»? Даже если позже, я предполагаю, что подход SqlXml.CreateReader
может быть более эффективным, так как строка, содержащая всю структуру XML, никогда не потребуется создавать сразу в памяти - и на данный момент планирую использовать это .
(В качестве альтернативы я рассматривал использование SqlDataReader
и его метода GetSqlXml
. Интересно, что в настоящее время есть только 3 других результата для SO для "GetSqlXml" и пока Как получить данные XML из столбец в таблице SQL? представляется наиболее релевантным результатом, он ищет решение другой проблемы.)
Обратное было довольно простым: создайте XmlDocument
, добавьте входной параметр типа SqlDbType.Xml
, передайте в качестве значения экземпляр XmlDocument
- и все готово.
Я понимаю, что могу сам профилировать различия между этими методами - и планирую сделать это, как только будет время. Просто ищу кого-то, у кого уже могут быть ответы или кто-то может предложить альтернативы, которые я еще не рассматривал или с которыми я не знаком.