尝试转换SQL int时无效的强制转换异常 - > c#int?

时间:2014-06-15 10:19:14

标签: c# sql sql-server null dbnull

您好我正在使用以下内容获取SQL Server数据库的列

public IDataReader myReader()
{
    DbCommand = new SqlCommand("Select * from Mydatabase");
    SqlConnection con = new SqlConnection(connectionstr);
    con.Open();
    DbCommand.Connection = con
    return command.ExecuteReader(CommandBehavior.closeConnection);
}

IDataReader reader = myReader();
while (reader.Read())
{
    int? a = (int?)reader["myIntColumn"];
}

在其他位置(对于其他表),代码工作正常,并且对于此表,它工作正常,直到我来到数据库中的int字段。 然后我得到System.InvalidCastException(在其他表中我没有得到那个问题)。

我做错了什么吗?或者我必须做才能使这项工作? (有问题的int值在DB中为NULL)

2 个答案:

答案 0 :(得分:5)

当结果为null时,您的代码将无效,因为在.NET端,该列的值将为DbNull.Value

试试这个:

int? a = reader["myIntColumn"] as int?;

答案 1 :(得分:1)

您需要显式检查DBNull.Value,如下所示:

while (reader.Read())
{
   var a = reader["myIntColumn"] == DBNull.Value ? null : (int?)reader["myIntColumn"];
}