【问题标题】:FormatException: Input string was not in the correct formatFormatException:输入字符串的格式不正确
【发布时间】:2011-06-09 10:40:35
【问题描述】:

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

【问题讨论】:

  • 可能存在空值,您是否检查了 dr["Views"].ToString() 的值
  • 如果你读了我的问题,你会注意到我说我确实允许空值

标签: c# asp.net sql


【解决方案1】:

试试

 View = dr["Views"] as int? ?? 0;

如果 db 中的值为 null,那么上面的值将被转换为可以接受 null 的可为 null 的 int。

使用合并运算符 ??如果数据库中的值为 null,则将 View 的值设置为其他值(在本例中为 0)。

【讨论】:

  • 我得到了一个无效的强制转换异常 ::
  • 数据库中的字段数据类型是什么 - 假设 null 是您的问题,但可能是其他问题??
  • 它是 int ... 可能是应该删除整个数据库并从头开始。我该怎么做?
  • 对不起 - 我很糟糕 - 忘记了 DbNulls 的问题 - 在上面修改 - 使用“as”进行投射应该没问题。
  • 如何将数据库中的 datetime 类型转换为 DateTime 对象 Time = (DateTime)dr["Time"];
【解决方案2】:

您可以使用int.TryParse() 来避免该错误。如果probem只是null,我建议使用System.Convert来处理这些情况,因为这样更安全、更清晰:

View = System.Convert.ToInt32(dr["Views"]);

【讨论】:

  • 我将链接发送到文档。无论如何尝试: View = System.Convert.ToInt32(dr["Views"]);
  • 对象不能从 DBNull 转换为其他类型。 - 无效的演员表异常
【解决方案3】:

为避免转换时出现异常,请始终使用 Int32.TryParse。

【讨论】:

  • 我认为它有效: Views = (Int32.TryParse(dr["Views"].ToString(), out result3))?int.Parse(dr["Views"].ToString( )):0;
【解决方案4】:

怎么样

if(dr["Views"] != DBNull)
{
// do your parse here
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多