无法在ODP.NET中从RefCursor获取数据读取器

时间:2016-11-16 11:08:17

标签: oracle entity-framework-5 odp.net ref-cursor

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

抛出异常,告知连接已关闭。事实上,当我观察底层连接属性时,即使数据阅读器处于打开状态,它实际上也是关闭的。

我该怎么做?

0 个答案:

没有答案