我在数据库中的一个表中有Views字段。起初我允许它取空,现在它不允许它取空。问题是当我将SqlReader实例转换为int时抛出异常。这是代码:
try
{
conn.Open();
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (dr != null && dr.Read() && dr["Views"] != null && dr["PageNumber"] != null && dr["Replies"]!=null)
{
Name = dr["Name"].ToString();
ThreadName = dr["ThreadTitle"].ToString();
Views = int.Parse(dr["Views"].ToString());//it is being thrown here when i try to convert it to an int..How can i prevent that mistake from being thrown?
Replies = int.Parse(dr["Replies"].ToString());
Topic = dr["Theme"].ToString();
Subtopic = dr["Topics"].ToString();
PageNumber = int.Parse(dr["PageNumber"].ToString());
Time = (DateTime)dr["Time"];
}
dr.Close();
}
答案 0 :(得分:2)
尝试
View = dr["Views"] as int? ?? 0;
如果db中的值为null,那么它将被强制转换为可以接受空值的可空int。
使用coalesce运算符??如果数据库中的值为空,则将View的值设置为其他值(在本例中为0)。
答案 1 :(得分:1)
您可以使用int.TryParse()来避免错误。如果问题只是null,我建议使用System.Convert来处理这些情况,因为它更安全,更明确:
View = System.Convert.ToInt32(dr["Views"]);
答案 2 :(得分:0)
怎么样
if(dr["Views"] != DBNull)
{
// do your parse here
}
答案 3 :(得分:0)
为避免转换时出现异常,请始终使用Int32.TryParse。