指定的强制转换在 C# 中无效
本文关键字:无效 转换 | 更新日期: 2023-09-27 18:14:12
我在数据库表中有一列 bigint 类型。我希望它检索并将其分配给 C# 中的变量,如下面的示例所示。
示例:
obj.Total1 = (Int32)reader["Slno"] != null ? (Int32)reader["Slno"] : 0;
obj.Total2 = (Int32)reader["Rlno"] != null ? (Int32)reader["Rlno"] : 0;
注意:这里的Slno
和Rlno
在数据库表中属于bigint类型。
错误:以下是错误消息。
Specified cast is not valid.
SQL的BigInt
映射到C#中的long
,而不是int
。
BigInt 需要映射到 long
这是 C# 中等效的 64 位整数值。
此外,您应该将代码更改为如下所示的内容:
int slnoCol = reader.GetOrdinal("Slno");
int rlnoCol = reader.GetOrdinal("Rlno");
obj.Total1 = !reader.IsDBNull(slnoCol) ? reader.GetInt64(slnoCol) : (long)0;
obj.Total2 = !reader.IsDBNull(rlnoCol) ? reader.GetInt64(rlnoCol) : (long)0;
编辑:
注意到您的评论后,Total1 和 Total2 int
,您还需要将它们更改为 long
public long Total1 { get; set; }
public long Total2 { get; set; }
这是因为int
是一个 32 位整数,它不能存储与您在表中使用的 64 位整数相同的最大值。
就我而言,当我的表为空时,我得到了">指定的强制转换无效"。
所以我像这样更改了我的代码:
while (reader.Read())
max = reader.GetInt32(0);
添加了对DBNull
的检查:
while (reader.Read())
max = reader.IsDBNull(0) ? 0 : reader.GetInt32(0);