从 C# 向存储过程传递参数:将哪个 SQLDbType 用于数字 (18, 0)
Passing parameter to stored procedure from C#: Which SQLDbType to use for numeric(18, 0)
我在 SQL 服务器中有一个存储过程,它的输出参数 pf 类型为 numeric(18,0)
。在 C# 中,我创建了一个带有 SqlDbType.Decimal
的 SqlParameter
并将精度设置为 18 并将比例设置为 0.
这是我的代码:
queryParameters[2] = new SqlParameter("@Id", SqlDbType.Decimal);
queryParameters[2].Precision = 18; // # digits
queryParameters[2].Scale = 0; // # decimals
queryParameters[2].Direction = ParameterDirection.Output;
存储过程正确执行,并且returns输出参数正确,但是当我在C#中将其解析为长变量时如下所示:
long id = (long)queryParameters[2].Value;
提示无法转换
但是如果我将 SqlParameter
类型修改为 SqlDbType.Bigint
,那么它就可以工作了。
所以我将其作为 SqlDbType.BigInt
传递是正确的吗?或者最好将其作为 SqlDbType.Decimal
传递,然后使用十进制 C# 变量而不是 long?
将其作为 SqlDbType.Decimal
传递,然后执行以下操作也有效:
decimal id = (decimal)queryParameters[2].Value;
那么什么方法最好考虑到这个数字是一个没有小数的整数?
如果它在数据库中定义为 numeric(...)
,那么它的 必须是 a decimal
在 C# 中 - 它(当前)是否有数字逗号与否。
不要将它错误地表示为 bigint
/ long
- 很明显不是那种类型!另外-您为什么要首先尝试解析它/将其转换为 long
?对我来说毫无意义......它看起来像 decimal
,走路像 decimal
,叫声像 decimal
- 那么你很确定 它是一个decimal
!
如果您的 SQL 服务器类型突然更改为 numeric(20,2)
会怎样?通过在 C# 中使用 decimal
- 你很好,不需要任何更改。如果您改用 long
,现在您需要开始将代码更改为 decimal
。
始终 使用最合适的类型 - 对于 T-SQL numeric()
,这是 C# / .NET 中的 decimal
.
我在 SQL 服务器中有一个存储过程,它的输出参数 pf 类型为 numeric(18,0)
。在 C# 中,我创建了一个带有 SqlDbType.Decimal
的 SqlParameter
并将精度设置为 18 并将比例设置为 0.
这是我的代码:
queryParameters[2] = new SqlParameter("@Id", SqlDbType.Decimal);
queryParameters[2].Precision = 18; // # digits
queryParameters[2].Scale = 0; // # decimals
queryParameters[2].Direction = ParameterDirection.Output;
存储过程正确执行,并且returns输出参数正确,但是当我在C#中将其解析为长变量时如下所示:
long id = (long)queryParameters[2].Value;
提示无法转换
但是如果我将 SqlParameter
类型修改为 SqlDbType.Bigint
,那么它就可以工作了。
所以我将其作为 SqlDbType.BigInt
传递是正确的吗?或者最好将其作为 SqlDbType.Decimal
传递,然后使用十进制 C# 变量而不是 long?
将其作为 SqlDbType.Decimal
传递,然后执行以下操作也有效:
decimal id = (decimal)queryParameters[2].Value;
那么什么方法最好考虑到这个数字是一个没有小数的整数?
如果它在数据库中定义为 numeric(...)
,那么它的 必须是 a decimal
在 C# 中 - 它(当前)是否有数字逗号与否。
不要将它错误地表示为 bigint
/ long
- 很明显不是那种类型!另外-您为什么要首先尝试解析它/将其转换为 long
?对我来说毫无意义......它看起来像 decimal
,走路像 decimal
,叫声像 decimal
- 那么你很确定 它是一个decimal
!
如果您的 SQL 服务器类型突然更改为 numeric(20,2)
会怎样?通过在 C# 中使用 decimal
- 你很好,不需要任何更改。如果您改用 long
,现在您需要开始将代码更改为 decimal
。
始终 使用最合适的类型 - 对于 T-SQL numeric()
,这是 C# / .NET 中的 decimal
.