c# - 将十进制值保存到数字字段 SQL

标签 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?但是如何以及在哪里。

编辑: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/

相关文章:

java.sql.SQLSyntaxErrorException : Unknown database 'userinfo'

c# - WebAPI,将一个或集合对象发布到同一操作而不更改消息正文

java - 在没有准备语句的 SQL 中转义字符

java - 选择文件路径字符串返回空 N1QL 查询

c# - LoadViewState 和 SaveViewstate?

c# - Entity Framework 核心 : use auto-generated foreign key as part of composite primary key

c# menuItem1 不会禁用

c# - 如何安全地将数据库值分配给对象属性?

c# - ANID 和 ANID2 长度不是 API 所说的 32

c# - 如何将PNG图像转换为灰度而不丢失透明度C#