EntLibContrib и OdpNet

Я пытаюсь вернуть курсор ref из процедуры оракула обратно в мое приложение.Net, но получаю сообщение об ошибке с неверным количеством параметров.

Процедура оракула имеет следующие параметры:

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 курсора dbtype, который позволил бы мне добавить параметр out для обработки реф курсора. Я делаю что-то неправильно?

1 ответ

Вы также должны добавить выходной параметр refcursor к объекту команды.

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

Это работает с поставщиком данных ODP.NET. Перечисление DbType не имеет соответствующего типа для refcursor. Но добавление ссылки Oracle на класс доступа к данным может выглядеть как нарушение принципа DAAB.

Другие вопросы по тегам