2013-08-08 2 views
2

Я надеюсь, что это простой, так как это мой первый WPF с Oracle 11g (версия 11.2). заявление.Получение значения даты из хранимой процедуры Oracle с использованием ODP.NET

Я могу вызвать хранимые процедуры Oracle из своего кода приложения WPF и получить параметры вывода (int и string), однако, когда я пытаюсь получить значение даты, я просто получаю следующее значение 01/01/0001 00:00:00, которое предлагает дату на самом деле не возвращается?

Хранимая процедура отлично работает в Oracle, то есть возвращает дату.

Вот мой код:

string sql = "pkge_intautotest.ScheduleNextRun"; 
OracleCommand cmd = new OracleCommand(sql, conn); 
cmd.BindByName = true; 
cmd.CommandType = System.Data.CommandType.StoredProcedure; 

DateTime outSchedDateTime; 
cmd.Parameters.Add("outSchedDateTime", OracleDbType.Date, ParameterDirection.Output); 

cmd.ExecuteNonQuery(); 

//Get the values output by the stored procedure 
outSchedDateTime = (DateTime)cmd.Parameters["outSchedDateTime"].Value; 

conn.Close(); 
conn.Dispose(); 

А вот моя (упрощенный) хранимая процедура:

PROCEDURE ScheduleNextRun (inIntno NUMBER, outCaseno OUT NUMBER, outSchedDateTime OUT DATE) AS 
BEGIN 
    DECLARE 
     sched_datetime DATE; 
     init_diary_id DIARY.ID%TYPE; 
     v_proceed PLS_INTEGER; 

    BEGIN 
     -- Get the schedule time for 4 minutes from now 
     SELECT TO_DATE(SYSDATE + 4/(24*60)) INTO sched_datetime FROM dual; 
     outSchedDateTime := sched_datetime; 

    END; 
END ScheduleNextRun; 

Я буду продолжать смотреть на это, но любые идеи, что я делаю неправильно?

ответ

2

Это сейчас работает.

В моей хранимой процедуре, я должен был изменить, следующую строку:

SELECT TO_DATE(SYSDATE + 4/(24*60)) INTO sched_datetime FROM dual; 

к следующему:

SELECT SYSDATE + 4/(24*60) INTO sched_datetime FROM dual; 

Тогда как предложено JMK, в моем коде .NET я должен был изменить:

cmd.Parameters.Add("outSchedDateTime", OracleDbType.Date, ParameterDirection.Output); 

Чтобы следующее:

cmd.Parameters.Add("outSchedDateTime", OracleDbType.TimeStamp, ParameterDirection.Output); 

Итак, теперь в моем приложении WPF я вижу дату и время. Надеюсь, это поможет.

0

Я хотел бы попробовать и получить строку обратно от оракула первоначально, а затем использовать DateTime.Parse, чтобы получить это в объект DateTime, например:

cmd.ExecuteNonQuery(); 

//Get the values output by the stored procedure 
string rawDateTime = cmd.Parameters["outSchedDateTime"].Value.ToString(); 
var outSchedDateTime = DateTime.Parse(rawDateTime); 

Причина вы только получаете Дата Спина потому что вы используете перечисление даты OracleDbType. Я думаю, если бы вы изменили это на TimeStamp, вы получили бы дату и время назад:

cmd.Parameters.Add("outSchedDateTime", OracleDbType.TimeStamp, ParameterDirection.Output); 
+0

Привет, спасибо JMK, это намного лучше. Я вижу дату сейчас, но не временную часть, например. '08/08/2013 00:00:00 'для переменных rawDateTime и outSchedDateTime. – mulkraj

+0

Можете ли вы опубликовать пример DateTime, который вы вернетесь из Oracle, чтобы мы могли видеть формат? – JMK

+0

Да, это то, что я получаю в Oracle: «08-08-2013 11:08:59». Приветствия. – mulkraj