将Byte()转换为Date()的问题

时间:2011-06-22 09:06:03

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

我的DAL中有一个查询结果是1个项目,一个日期。它可以是日期,也可以是null。但是当值为null时我收到错误。

  

从“DBNull”类型转换为“日期”类型无效。

查询

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

如果支付押金,表格中有一个日期,如果没有,则保留为空。

欢迎所有帮助!

3 个答案:

答案 0 :(得分:3)

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

在C#中你的代码应该是这样的:

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

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

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

答案 1 :(得分:0)

使用操作数IS代替=

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

答案 2 :(得分:0)

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