为什么SQL整数数组列在C#DataSet中映射为System.Decimal?

Pav*_*dek 1 c# sql-server types dataset dataadapter

为什么NUMERIC(3,0)在C#(在DataSet中作为列类型或在DataAdapter中作为参数类型)生成的SQL整数数列(例如)作为类型生成Decimal

NUMERIC(3,0)可以存储-999到999范围内的整数值.我认为应该在C#中生成类型int或另一个整数.

我认为,这种行为是.NET或Visual Studio严重的bug.我应该如何解决它,如果我不想重写生成的代码,我不想转换到任何地方我在int和decimal之间使用它?谢谢.

Bra*_*Rem 5

你的问题是MSSQL NUMERIC转换为C#Decimal的原因,答案是因为NUMERIC即使你指定它没有像小数位这样的小数位,它仍然是一个浮点值NUMERIC[3,0].

这是没有意义的,如果NUMERIC这里取决于你是否表明有任何小数点或者不转换成C#为不同的类型.

我假设您正在使用NUMERIC[3,0]以节省数据库中的空间,但根据文档,它使用5个字节.INT另一方面,SQL 只使用4.而且,更好的是,a SMALLINT 只使用2个字节.

不幸的是,您要么必须将数据库转换为使用SMALLINTs而不是NUMERIC或者您将不得不在C#中进行转换.

如果您只有一个实体从数据库中检索数据,然后您可以将转换保持在最低限度并将其本地化为单个位置,那就太好了.

  • SMALLINT可以容纳NUMERIC(3,0)可以容纳的每个值,只需要2个字节. (3认同)