Вернуть ноль в выходной параметр dbtype.date - PullRequest
0 голосов
/ 20 мая 2019

У меня есть хранимая процедура, которая возвращает дату или ноль в параметр команды.Однако у меня возникают трудности с обработкой нулевых возвратов.

Процедура выглядит примерно так:

PROCEDURE GetDate(inParam IN VARCHAR2, outDate OUT DATE) AS
    BEGIN
        SELECT MAX(DateVal) INTO outDate
        FROM Table1
        WHERE Col1 = inParam;
    EXCEPTION 
        WHEN no_data_found THEN
        outDate:= NULL;
END GetDate;

И мой код VB.NET выглядит так:

Dim returnDate As Date

Connection.Open()
Command.CommandType = CommandType.StoredProcedure
Command.CommandText = "GEN_PACKAGE.GetDate"
Command.Parameters.Add("inParam", inParam).Direction = ParameterDirection.Input
Command.Parameters.Add("outDate", OracleDbType.Date).Direction = ParameterDirection.Output
Command.ExecuteNonQuery()
returnDate = CDate(Command.Parameters("outDate").Value)

Однако, используя это, я получаю исключение Conversion from type 'OracleDate' to type 'Date' is not valid. на returnDate = CDate(Command.Parameters("outDate").Value).

Если я изменю OracleDbType.Date на DbType.Date (который я нашел в качестве решения из другого ответа), я получаю Value does not fall within the expected range наCommand.Parameters.Add("D0131Date", DbType.Date).Direction = ParameterDirection.Output.

Как я могу вернуть дату для данного ввода, когда моя дата возвращения может быть или не быть нулевой?

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Извините, не могу проверить.Нет Oracle

    Dim returnDate = If(Command.Parameters("outDate").Value = DBNull.Value, Nothing, Command.Parameters("outDate").Value)
    If returnDate Is Nothing Then
        'Handle a null return
    Else
        Dim MyDate As Date = DirectCast(returnDate, Date)
    End If
0 голосов
/ 20 мая 2019

Вы можете преобразовать блок исключений вашей процедуры как

EXCEPTION 
        WHEN no_data_found THEN
        outDate:= date'1900-01-01';

, чтобы вернуть очень старую дату, и обработать это специальное значение, чтобы отфильтровать в вашем приложении как нулевое значение по некоторым операторам if или case с сопоставлением со значением outDate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...