BizTalk 2013 WCF-SQL 适配器插入到 decimal(38,20)

BizTalk 2013 WCF-SQL adapter to insert into decimal(38,20)

我在使用 WCF-SQL 适配器将值插入 BizTalk 2013 的 SQL 类型 decimal(38, 20) 服务器列时遇到问题。我收到 InvalidCastException 消息:"System.InvalidCastException: Specified cast is not valid"

如果我测试列类型 decimal(18,18) 它有效。

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

当我从数据库 table 信息生成 XSD 时,decimal(38,20) 变成 xs:string ,长度限制为 40。也许这是 WCF 的标志- SQL 适配器不能处理这样的精度...?我也测试过将 XSD 更改为 xs:decimal,但没有区别。

有人吗?

加法: 未找到任何 "good" 方法来处理此限制。

最终设置是:XML => WCF-SQL 适配器 => 包含 varchar(40) 列的 table 类型参数的存储过程 => CAST table可变列到十进制(38,20)一对一=>插入目标table。

所以,解决方案是修改 table 类型以接受 varchar,并在存储过程中手动转换。

如果有人能解释更好的解决方案,我们将很高兴!

小数精度仅限于 .NET 框架类型。参见 here

BizTalk 文档中也有描述here。 "Decimal if precision <= 28. String if precision > 28"。

所以您处理字符串的方式是一种选择。如果您确实不需要超过 29 个位置,请在映射到 SQL 架构中使用 Round functoid。

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

中将其保留为十进制