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中的
或
1 2 3 4 5 | If Convert.IsDBNull(bllCust.getOrderDepositByOrderID(OrderID)) Then ... Else ... Else If |
编辑数据库字段,使空值获得默认值1900-01-01,该日期永远不会使用。
使用操作数
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 |