指定的强制转换在 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;

注意:这里的SlnoRlno在数据库表中属于bigint类型。

错误:以下是错误消息。

Specified cast is not valid.

指定的强制转换在 C# 中无效

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);