在一个Oracle的分页存储过程中,返回记录集游标和记录集总数。然后我把对这个存储过程的访问封装在一个类的方法中,这个方法返回OracleDataReader数据集,同时通过引用参数返回记录集总数。问题是要返回DataReader就不能把OracleConnection关闭,那什么时候关闭连接?
同时,由于存储过程有两个出参数,不能用ExecuteReader()执行,也就不能使用System.Data.CommandBehavior.CloseConnection参数。这个问题如何解决呢?50分求解,大侠帮忙!!!

解决方案 »

  1.   

    ExecuteReader用存储过程也是可以的.
    另外用datatable也可.
      

  2.   

    OracleCommand myCommand = new OracleCommand("sapackage.PagerWF",myConn);
    myCommand.CommandType = CommandType.StoredProcedure;OracleParameter[] myParams = {  new OracleParameter("PageSize",PageSize),          new OracleParameter("PageNo",PageNo),
             new OracleParameter("SqlSelect",SqlSelect),
    new OracleParameter("OutRecordCount",OracleType.Number),
    new OracleParameter("myCursor",OracleType.Cursor),};
    myParams[3].Direction = ParameterDirection.Output;
    myParams[4].Direction = ParameterDirection.Output;
    OracleDataReader DR;
    foreach (OracleParameter m in myParams)
    {
    myCommand.Parameters.Add(m);
    }
    try
    {
    myConn.Open();
    //myCommand.ExecuteNonQuery();
    myCommand.ExecuteReader();
    count = Int32.Parse(myCommand.Parameters["OutRecordCount"].Value.ToString());
    DR = (OracleDataReader)myCommand.Parameters["myCursor"].Value;
    }
    catch(Exception ex)
    {
    DR = null;
    throw ex;
    }
    finally
    {
    }
    return DR;以上是我的代码片段,如果用ExecuteReader()会提示“指定的转换无效”,但是如果用ExecuteNonQuery()就可以正确执行,不知道错在哪里啊
      

  3.   

    DR = myCommand.ExecuteReader(); 
    try.
    dr.NextResult();