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

Fik*_*vaş -1 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;
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 5

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

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

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

decimal amount = Convert.ToDecimal(txttutar.Text,CultureInfo.CurrentCulture)
Run Code Online (Sandbox Code Playgroud)

也就是说,不要使用 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....
Run Code Online (Sandbox Code Playgroud)