BizTalk 2013 WCF-SQL адаптер для вставки в десятичном виде (38,20)

У меня возникают проблемы при вставке значений в столбцы SQL Server типа decimal(38, 20) из BizTalk 2013 с использованием адаптера WCF-SQL. Я получаю InvalidCastException с сообщением: "System.InvalidCastException: указанное приведение недействительно"

Если я тестирую десятичный тип столбца (18,18), он работает.

Похоже, что адаптер WCF-SQL не обрабатывает десятичную с очень высокой точностью. Вопрос в чем ограничение? И есть ли обходной путь?

Когда я генерирую XSD из информации таблицы базы данных, десятичное число (38,20) превращается в xs: строку с ограничением длины 40. Возможно, это признак того, что адаптер WCF-SQL не может обрабатывать такую ​​точность...? Я также проверил, чтобы изменить XSD на xs: десятичное, но без разницы.

Кто-нибудь?

ДОПОЛНЕНИЕ: не нашел "хорошего" способа справиться с этим ограничением.

Окончательная настройка: XML => WCF-SQL адаптер => Хранимая процедура с параметром типа таблицы, содержащим столбцы varchar(40) => Столбцы переменной таблицы CAST в десятичные (38,20) по одному => INSERT в таблицу назначения.

Таким образом, решение состояло в том, чтобы изменить тип таблицы так, чтобы она принимала varchar, и вручную конвертировать в хранимую процедуру.

Был бы рад, если бы кто-то мог объяснить лучшее решение!

1 ответ

Решение

Десятичная точность ограничена типом платформы.NET. Смотрите здесь.

Также описано в документации BizTalk здесь. Msgstr "Десятичная, если точность <= 28. Строка, если точность> 28".

Таким образом, ваш способ работы со строками - вариант. Использовать Round functoid в вашей карте к схеме SQL, если вам не нужно больше 29 позиций.

Другой вариант, который вы могли бы рассмотреть, - это изменить региональные настройки для пользователя хоста BizTalk, использующего порт отправки. Текущий параметр / язык вашего десятичного разделителя представляет собой запятую вместо точки (или наоборот) и не соответствует типу данных для SQL Server. Для этой опции вы должны сохранить тип как string в вашей схеме и держите его десятичным в вашей таблице SQL Server.

Другие вопросы по тегам