【问题标题】:BizTalk 2013 WCF-SQL adapter to insert into decimal(38,20)BizTalk 2013 WCF-SQL 适配器插入十进制 (38,20)
【发布时间】:2019-03-02 01:42:54
【问题描述】:

我在使用 WCF-SQL 适配器从 BizTalk 2013 将值插入十进制 (38, 20) 类型的 SQL Server 列时遇到问题。我收到 InvalidCastException 消息:“System.InvalidCastException: Specified cast is not valid”

如果我测试列类型 decimal(18,18) 它可以工作。

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

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

有人吗?

添加: 没有找到任何“好”的方法来处理这个限制。

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

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

如果有人能解释更好的解决方案会很高兴!

【问题讨论】:

    标签: biztalk biztalk-2013


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      相关资源
      最近更新 更多