0

複数の in/out パラメータを持つストアド プロシージャを実行しようとしています。これは、SQLServer でこれを行うために期待される方法です。

using (Context)
        {
            const string xml = "<test><testc>testing</testc></test>";
            var userIdParam = new SqlParameter { ParameterName = "I_USER_ID", Value = user.ID };
            var dtsParam = new SqlParameter { ParameterName = "I_DTS", Value = DateTime.Now };
            var timeoutParam = new SqlParameter { ParameterName = "I_TIMEOUT", Value = DateTime.Now };
            var xmlParam = new SqlParameter { ParameterName = "I_XML", Value = xml };
            var sessionIdParam = new SqlParameter { ParameterName = "O_SESSION_ID", Value = "", Direction = ParameterDirection.Output };

            var result =
                Context.Database.SqlQuery<string>(
                    "DALLEN.SP_INSERT_SESSION I_USER_ID, I_DTS, I_TIMEOUT, I_XML, O_SESSION_ID out", 
                    userIdParam,
                    dtsParam, 
                    timeoutParam, 
                    xmlParam, 
                    sessionIdParam);
        }

残念ながら、これは oracle では機能しません。out パラメーターの代わりに ref カーソルが使用される可能性があることは理解していますが、それは私自身の問題ではありません。dbcontext.database.sqlquery を使用してストアド プロシージャにパラメータを渡す良い方法はありますか?

編集

クエリを実行しようとしたときに受信したエラー メッセージ。sqlParamters を受け入れないことが説明されているため、それらを OracleParamters に変更しましたが、どちらも機能しませんでした。

「タイプ 'System.Data.SqlClient.SqlParameter' のオブジェクトをタイプ 'Oracle.DataAccess.Client.OracleParameter' にキャストできません。」

手順:

CREATE OR REPLACE PROCEDURE DALLEN.SP_INSERT_SESSION (
  I_USER_ID                   IN       NUMBER,
  I_DTS                       IN       DATE,
  I_TIMEOUT                   IN       DATE,
  I_XML                       IN       VARCHAR2,
  O_SESSION_ID                OUT      NUMBER
)
AS
BEGIN
  SELECT S_SESSION.NEXTVAL
    INTO O_SESSION_ID
    FROM DUAL;

  INSERT INTO DALLEN.SYS_SESSION
              (ID, USER_ID, DTS, TIMEOUT, XML)
       VALUES (O_SESSION_ID, I_USER_ID, I_DTS, I_TIMEOUT, I_XML);
END;

前もって感謝します!

4

0 に答える 0