c# - 为什么在 C# 数据集中将 SQL 整型数字列映射为 System.Decimal?

标签 c# sql-server types dataset dataadapter

<分区>

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

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

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

最佳答案

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

如果 NUMERIC 根据您是否指出它有任何小数点而转换成 C# 的不同类型,那将没有意义。

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

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

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

关于c# - 为什么在 C# 数据集中将 SQL 整型数字列映射为 System.Decimal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11066752/

相关文章:

c# - .NET 4.0 中的协变和逆变错误

c# - 进行异步工作以返回快速响应的最佳方法

c# - DispatcherTimer 在更新 UI 时每分钟变慢

sql-server - SQL Server 版本控制与 git 集成?

types - 可以定义一个函数来判断一个元素是否是从给定的类型构造函数构造的吗?

Scala 模式匹配在 2.10 中的递归类型上失败

haskell - 类型论中 mu (μ) 绑定(bind)的范围

c# - 初始化组件抛出空引用异常

c# - C# 中的 SqlException

sql-server - 具有特定变更集的所有文件和版本号的 TFS 列表