我的代码中有以下内容:
protected void SaveValue_Click(object sender, EventArgs e)
{
ArticleDBHQ article = new ArticleDBHQ();
article.Weight = Convert.ToDecimal(tbWeight.Text);
}
在我的ArticleDBHQ
类中,成员变量Weight
如下:
public class ArticleDBHQ : Entity
{
private decimal? weight;
public decimal? Weight
{
get { return weight; }
set { weight = value; }
}
}
在我的数据访问层中,当我想将其保存到我的数据库中时,我调用一个带有 SqlCommand
的存储过程,如下所示:
SqlCommand cmd = new SqlCommand("MODIFY_ARTICLE");
我传递值:
cmd.Parameters.Add("@weight", SqlDbType.Decimal).Value = (!Entity.Weight.HasValue ? SqlDecimal.Null : Entity.Weight.Value);
在我的存储过程中,Weight
定义如下:
@weight DECIMAL,
...
p301_weight = @weight
并且在表 p301
中,列 weight
被定义为 numeric
。
我无法更改表格的类型,如何将 decimal
值保存为 numeric
?据我所知(并且我证明了这一点)它只保存了 integer
部分,所以不是保存 0,5
而是保存 1
(加上正在四舍五入)。
也许是convert
?但是如何以及在哪里。
编辑:
表 p301
上的字段 weight
声明为 numeric(9, 3)
最佳答案
您需要在存储过程中设置小数和数字声明的精度和小数位数。如果你不这样做,当你将 0.5 分配给你的小数时,它已经被转换为 1,你的数字也将是 1。参见 here
所以你的存储过程应该是这样的:
@weight DECIMAL(9,3),
...
p301_weight = @weight
您使用的精度和小数位数应与表中列的设置相匹配。如果该表只能处理整数,那么您必须按照@Shawn C 的建议执行某些操作,然后通过乘法再除法将其转换为整数。
关于c# - 将十进制值保存到数字字段 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33788641/