public OracleDataReader executeQuery(String sql)
        {            OracleConnection conn = Connection();
            OracleDataReader odr = null; ;
            try
            {
                conn.Open();
                OracleCommand cmd = conn.CreateCommand();
                cmd.CommandText = sql;
                odr = cmd.ExecuteReader();            }
            catch (Exception ee)
            {
                Console.Write(ee.Message);
            }
            finally{
               conn.Close();
           }
            return odr;        }这是数据库类中的搜索方法,调用此方法时,参数为select语句 返回值为结果集,因为希望,无论是否有异常抛出,都要求关闭数据连接,可是这样,就无法有返回值。
一个办法就是  将  finally{
               conn.Close();
             }
去掉。
还有没有其他的办法??
比如把搜索出来的东西放入缓冲中,返回这个缓存. 如果有的话,那具体的做法该是怎么样的啊??谢谢了

解决方案 »

  1.   

    在方法内部第一行声明一个变量(可以是任何类型或是dataset,或是datatable)
    在关闭连接的时候同样也可以返回。finally一般放在最后。
      

  2.   


    声明dataset 或 datatable 然后把查询出来的结果放到里面去吗??
    试一试……谢谢先……
      

  3.   

    不可能的!datareader读取时,必须数据库连接时打开的。
    而且,数据库只有在进行过ExecuteScalar之后才需要关系然后重新打开。进行其他访问后不需要关闭的。
      

  4.   

    执行完 finally 中的 conn.Close(); 后,只要 catch 块中没有 return、throw 等语句,仍然会执行后面的 return odr; 的。