我希望这是一个简单的例子,因为这是我使用Oracle 11g(版本11.2)的第一个WPF。应用。

我可以从WPF应用程序代码中调用Oracle存储过程并检索输出(int和字符串)参数,但是当我尝试检索日期值时,仅得到以下值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;


我将继续研究这个问题,但是有什么想法我做错了吗?

最佳答案

现在正在工作。

在存储过程中,我必须更改以下行:

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应用程序中,我可以看到日期和时间部分。我希望这有帮助。

10-06 05:12
查看更多