0

我有这个运行 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();

抛出一个异常,告诉连接已关闭。事实上,当我观察底层的连接属性时,它实际上是关闭的,即使数据读取器出现在打开状态。

我怎样才能做到这一点?

4

0 回答 0