0

我正在尝试执行具有多个输入/输出参数的存储过程。这就是使用 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。我知道可以使用 ref 游标代替 out 参数,但这不是我自己的问题。有没有使用 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