您好我正在使用以下内容获取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)
答案 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"];
}