2013-08-08 2 views
2

이것은 Oracle 11g (11.2 버전)을 사용하는 첫 번째 WPF이므로이 간단한 것이 좋습니다. 신청.ODP.NET을 사용하여 Oracle 저장 프로 시저에서 날짜 값 가져 오기

내 WPF 응용 프로그램 코드에서 Oracle 저장 프로 시저를 호출하고 출력 (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; 

: 내 저장 프로 시저에서

, 나는, 다음 줄이 있었다 변경 JMK에 의해 제안 그리고

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

을 내 .NET 코드에서 나는에 있었다 변경 :

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

을 다음과 :

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

이제 WPF 응용 프로그램에서 날짜와 시간 부분을 볼 수 있습니다. 이게 도움이 되길 바란다.

0

내가 시도하고 다시 처음 오라클에서 문자열을 얻을 다음과 같이 DateTime 개체에이를 얻을 수 DateTime.Parse을 사용 :

cmd.ExecuteNonQuery(); 

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

이유 당신은 단지 날짜를 돌아지고있다 OracleDbType의 날짜 열거 형을 사용하고 있기 때문입니다. 이것은 지금 노력하고 있습니다

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

안녕하세요, JMK 님, 감사합니다. 지금 날짜가 표시되지만 시간 부분은 표시되지 않습니다 (예 : '08/08/2013 00:00:00 '(rawDateTime 및 outSchedDateTime 변수 모두) – mulkraj

+0

오라클에서 가져온 DateTime의 예를 게시하여 형식을 볼 수 있습니까? – JMK

+0

예, 오라클에서 다시 돌아가는 이유는 "08-08-2013 11:08:59"입니다. 건배. – mulkraj

관련 문제