我的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
如果支付押金,表格中有一个日期,如果没有,则保留为空。
欢迎所有帮助!
答案 0 :(得分:3)
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,这是一个永远不会被使用的日期。