2

これは、Oracle 11g (バージョン 11.2) を使用した最初の WPF であるため、単純なものであることを願っています。応用。

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;

私はこれを見続けますが、私が間違っていることについて何か考えはありますか?

4

2 に答える 2

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 アプリケーションでは、日付と時刻の部分を確認できます。これが役立つことを願っています。

于 2013-08-08T16:10:08.493 に答える