将十进制值保存到数字字段SQL中

时间:2015-11-18 19:26:12

标签: c# sql asp.net sql-server sql-server-2008-r2

我的代码背后有以下内容:

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)

1 个答案:

答案 0 :(得分:4)

您需要在存储过程中的小数和数字声明上设置精度和小数位数。如果在为小数分配0.5时没有,则它将已转换为1,您的数字也将为1。见here

因此,您的存储过程应如下所示:

 @weight DECIMAL(9,3), 
 ...
 p301_weight = @weight

您使用的精度和比例应与表中列的设置相匹配。如果表只能做整数,那么你将不得不做类似于@Shawn C建议的事情,并通过乘以然后除以另一种方式将其转换为整数。