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

ASP.NET:SQL Server货币类型和.NET货币类型,asp.net,sql-server,parameters,currency,Asp.net,Sql Server,Parameters,Currency,MS SQL Server的货币数据类型似乎接受了我的研究中的格式良好的货币值(例如:$52334.50),MS SQL Server只是忽略了$和,字符。ASP.NET有一个参数对象,该对象具有Type/DbType属性,并且Currency是一个可设置为值的选项。但是,当我将参数Type或DbType设置为currency时,它将不接受$52334.50这样的值。我收到一个错误 输入字符串的格式不正确 当我尝试更新/插入时。如果我不包括$或,字符,它似乎可以正常工作。另外,如果我没有为参数指

MS SQL Server的货币数据类型似乎接受了我的研究中的格式良好的货币值(例如:$52334.50),MS SQL Server只是忽略了
$
字符。ASP.NET有一个参数对象,该对象具有
Type/DbType
属性,并且
Currency
是一个可设置为值的选项。但是,当我将参数
Type
DbType
设置为currency时,它将不接受$52334.50这样的值。我收到一个错误

输入字符串的格式不正确

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

以下是参数声明的示例(在.aspx页面中):


这里有更多的信息:
我在上面提供的代码片段是为SqlDataSource控件声明的Update命令的Update参数的一部分。该参数将更新数据库中表的一列(货币类型)。“我的数据库”中的列绑定到DetailsView控件中的一个控件。

查看解析时的覆盖-其中一个接受格式类型参数,其中一个有效值为currency。

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

在ASP端,您试图将字符串放入money/decimal类型

尝试将字符串$123.45转换为十进制类型,然后转换为您的声明。或者留下一个字符串(带检查),或者一个字符串123.45M(M literal),因为

在SQL端,美元符号是一个文本,表示货币数据类型,具有固定的4位小数。因此,离开它是可以的,但SQL并没有忽略它。它实际上是在使用它来转换值


这就是为什么我从来不做你正在做的事。你刚刚发现了真正发生的事情。IIS配置文件和默认值会影响为什么带逗号的dolar和带小数的德语标记都能正确解释。但是123.45和123,45在两种语言中的含义并不相同。同样,在SQL端,类似的事情也会发生,例如当一个字面美元符号被传递到SQL时。因此,您可能希望清理该值并将其正确显示在用户屏幕上,然后将十进制值向上传递给SQL,而不在SQL层进行任何格式化,以便这不是一个隐藏的问题。我个人通常会传递一个字符串,在客户端对其进行合理验证后,对其进行修复并在服务器上进行验证。

不确定这在我的特定情况下是否有效。在OnInserting事件发生之前应用程序崩溃。。。
<asp:Parameter Name="ImplementCost" DbType="Currency" />