当我向 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/