Получение XML файла с SQL Server средствами ADODB

Публикация № 1089309 Дата создания: 08.07.19 13:50

Разработка - Системная интеграция - Обмен через XML

XML SQL Server ADODB Stream чтение

В статье описано, как получать XML файл, сгенерированный SQL Server, средствами ADODB. Обработка написана на обычных формах, тестировалась на платформе 8.12.1685.

Возникла передо мной задача обработкой в 1С получить XML, сгенерированный запросом с иcпользованием FOR XML RAW и FOR XML AUTO.

Есть запрос, который генерирует XML файл на SQL сервере. Его нужно было записать в файл, затем обработать.

В статье для примера я сделал запрос, который не связан с данными из базы "SELECT '1234567890' as num1, 'abcdefghijklmmopqrstuvwxyz' as str1, 'абвгдеёжзиклмнопрстуфхцчшщьъэюя' as str2  for xml raw"

Сначала я использовал стандартную схему с использованием ADODB.Recordset. Дело в том, что XML так получать можно, читая Recordset, и записывая его в текстовый файл, но почему-то начальные буквы слов на кириллице изменялись не различные символы. Я думал, что это проблемы с кодировкой. Перепробовал много вариантов, но решить проблему не удалось.  Желающие могут попробовать. 

Основной цикл получения данных через Recordset выглядит как обычно:

	Поток = Новый COMОбъект("ADODB.Stream");
	Поток.Type = 2; //StreamTypeEnum.adTypeBinary = 1  StreamTypeEnum.adTypeText = 2
	Поток.charset="UTF-8";
	Поток.Open();

	Пока не rs.eof() Цикл
		rsval = rs.Fields(0).Value;
		Поток.Write(rsval);
	КонецЦикла;
	Поток.SaveToFile(ПолноеИмяФайла, 2);  // Записать поток в файл

При получении XML таким способом на выходе в файле получаю строку "1234567890ד   abcdefghijklmmopqrstuvwxyzד   אבגדהו¸זחטךכלםמןנסעףפץצקרש?422;ת?423;?424;?425;C", что явно не соответствует исходному тексту.

Гуглил, читал MSDN, смотрел примеры на C#, VB и прочее и прочее, но так и не удавалось решить проблему. Я даже точно не могу привести источники, которые привели меня к решению проблемы. Но вот эта ветка форума была одной из последних: https://www.sql.ru/forum/717172/adodb-command-object-or-provider-is-not-capable-of-performing-requested-operation-800a0cb3

В результате предлагаю вашему вниманию функцию, которая читает XML с SQL сервера и пишет его в файл:

Функция ПолучитьДанные(cn) Экспорт
	
	QueryText = "SELECT '1234567890' as num1, 'abcdefghijklmmopqrstuvwxyz' as str1, 'абвгдеёжзиклмнопрстуфхцчшщьъэюя' as str2  for xml raw";
	
	myCommand = Новый COMОбъект("ADODB.Command");
	
	objADOStream = Новый COMОбъект("ADODB.Stream");
	
	adTypeText = 2;
	objADOStream.Type = adTypeText; 
	objADOStream.Charset = "UTF-8";
	objADOStream.Open();

	myCommand.ActiveConnection = cn;
	myCommand.Properties("Output stream").Value = objADOStream;	// Output stream связываем с ADODB потоком

	adExecuteStream = 1024;

	myCommand.CommandText = QueryText;
	myCommand.CommandType = 1;	//adCmdText
	myCommand.Execute(QueryText, 0, adExecuteStream);	// Передать поток adExecuteStream - Это важно!

	objADOStream.SaveToFile(ПутьКФайлу, 2);

	objADOStream.Close();

	Сообщить("Файл записан:" +ПутьКФайлу);
	
КонецФункции

На вход в переменной "cn" передается установленное соединение (ADODB.Connection).

Прошу обратить особое внимание, что поток (objADOStream) два раза передается в команду.

Внимание! Для тех, кто скачает обработку, параметры подключение к SQL серверу описаны в функции GetSQLServerConnection() в модуле обработки.

Скачать файлы

Наименование Файл Версия Размер
Получение XML файла с SQL Server средствами ADODB:

.epf 8,59Kb
0
.epf 8,59Kb Скачать

Специальные предложения

Оставьте свое сообщение

См. также

Ошибка преобразования данных XDTO: Текст XML содержит недопустимый символ Промо

Практика программирования Обмен через XML v8 1cv8.cf Абонемент ($m)

Преобразование строкового значения к допустимому для XML. Типовое, нетиповое, RegExp.

1 стартмани

26.03.2013    88211    StepByStep    27    

Простая выгрузка данных в универсальном формате Enterprise Data

Обмен через XML v8::УФ Розница УНФ ERP2 ЗКГУ3.0 БП3.0 УТ11 КА2 ЗУП3.x Абонемент ($m)

Пошагово разобран текст процедуры, позволяющей выгрузить произвольный набор объектов в формате Enterprise Data (конечно, если это позволяет конфигурация). Приложена обработка, позволяющая выгружать произвольные объекты, в том числе запросом или по данным журнала регистрации.

2 стартмани

26.08.2019    14515    Iyar    5    

XDTO для чайников

Обмен через XML v8 1cv8.cf Абонемент ($m)

Пример использования XDTO пакетов для выгрузки документа с табличной частью.

1 стартмани

29.05.2019    40089    HAMMER_59    39    

1C + Python + Django Rest Framework + Vue.js. Опыт несложной full-stack разработки

Практика программирования Внешние источники данных Обмен через XML WEB Разработка v8 1cv8.cf Абонемент ($m)

В этой статье мы рассмотрим путь и основные моменты создания небольшого вэб-сервиса, который мы называем "Онлайн Прайс-лист". Выгрузка из 1С, бэкенд, фронтенд, получение заказов в 1С.

1 стартмани

22.04.2019    39063    riposte    68    

Сохранение реквизитов и табличных частей объектов в XML Промо

Обмен через XML Универсальные функции v8 1cv8.cf Абонемент ($m)

Пример того, как можно сохранять и загружать объекты 1С методами встроенных объектов ЗаписьXML и ЧтениеXML.

1 стартмани

25.11.2011    22803    saiten    21    

Перенос данных с использованием XDTO

Обмен через XML v8 Россия Абонемент ($m)

Использование объекта типа "ОбъектXDTO" для переноса данных из одной конфигурации в другую

1 стартмани

21.04.2019    12895    axae    14    

Заполнение справочника с изображениями элементами по умолчанию

Практика программирования Обмен через XML Универсальные функции v8 Абонемент ($m)

Пример одного из решений, как можно заполнить справочник с изображениями значениями по умолчанию включая сами изображения. Сами изображения взяты из программы MapSource 6.16.3. Данные для загрузки хранятся в макете в формате XML.

1 стартмани

26.03.2018    8883    Kim1C    0    

Организация обмена с базой филиала (розничного магазина) в торговой сети через XML (универсальный обмен)

Обмен через XML Перенос данных из 1C8 в 1C8 Розничная торговля Розничная торговля v8 КД УТ11 Розничная и сетевая торговля (FMCG) Абонемент ($m)

В статье по шагам рассматривается создание обмена между центральной базой и базами филиалов на базе конфигурации УТ 11. Для решения поставленной задачи было решено не использовать РИБ, т.к. требуется односторонний обмен ограниченным набором данных, к тому же по определенным условиям. Обмен реализован на основе типовой синхронизации на основе универсального обмена в формате EnterpriseData. Данная публикация может быть полезна внедренцам, которые работают с торговыми сетями, в том числе по модели франчайзинга.

1 стартмани

26.02.2018    38301    Kutuzov    18    

Пример заполнения/создания файла XML из XSD схемы, используя XDTO

Обмен через XML WEB v8 1cv8.cf Абонемент ($m)

Добрый день, коллеги! Наконец-то дошли руки написать сию статью. Хочу поделиться своим опытом по разбору xsd схемы используя Фабрику XDTO, а также связанным с этим XML файлом. Думаю, наверняка кому-то понадобится.

1 стартмани

21.12.2017    55201    sandybaev    28    

Механизмы и транспорт обмена данными. Пример создания в КД 2.1 правил обмена данными ЗУП 2.5 -> БП 3.0. Выгрузка ведомостей и банковских счетов. Передача параметров обмена из Источника в Приемник. ВыгрузитьПоПравилу(). ПередатьОдинПараметрВПриемник().

Обмен через XML Перенос данных из 1C8 в 1C8 v8 ЗУП2.5 КД БП3.0 Абонемент ($m)

В статье рассказываю: 1) о механизмах и транспорте обмена данными, где одной из сторон обмена выступает конфигурация на базе 1С, и о том, какой транспорт и в каких случаях лучше использовать 2) о решении задачи выгрузки данных документа «Зарплата к выплате организаций» (с выгрузкой банковский счетов физ лиц документа) из ЗУП 2.5.123.1 (далее Источник) в БП КОРП 3.0.52.39 (далее Приемник) путем создания правил обмена данными с использованием конфигурации «Конвертация данных» (далее просто КД) ред. 2.1.8.2. для (далее ЗкВО) 3) о тестирование полученных правил обмена данными.

1 стартмани

03.11.2017    34005    RailMen    5    

Использование SoapUi для работы с веб-сервисами. Часть1

Практика программирования Обмен через XML v8 Абонемент ($m)

Как работать с SoapUi для тестирования веб-сервисов .

1 стартмани

30.09.2016    130960    kiv1c    30