Запрос базы данных оракула из .Net с параметрами даты - PullRequest
0 голосов
/ 17 июня 2019

Это уничтожает меня ....

У меня есть процедура Oracle, как показано ниже: (это мой последний вариант)

create or replace PROCEDURE MANAGEMENTFEES 
(
  STARTDATE IN VARCHAR2    
, ENDDATE IN VARCHAR2
, cursor_ OUT sys_refcursor
) AS 
BEGIN
OPEN cursor_ FOR
    select PR.PRNUM
    FROM MAXIMO.PR
    WHERE PR.ISSUEDATE > to_date(STARTDATE) AND PR.ISSUEDATE < to_date(ENDDATE) 
END MANAGEMENTFEES;

Я запрашиваю его, используя следующее.Чистый код.

OracleConnection connection = getConnection();
            connection.Open();
            string startDate = new DateTime(2019, 1, 1).ToString("dd-MMM-yy");
            string endDate = new DateTime(2019, 5, 1).ToString("dd-MMM-yy");

            OracleDataAdapter da = new OracleDataAdapter();
            OracleCommand cmd = new OracleCommand();
            cmd.Connection = connection;
            cmd.CommandText = "ORACLE.MANAGEMENTFEES";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("STARTDATE", OracleDbType.Varchar2).Value =startDate;
            cmd.Parameters.Add("ENDDATE", OracleDbType.Varchar2).Value = endDate;
            cmd.Parameters.Add("cursor_", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            cmd.ExecuteNonQuery();
            da.SelectCommand = cmd;
            DataTable dt = new DataTable();
            da.Fill(dt);

Это дает мне пустую таблицу данных, но в ней есть заголовки.Так что это говорит мне, что запрос просто не дает никаких результатов.Я изменял параметры даты, используя несколько ответов stackoverflow, но я не получаю.*

Справка?

ОБНОВЛЕНИЕ - Добавлен код с жестко закодированными датами

create or replace PROCEDURE MANAGEMENTFEES 
(
  STARTDATE IN DATE    
, ENDDATE IN DATE
, cursor_ OUT sys_refcursor
) AS 
BEGIN
OPEN cursor_ FOR
    select PR.PRNUM
    FROM MAXIMO.PR
    WHERE PR.ISSUEDATE > '01-JAN-19' AND PR.ISSUEDATE < '01-MAY-19' 
    ORDER BY ISSUEDATE ASC;
END MANAGEMENTFEES;

Ответы [ 2 ]

1 голос
/ 17 июня 2019

Ваша процедура должна быть такой:

create or replace PROCEDURE MANAGEMENTFEES 
(
  STARTDATE IN DATE
, ENDDATE IN DATE
, cursor_ OUT sys_refcursor
) AS 
BEGIN
OPEN cursor_ FOR
    select PR.PRNUM
    FROM MAXIMO.PR
    WHERE PR.ISSUEDATE > STARTDATE AND PR.ISSUEDATE < ENDDATE
END MANAGEMENTFEES;

и вызов в .NET будет таким:

DateTime startDate = new DateTime(2019, 1, 1);
DateTime endDate = new DateTime(2019, 5, 1);
...
cmd.Parameters.Add("STARTDATE", OracleDbType.Date).Value = startDate;
cmd.Parameters.Add("ENDDATE", OracleDbType.Date).Value = endDate;
0 голосов
/ 18 июня 2019

Теперь это решено и было вызвано использованием STARTDATE и ENDDATE, которые зарезервированы Oracle (хотя не было выдано никакой ошибки).

Изменение их на v_STARTDATE и v_ENDDATE решена проблема.

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