我正在使用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;
答案 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);