BizTalk 2013 WCF-SQL适配器插入十进制(38,20)

时间:2018-09-26 09:59:04

标签: biztalk biztalk-2013

我在使用WCF-SQL适配器从BizTalk 2013将值插入到类型为decimal(38,20)的SQL Server列中时遇到问题。我收到InvalidCastException消息:“ System.InvalidCastException:指定的演员表无效”

如果我测试列类型为十进制(18,18),则可以正常工作。

似乎WCF-SQL适配器不能非常高精度地处理小数。问题是什么限制?而且,如果有解决方法?

当我从数据库表信息生成XSD时,十进制(38,20)变成长度限制为40的xs:string。也许这表明WCF-SQL适配器无法处理这种精度...?我还测试过将XSD更改为xs:decimal,但没有区别。

有人吗?

添加: 找不到解决此限制的任何“好方法”。

最终设置为:XML => WCF-SQL适配器=>具有表类型参数的存储过程,其中包含varchar(40)列=>将CAST表变量列一对一转换为十进制(38,20)=>插入目标表。

因此,解决方案是修改表类型以接受varchar,然后在存储过程中手动进行转换。

如果有人可以解释更好的解决方案,那将很高兴!

1 个答案:

答案 0 :(得分:2)

十进制精度仅限于.NET Framework类型。参见here

也在BizTalk文档here中进行了描述。 “如果精度<= 28,则为小数。如果精度> 28,则为字符串”。

因此,您可以选择使用字符串的方式。如果您确实不需要超过29个位置,请在映射到SQL模式的地图中使用Round函数。

您可以考虑的另一个选项是更改运行发送端口的BizTalk主机用户的区域设置。小数点分隔符的当前设置/语言是逗号而不是点(或相反),并且与SQL Server的数据类型不匹配。对于此选项,您必须在架构中将类型保留为string,并在SQL Server表中将其保留为十进制。