ASP .NET:SQL Server货币类型和.NET货币类型

问题描述:

MS SQL Server的货币数据类型似乎接受格式良好的货币值没有问题(例如:$ 52,334.50)从我的研究MS SQL Sever只是忽略$,个字符。 ASP .NET有一个参数对象,该对象具有Type/DbType属性,而Currency是一个可设置为值的选项。但是,当我将参数TypeDbType设置为货币时,它不会接受像$ 52,334.50这样的值。我收到一个错误ASP .NET:SQL Server货币类型和.NET货币类型

输入字符串的不正确的格式。

当我尝试更新/插入。如果我不包括$,字符,它似乎工作正常。另外,如果我没有指定参数TypeDbType,它似乎也可以正常工作。这只是标准的行为,其类型设置为货币的参数对象仍然会拒绝在ASP .NET中的$,字符?

这里的参数声明的例子(在.aspx页面):

<asp:Parameter Name="ImplementCost" DbType="Currency" /> 

所以这里是一个小的更多信息: 我上面提供的代码片段是更新参数部分的更新命令声明为SqlDatasSource控件。该参数将更新我的数据库中某个表的列(金钱类型)。我的数据库中的列绑定到一个控件DetailsView控件

看看Parse上的覆盖 - 其中一个接受格式类型参数,其中一个有效值是货币。

+0

不知道这是否会在我的特定情况下工作。在OnInserting事件发生之前应用程序崩溃... – 2010-04-21 19:15:39

两个问题。 (1:.NET ASP层)和(2:在服务器上的SQL Server)

在ASP方面,你正试图把一个字符串中的货币/ decimal类型。

尝试将字符串$ 123.45转换为十进制类型,然后转换为声明。或者给它一个字符串(带有检查),或者一个字符串123.45M(M文字),因为...

在SQL端,美元符号是一个字面意思是货币数据类型,带有固定的4位小数。所以可以放弃它,但SQL不会忽略它。它实际上是用它来投射价值。

这就是为什么我从来没有做你在做什么。你刚刚发现了真正发生的事情。 IIS配置文件和默认值会影响为什么使用逗号和具有小数的德语标记的dolars全部解释正确。但在两种语言配置文件下,123.45和123,45并不意味着同样的事情。同样在SQL方面也会发生类似的情况,例如当字面美元符号被传入sql时。因此,您可能需要清理该值并在屏幕上为用户正确输入值,然后将十进制值传递给SQL,而无需在SQL层进行格式化,以便这不是隐藏的问题。我个人通常会传递一个字符串并在客户端进行合理验证后,在服务器上对其进行修复和验证。