为什么 SQL 整数数字列在 C# 数据集中映射为 System.Decimal

本文关键字:集中 数据集 映射 Decimal System 数据 整数 SQL 数字 为什么 | 更新日期: 2023-09-27 18:37:22

为什么在 C# 中生成 SQL 整型数字列(例如 NUMERIC(3,0) ) (在数据集中)作为列类型或在数据适配器中作为参数类型)作为类型 Decimal

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

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

为什么 SQL 整数数字列在 C# 数据集中映射为 System.Decimal

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

如果NUMERIC转换为 C# 转换为不同的类型,具体取决于您是否指示它有任何小数点,则没有意义。

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

遗憾的是,您要么必须将数据库转换为使用 SMALLINTs 而不是NUMERIC,要么必须在 C# 中进行转换。

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