【问题标题】:Problem Converting Byte() to Date()将 Byte() 转换为 Date() 的问题
【发布时间】:2011-06-22 18:37:31
【问题描述】:

我的 DAL 中有一个查询结果为 1 个项目,即一个日期。它是日期或空值。但是当值为空时我得到一个错误。

从“DBNull”类型到“Date”类型的转换无效。

查询

Public Function GetOrderDepositByOrderID(ByVal OrderID As Integer) As Date
    myconn.Open()

    Dim date As Date

    Dim sql As String = "SELECT ifnull(OrderDeposit, '1900-01-01') FROM Order WHERE OrderID = ?"
    Dim cmd As New OdbcCommand(sql, myconn)

    cmd.Parameters.AddWithValue("OrderID", OrderID)

    date= cmd.ExecuteScalar()

    'connectie sluiten
    myconn.Close()

    Return date
End Function

这就是我调用函数的方式。

If bllCust.getOrderDepositByOrderID(OrderID) = DBNull Then
   lblBoodschap.Text = ("Deposit not paid.\n")
Else
   lblBoodschap.Text = ("Deposit paid.\n")
End If

如果支付了定金,表格中有日期,如果没有,则为空。

欢迎所有帮助!

【问题讨论】:

  • 您无法将 DBNull 转换为 DateTime
  • 如果 NULL 是您的日期的有效值,那么您应该使用 Nullable 来表示它。
  • 我该怎么做呢?我也用查询编辑了我的帖子。

标签: .net vb.net ado.net dbnull


【解决方案1】:
  • 尝试使用Convert.IsDBNull()
  • 考虑从getOrderDepositByOrderID() 返回Nullable<DateTime> 以检查null,而不是DBNull

在 C# 中,您的代码应如下所示:

return date = cmd.ExecuteScalar() as DateTime?;

我不知道operator as VB.NET 中的模拟

If Convert.IsDBNull(bllCust.getOrderDepositByOrderID(OrderID)) Then
    ...
Else
    ...
Else If

【讨论】:

  • 我会把它放在哪里?在我的查询中?我将使用查询更新我的帖子。
  • 我会将 convert.isDBNULL 放在哪里?
  • 但是我表中的字段已经是“日期”类型,对于带有空值的字段,这不会给我同样的问题吗?
  • @Tom:SQL 类型 Date 与 .NET 类型 System.DateTime 有关。 Nullable<DateTime>(或 C# 中的 DateTime?)是可以为空的 DateTime。最适合从数据库读取的解决方案
  • 所以 DateTime 比 Date 好?
【解决方案2】:

使用操作数IS 而不是=

If bllCust.getOrderDepositByOrderID(OrderID) Is DBNull Then
   lblBoodschap.Text = ("Deposit not paid.\n")
Else
   lblBoodschap.Text = ("Deposit paid.\n")
End If

【讨论】:

    【解决方案3】:

    编辑了数据库字段,以便空值获得默认值 1900-01-01,这是一个永远不会使用的日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-08
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多