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.