关于.net:问题将Byte()转换为Date()

Problem Converting Byte() to Date()

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

Conversion from type 'DBNull' to type 'Date' is not valid.

查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

这就是我如何调用函数的方法。

1
2
3
4
5
6
7
If bllCust.getOrderDepositByOrderID(OrderID) = DBNull Then
   lblBoodschap.Text = ("Deposit not paid.
"
)
Else
   lblBoodschap.Text = ("Deposit paid.
"
)
End If

如果付了押金,表中就有日期,如果没有,就空了。

欢迎一切帮助!


  • 尝试使用convert.isdbnull()。
  • 考虑从getOrderDepositByOrderID()返回Nullable以检查是否为空,而不是dbnull。

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

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

我不知道vb.net中的operator as模拟

1
2
3
4
5
If Convert.IsDBNull(bllCust.getOrderDepositByOrderID(OrderID)) Then
    ...
Else
    ...
Else If


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


使用操作数IS而不是=

1
2
3
4
5
6
7
If bllCust.getOrderDepositByOrderID(OrderID) Is DBNull Then
   lblBoodschap.Text = ("Deposit not paid.
"
)
Else
   lblBoodschap.Text = ("Deposit paid.
"
)
End If