0

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

保証金が支払われた場合、テーブルに日付がありますが、そうでない場合はnullのままになります。

すべての助けは大歓迎です!

4

3 に答える 3

3
  • Convert.IsDBNull()を使用してみてください
  • DBNullではなくnullをチェックするためにNullable<DateTime>から戻ることを検討してくださいgetOrderDepositByOrderID()

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

null値がデフォルト値1900-01-01(決して使用されない日付)を取得するようにデータベースフィールドを編集しました。

于 2011-06-22T10:37:31.753 に答える