【问题标题】:IsDBNull throws an exceptionIsDBNull 抛出异常
【发布时间】:2015-01-30 01:27:33
【问题描述】:

我正在阅读 MySql 数据库,其中一列是 DateTime 类型。其中一些日期为空。我似乎无法弄清楚如何检查值是否为空。 我以为 IsDbNull 可以解决问题,但它根本没有区别

if (!reader.IsDBNull(4))
{
   service.ServiceDate = reader.GetDateTime("serviceDate");
}

这是我得到的例外:

"附加信息:无法将 MySQL 日期/时间值转换为 System.DateTime"

我也试过

if (System.DBNull.Value == reader.IsDBNull(4))

还有

reader.IsDBNull(4).ToString()

Convert.ToBoolean(reader.IsDBNull(4))

如何在不使用 try catch 的情况下检查它?

【问题讨论】:

  • 阅读器的类型是什么?
  • 您正在阅读的日期时间值是多少?它可能在 System.DateTime 的范围之外。
  • IsDBNull 不会抛出该错误。但是reader.GetDateTime("serviceDate") 应该会导致编译器错误,因为GetDateTime 只接受int 作为列索引的参数。显示你的真实代码。
  • Blorgbeard,GetDateTime 有一个字符串重载,是 IsDBNull 引发了错误。我试图通过即时窗口查看它的结果来确定它。

标签: c#


【解决方案1】:

该错误似乎与 IsDBNull 没有任何关系 - 它特别提到了 DateTime 转换。您是否尝试过将列索引传递给GetDateTime,就像您对IsDbNull 所做的那样?

if (!reader.IsDBNull(4))
{
   service.ServiceDate = reader.GetDateTime(4);
}

.

另一种可能:Convert Zero Datetime=true

此外,在阅读了有关错误的其他一些信息后,听起来您可能需要将 Convert Zero Datetime=true 添加到您的连接字符串中,这样可以在 DATETIME 列中转换 0000-00-00 00:00:00 值(如果您有任何其中)到DateTime.MinValue

在此处查看一些结果:http://www.bing.com/search?q=Unable+to+convert+MySQL+date%2Ftime+value+to+System.DateTime&form=IE10TR&src=IE10TR&pc=HPDTDFJS

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 2013-05-24
    • 2011-05-30
    • 1970-01-01
    • 2011-02-25
    • 2012-01-24
    • 1970-01-01
    相关资源
    最近更新 更多