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

时间:2012-06-16 20:21:41

标签: c# sql-server types dataset dataadapter

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

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

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

1 个答案:

答案 0 :(得分:5)

您的问题是为什么MSSQL NUMERIC转换为C#Decimal,答案是因为NUMERIC仍然是浮点值,即使您指定它没有像{一样的小数位数{1}}。

如果将NUMERIC[3,0]转换为不同类型的C#,取决于您是否指出它有任何小数点,那就没有意义。

我假设您使用NUMERIC来节省数据库中的空间,但根据文档,它uses 5 bytes。另一方面,SQL NUMERIC[3,0]only uses 4。而且,更好的是INT uses only 2 bytes

不幸的是,您要么必须将数据库转换为使用SMALLINT而不是SMALLINTs,否则您将不得不转换为C#。

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