实际文化是否与SQL转换为CLR浮点转换?

时间:2014-02-07 17:45:59

标签: asp.net .net sql-server clr

我正在开发一个ASP.Net WebForms遗留应用程序,我需要在其中改进一个新功能。我正在使用生成的DataSet(使用VS 2013)来弥合ReportViewer和SQL服务器之间的差距(本地报告,rdlc)。

一切都很好,除了一件事:浮动转换。在两个Windows 8.1 En_US系统上-10.5(列中的一个值)在报告中显示为-10.5但在服务器(Win 7 SP1 Es_CO)上显示为-105,即使查询在服务器的本地SQL实例上返回-10.5。

我已经检查了生成的数据集代码,它将数据行中的对象直接转换为double,因此我假设SQL服务器已经处理了转换(通过每列上的CAST指令)

我能做些什么吗?值得一提的是,所有对服务器(Win7机器)的请求都来自一台Win8.1 En_US机器。

状态更新: 我被暗示(不完全确定)故障是从SQL到CLR类型的转换,因为将报告列标记为String会产生相同的结果。

2 个答案:

答案 0 :(得分:1)

我想知道DataSet中列的类型是什么,并跟踪它直到它到达报告。 Web服务器与数据库位于同一台计算机上,还是位于不同的服务器上?也许您使用WCF在两者之间传输DataSet。还要检查设计器中的Report的区域设置(查看Properties),以及报告中该字段使用的数据类型(我只是在RDLC文件的XML中查找)。

我们遇到了类似的问题,其中带有小数位的值(例如" 10.5"变成" 105"当序列化和反序列化值时,没有对区域设置给予足够的重视。例如,如果你用德语解析" 10.5"它会将"。"解释为千分隔符,并忽略它,给你结果" 105"我猜它在es-CO中是一样的。

答案 1 :(得分:0)

这种情况出现在交叉语言场景中,您的UI线程文化与处理线程或服务器线程不同。使用一致的Cultureinfo.InvariantCulture,同时将数据从UI传递到服务器到SQL,并仅在UI上显示时进行格式化。

还有一个建议是在SQL端使用decimal。

希望这有帮助。