c# - 当我向 SqlDataRecord 添加值时,数字会四舍五入

标签 c# sql-server

当我向 SqlDataRecord 添加一个值时,它是如何舍入该值的。我不确定是什么原因造成的。

编辑:约翰提出了一个很好的观点,遗漏了 dm 的属性类型,即“十进制?”

TotalCount = 2.5245332200983

SqlDataRecord rec = new SqlDataRecord(
                new SqlMetaData("TotalCount", SqlDbType.Decimal));

rec.SetNullableDecimal(0,dm.TotalCount);

When it is written to the DB it is showing 3.0000000000000

添加了数据库类型,以便我可以传递 TVP:

CREATE TYPE dbo.TestCount AS TABLE(
TotalCounts decimal(38,20) NULL
);

数据库表:

CREATE TABLE dbo.TestCountTbl(
TotalCounts                 decimal(38,20) NULL);

我做错了什么? SqlDbType 是否错误?

编辑:根据@user957902,我必须向我的 SqlDataRecord 添加精度/比例......完全有道理......呃。所以我添加了它,并且效果非常好。谢谢大家!

SqlDataRecord rec = new SqlDataRecord(
                new SqlMetaData("TotalCount", SqlDbType.Decimal,38,20));

最佳答案

根据您正在使用的 SqlMetaData 构造函数的文档 here ,对于 SqlDbType.Decimal,精度的默认值为 18,小数位数的默认值为 0。因此默认情况下它不会存储小数点之后的任何内容。您将需要使用允许您设置精度和小数位数的构造函数,如 here 所示。 .

public SqlMetaData(
    string name,
    SqlDbType dbType,
    byte precision,
    byte scale
)

关于c# - 当我向 SqlDataRecord 添加值时,数字会四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8407706/

相关文章:

javascript - 如何将 C# 变量传递给 JavaScript 函数

c# - 使用 C# 和 ASP.NET 将数据从 Excel 文件导出到 SQL Server 表的最佳方法?

c# - 对象参数和对象返回 C# WebService 给 Android

c# - Paypal 即时付款通知

c# - 如何在 C# 中存储 SQL 查询的结果字符串

sql-server - 在 SQL Server 2005 中使用 FreeTextTable 时初始查询速度缓慢

sql - 将搜索从 SQL Server 转换为 MySQL

sql-server - T-SQL 中的 PRINT 语句

sql - 获取sql server中所有执行的查询

sql - 拆分 SQL 结果