Проблема преобразования байта () в дату () - PullRequest
0 голосов
/ 22 июня 2011

У меня есть запрос в моем DAL, который приводит к 1 элементу, дате. Это либо дата, либо ноль. Но я получаю сообщение об ошибке, когда значение равно нулю.

Недопустимое преобразование из типа 'DBNull' в тип 'Date'.

Запрос

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 ]

3 голосов
/ 22 июня 2011
  • Попробуйте использовать Convert.IsDBNull ()
  • Рассмотрите возможность возврата Nullable<DateTime> из getOrderDepositByOrderID() для проверки на ноль, а не DBNull

в C # ваш код должен выглядеть так:

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

Я не знаю operator as аналог в VB.NET

или

If Convert.IsDBNull(bllCust.getOrderDepositByOrderID(OrderID)) Then
    ...
Else
    ...
Else If
0 голосов
/ 22 июня 2011

Отредактировал поля базы данных так, чтобы нулевые значения получили значение по умолчанию 1900-01-01, дату, которая никогда не будет использоваться.

0 голосов
/ 22 июня 2011

Используйте операнд IS вместо =

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