我有这个运行 Oracle 包的代码:
using (PedidoEntities db = new PedidoEntities())
{
OracleParameter p_usuario = new OracleParameter("p_usuario", OracleDbType.Int32);
p_usuario.Direction = System.Data.ParameterDirection.Input; p_usuario.Value = usuario;
OracleParameter p_oficinas = new OracleParameter("p_oficinas", OracleDbType.RefCursor);
p_oficinas.Direction = System.Data.ParameterDirection.Output;
string sql = @"begin
pqte_consultas.Pr_ObtieneOficinasUsuario(:p_usuario, :p_oficinas);
end;";
db.Database.ExecuteSqlCommand(sql, p_usuario, p_oficinas);
OracleDataReader rdr = ((OracleRefCursor)p_oficinas.Value).GetDataReader();
List<Oficina> oficinas = new List<Oficina>();
while (rdr.Read())
{
Oficina oficina = new Oficina()
{
Value = rdr["oficina"].ToString(),
Text = rdr["descripcion"].ToString()
};
oficinas.Add(oficina);
}
return oficinas;
}
p_oficinas 是一个 RefCursor 输出参数。
当我调试时,该参数实际上在执行 pl/sql 后包含一个数据读取器,但是,当我运行时
OracleDataReader rdr = ((OracleRefCursor)p_oficinas.Value).GetDataReader();
抛出一个异常,告诉连接已关闭。事实上,当我观察底层的连接属性时,它实际上是关闭的,即使数据读取器出现在打开状态。
我怎样才能做到这一点?