FormatException:输入字符串的格式不正确

时间:2011-06-09 10:40:36

标签: c# asp.net sql

我在数据库中的一个表中有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();
    }

4 个答案:

答案 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。