Money
和Decimal
的SQL类型在.NET中都被解释为Decimal
,有什么方法可以区分它们吗?我正在尝试正确地设置Excel电子表格的格式,但不知道哪些字段应设置为货币格式,哪些字段应为小数。例如:
+----------------+------------------+--------------+-----------------+
| Name (VarChar) | Weight (Decimal) | Cost (Money) | Inventory (Int) |
+----------------+------------------+--------------+-----------------+
| Widget | 3.75 | 9.99 | 25 |
+----------------+------------------+--------------+-----------------+
上面的标题包括用于此问题的数据类型,query
是从该表中选择的存储过程:
var result = conn.Query<dynamic>(query, parameters, commandType: CommandType.StoredProcedure).ToList();
foreach (var pair in (IDictionary<string, object>)result[0]) {
Console.WriteLine($"{pair.Key}: {pair.Value.GetType().Name}");
}
将导致:
Name: String
Weight: Decimal
Cost: Decimal
Inventory: Int32
我找到了这篇文章:Money datatype and decimal type of SQL in .net,但不幸的是,我没有标准化的列名,因为这意味着要将任何结果集转换为Excel电子表格。
我还考虑过在需要时更改存储过程以预先挂起美元符号,但这样做的工作量会大得多,而且很可能会破坏其他功能。
有没有不同的方法来确定结果的SQL类型?
发布于 2018-06-07 05:46:21
我以前也遇到过类似的问题,我刚刚从sys.columns INNER JOIN sys.types ON columns.user_type_id = types.user_type_id
中查询过这些列。但是看起来您使用的是存储过程。在SQL Server2012及更高版本中,您可以使用sys.dm_exec_describe_first_result_set_for_object(@object_id,1)
查找存储过程的元数据。
发布于 2019-10-16 17:05:02
我建议您在SQL中使用可编程性下的类型(用户定义的类型)。
您可以创建一个类型,就像我们在SQL中创建一个由名称、重量、成本和库存组成的类一样,在返回这些值的过程中,将它们添加到您刚刚创建的用户定义类型中,并将其作为集合发送。
在.Net中,创建一个包含相同属性(名称、重量、成本和库存)的类,并在其中获取值。
https://stackoverflow.com/questions/50729774
复制相似问题