0

我在 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

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

欢迎所有帮助!

4

3 回答 3

3
  • 尝试使用Convert.IsDBNull()
  • Nullable<DateTime>考虑从返回getOrderDepositByOrderID()以检查 null,而不是 DBNull

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

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

我不知道operator asVB.NET 中的模拟

或者

If Convert.IsDBNull(bllCust.getOrderDepositByOrderID(OrderID)) Then
    ...
Else
    ...
Else If
于 2011-06-22T09:08:42.480 回答
0

使用操作数IS代替=

If bllCust.getOrderDepositByOrderID(OrderID) Is DBNull Then
   lblBoodschap.Text = ("Deposit not paid.\n")
Else
   lblBoodschap.Text = ("Deposit paid.\n")
End If
于 2011-06-22T09:18:14.823 回答
0

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

于 2011-06-22T10:37:31.753 回答