BizTalk 2013 WCF-SQL адаптер для вставки в десятичном виде (38,20) - PullRequest
0 голосов
/ 26 сентября 2018

У меня проблемы с вставкой значений в столбцы 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: десятичное, но без разницы.

Кто-нибудь?

ADDITION : Не нашел "хорошего" способа обработкиэто ограничение.

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

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

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

1 Ответ

0 голосов
/ 26 сентября 2018

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

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

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

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

...