Чтение XML из Sproc и запись в файл - PullRequest
0 голосов
/ 23 декабря 2009

Мне нужно прочитать большой результат XML (используя For XML) из хранимого процесса и записать его в файл в приложении .Net. Мой первый шаг - прочитать xml из proc с помощью XmlReader. Затем мне нужно записать его в файл. Это лучший способ справиться с этим сценарием, или есть «лучший» метод?

Ответы [ 3 ]

1 голос
/ 23 декабря 2009

Если это может быть более удобно, вы также можете записать xml в файл непосредственно из хранимой процедуры, используя bcp и cmdshell, как в этом примере:

DECLARE @exe nvarchar(1000)
SET @exe =N'bcp '
SET @exe =@exe + N'"SELECT id, Color FROM Tinker.dbo.myTable AS myTable FOR XML AUTO" '
SET @exe =@exe + N'queryout E:\DB\Colors.xml -c -T'
EXEC master..xp_cmdshell @exe

Чтобы это работало, вам нужно включить xp_cmdshell , а также убедиться, что у службы SQL-сервера есть разрешение на запись в каталог.

0 голосов
/ 24 декабря 2009

Как вы обнаружили, семейство API-интерфейсов Reader в .Net плохо сочетается с семантикой копирования. Чтобы скопировать XML Reader, вам придется делать это узел за узлом, что медленно и очень подвержено ошибкам.

Я бы сказал, что лучшая альтернатива вашей проблеме - использование неформатированного потока, а не читателя. Потоки имеют буфер byte[] Чтение и Запись семантики, которые допускают простое копирование. Чтобы получить правильный поток из ADO.Net, вы должны использовать ExecuteReader, и вы должны передать CommandBehavior.SequentialAccess , чтобы программа чтения данных не кэшировала ваш 200-мегабайтный документ, и вы должны получить интересующую область как один из типов SqlClient с семантикой потока, которых не так много: SqlBytes.Stream .

0 голосов
/ 23 декабря 2009

Вы делаете именно то, что я бы сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...