You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET更新SQL Server时Decimal值被取整,求解决办法

问题解决:UPDATE操作Decimal值被取整的问题

你的问题不是数据类型选错了,SQL Server里的decimal(18,2)完全能满足需求,问题出在VB代码的参数处理上:

  1. 参数赋值时未正确转换类型:直接把Textbox1.Text(字符串类型)赋值给Decimal类型的参数,会导致隐式转换时丢失小数部分。
  2. 参数添加的重载使用错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:40:20