VB.NET更新SQL Server时Decimal值被取整,求解决办法
问题解决:UPDATE操作Decimal值被取整的问题
你的问题不是数据类型选错了,SQL Server里的decimal(18,2)完全能满足需求,问题出在VB代码的参数处理上:
- 参数赋值时未正确转换类型:直接把
Textbox1.Text(字符串类型)赋值给Decimal类型的参数,会导致隐式转换时丢失小数部分。 - 参数添加的重载使用错误:
SqlCommand.Parameters.Add的参数顺序不对,导致精度和小数位数的设置没有生效。
修正后的VB代码:
cmd.CommandText = "UPDATE [dbo].[transaction] SET Price=@Price WHERE ID=@ID" ' 正确添加Decimal参数,先指定参数名、类型,再设置精度和小数位数 Dim priceParam As SqlParameter = cmd.Parameters.Add("@Price", SqlDbType.Decimal) priceParam.Precision = 18 priceParam.Scale = 2 ' 将文本框内容转换为Decimal类型后赋值 priceParam.Value = Decimal.Parse(TextBox1.Text) ' ID参数同理,转换为整数类型 cmd.Parameters.Add("@ID", SqlDbType.Int).Value = Integer.Parse(TextBox2.Text)
额外注意点:
- 建议添加格式校验,比如用
Decimal.TryParse判断输入是否为合法的小数,避免转换报错。 - 确认数据库的
Price字段确实是decimal(18,2),不要被查询时的格式化操作误导显示结果。
内容的提问来源于stack exchange,提问作者Joel Leoj
相关产品推荐
相关产品推荐

