我的代码背后有以下内容:
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
?但是如何以及在哪里。
修改
表weight
上的字段p301
声明为numeric(9, 3)
答案 0 :(得分:4)
您需要在存储过程中的小数和数字声明上设置精度和小数位数。如果在为小数分配0.5时没有,则它将已转换为1,您的数字也将为1。见here
因此,您的存储过程应如下所示:
@weight DECIMAL(9,3),
...
p301_weight = @weight
您使用的精度和比例应与表中列的设置相匹配。如果表只能做整数,那么你将不得不做类似于@Shawn C建议的事情,并通过乘以然后除以另一种方式将其转换为整数。