C#将十进制值传递给SQL Server

时间:2017-03-08 08:03:46

标签: c# sql-server decimal

我正在使用SQL Server数据库。表格列十进制(13,2)我从c#十进制类型参数发送值。我的问题是从c#发送值400.00但值保存40000.00。可以帮助我吗?

 decimal amount = Convert.ToDecimal(txttutar.Text,CultureInfo.InvariantCulture)

 SqlCmd.Parameters.Add("@AMOUNT", SqlDbType.Decimal).Value = amount;

2 个答案:

答案 0 :(得分:4)

您描述的症状清楚地表明您的输入与InvariantCulture设置不匹配。

如果您的文化使用逗号或其他内容作为十进制值的分隔符,那么使用InvariantCulture转换文本可能会产生错误的值。

例如,在我的文化(it-IT)中使用InvariantCulture转换 40000 (it-IT中的正确小数)会导致上述值 40000
请改用CultureInfo.CurrentCulture

decimal amount = Convert.ToDecimal(txttutar.Text,CultureInfo.CurrentCulture)

表示不要使用Convert.ToDecimal转换用户输入 如果用户键入的内容不是有效的十进制数(将输入留空或键入类似" ABC"的字符串),Convert.ToDecimal将抛出异常。
而是使用decimal.TryParse并检查输出

decimal amount;
if(!decimal.TryParse(txttutar.Text, NumberStyles.None, CultureInfo.CurrentCulture, out amount))
    // Message for your user -- Invalid number --
else
    // go on with the database code....

答案 1 :(得分:0)

这应该有所帮助。

decimal amount = Convert.ToDecimal(txttutar.Text,CultureInfo.InvariantCulture)

SqlParameter amtParam = new SqlParameter("@AMOUNT", SqlDbType.Decimal);

amtParam.Precision = 13;
amtParam.Scale = 2;
amtParam.Value = amount;

SqlCmd.Parameters.Add(amtParam);