gpt4 book ai didi

c# - 将参数从 C# : Which SQLDbType to use for numeric(18, 0) 传递到存储过程

转载 作者:太空宇宙 更新时间:2023-11-03 22:58:58 25 4
gpt4 key购买 nike

我在 SQL Server 中有一个存储过程,它的输出参数 pf 类型为 numeric(18,0)。在 C# 中,我创建了一个带有 SqlDbType.DecimalSqlParameter,并将精度设置为 18,将比例设置为 0。

这是我的代码:

queryParameters[2] = new SqlParameter("@Id", SqlDbType.Decimal);
queryParameters[2].Precision = 18; // # digits
queryParameters[2].Scale = 0; // # decimals
queryParameters[2].Direction = ParameterDirection.Output;

存储过程正确执行,并正确返回输出参数,但是当我在 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(...),那么它在 C# 中必须是 decimal - 无论是(currently) 逗号后是否有数字。

不要将它错误地表示为 bigint/long - 它显然不是那种类型!另外 - 为什么你首先要尝试解析它/将它转换成 long ?对我来说毫无意义......它看起来像一个 decimal,走路像一个 decimal,叫声像一个 decimal - 然后你'我很确定 它是 decimal !

如果您的 SQL Server 类型突然更改为 numeric(20,2) 会怎样?通过在 C# 中使用 decimal - 没问题,无需更改。如果您使用的是 long,现在您需要开始将代码更改为 decimal

始终使用最合适的类型 - 对于 T-SQL numeric(),这是 C#/.NET 中的 decimal

关于c# - 将参数从 C# : Which SQLDbType to use for numeric(18, 0) 传递到存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44048352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com