MS SQL Server的Money数据类型似乎接受格式正确的货币值而没有问题(例如: $ 52,334.50 )从我的研究MS SQL Sever中忽略了$
和{{1字符。 ASP .NET有一个参数对象具有,
属性,Type/DbType
是一个可用的选项,可以设置为值。但是,当我将参数Currency
或Type
设置为货币时,它将不接受 $ 52,334.50 之类的值。我收到错误
输入字符串的格式不正确。
当我尝试更新/插入时。如果我不包含DbType
或$
字符,它似乎工作正常。另外,如果我没有为参数指定,
或Type
,它似乎也可以正常工作。这只是标准行为,其Type设置为currency的参数对象仍会拒绝ASP .NET中的DbType
和$
个字符吗?
以下是参数声明的示例(在.aspx页面中):
,
所以这里有更多信息: 我在上面提供的代码片段是为 SqlDatasSource Control 声明的Update命令的Update参数的一部分。该参数将更新数据库中表的(货币类型)列。我的数据库中的列绑定到 DetailsView控件中的控件。
答案 0 :(得分:0)
查看Parse上的覆盖 - 其中一个接受格式类型参数,其中一个有效值是货币。
答案 1 :(得分:0)
两个问题。 (1:.NET ASP层)和(2:服务器上的SQL Server)
在ASP方面,你试图将一个字符串放入货币/小数类型。
尝试将字符串$ 123.45转换为十进制类型,然后转换为声明。或者保留一个字符串(带有检查),或者字符串123.45M(M literal),因为......
在SQL端,美元符号是一个文字,意味着货币数据类型具有固定的4位小数。因此可以保留它,但SQL不会忽略它。它实际上是使用它来转换值。
这就是为什么我从不做你正在做的事情。你刚刚发现了真正发生的事情。 IIS配置文件和默认值会影响为什么带有逗号的dolars和带小数的德语标记都被正确解释。但123.45和123,45在两种语言配置文件中的含义并不相同。同样在SQL方面也会发生类似的事情,例如将一个文字美元符号传递给sql。因此,您可能希望清理该值并在屏幕上为用户正确设置,然后将十进制值传递给SQL,而不在SQL层进行格式化,这样这不是一个隐藏的问题。我个人通常会传递一个字符串并修复它,并在客户端合理验证后在服务器上验证它。