0

我正在尝试将一个从 oracle 过程返回的 ref 游标返回到我的 .Net 应用程序,但我不断收到有关错误数量参数的错误。

oracle 过程具有以下参数:

PROCEDURE sp_user_list(pv_username     IN VARCHAR2
                        ,pn_result      OUT NUMBER
                        ,pv_error       OUT VARCHAR2
                        ,pref_user_list OUT SYS_REFCURSOR);

我的数据访问代码是:

public int GetUserID(string sUserName)
        {
            int iUserID = 0;

            Database db = DatabaseFactory.CreateDatabase();

            string sql = "pk_quality.sp_user_list";
            DbCommand cmd = db.GetStoredProcCommand(sql);

            db.AddInParameter(cmd, "pv_username", DbType.String, sUserName);
            db.AddOutParameter(cmd, "pn_result", DbType.Int32, 2);
            db.AddOutParameter(cmd, "pv_error", DbType.String, 500);


            using (IDataReader dataReader = db.ExecuteReader(cmd))
            {
                while (dataReader.Read())
                {
                    iUserID = int.Parse(dataReader["user_id"].ToString());
                }
            }

            return iUserID;
        }

似乎没有任何 ref cursor dbtype 允许我添加一个 out 参数来处理 ref 游标。难道我做错了什么?

4

1 回答 1

1

您还必须将 refcursor 输出参数添加到命令对象。

cmd.Parameters.Add(
     new OracleParameter("pref_user_list", 
                         OracleDbType.RefCursor, 
                         ParameterDirection.Output));

这适用于 ODP.NET 数据提供程序。DbType 枚举没有对应的 refcursor 类型。但是,将 Oracle 引用添加到数据访问类可能看起来违反了 DAAB 原则。

于 2012-06-28T18:01:04.747 回答