时不时会出现The connection is closed. 这样的错误
这是跑sql时的代码
        public static DataSet runSql(string sql)
        {
            OracleConnection conn = null;
            try
            {
                logger.Debug("Running SQL: " + sql);
                conn = (OracleConnection)DBUtils.getConnection();
                DataSet ds = null;
                if (sql.ToLower().StartsWith("select"))
                {
                    conn.Open();
                    OracleCommand comm = new OracleCommand(sql);
                    comm.Connection = conn;
                    comm.CommandType = CommandType.Text;
                    OracleDataAdapter da = new OracleDataAdapter(comm);
                    ds = new DataSet();
                    da.Fill(ds);                }
                // insert /delete/update
                else
                {
                    conn.Open();
                    IDbCommand comm = new OracleCommand(sql);
                    comm.Connection = conn;
                    comm.ExecuteNonQuery();                }
                return ds;
            }
            catch (Exception e)
            {
                string m = "Error in running SQL: " + sql + "\r\nError Message: \r\n" + e.Message;
                logger.Error(m);
                throw new WBISException(m);
            }
            finally
            {
                try
                {
                    if (conn != null)
                    {
                        conn.Close();
                    }
                }
                catch (Exception e2)
                {
                    string err = "Err When Closing Oracle!";
                    logger.Error(err);
                    throw new WBISException(err);
                }
            }        }
在调用这个runsql函数时,时不时会catch到The connection is closed的错误。
到底是什么原因???查了几天都没有查出来。。

解决方案 »

  1.   

    public static DataSet runSql(string sql)
            {
                OracleConnection conn = null;
                try
                {
                    logger.Debug("Running SQL: " + sql);
                    conn = (OracleConnection)DBUtils.getConnection();
                    DataSet ds = null;
                    using(conn)
                    {
                        if (sql.ToLower().StartsWith("select"))
                        {
                            conn.Open();
                            OracleCommand comm = new OracleCommand(sql);
                            comm.Connection = conn;
                            comm.CommandType = CommandType.Text;
                            OracleDataAdapter da = new OracleDataAdapter(comm);
                            ds = new DataSet();
                            da.Fill(ds);                    }
                        // insert /delete/update
                        else
                        {
                            conn.Open();
                            IDbCommand comm = new OracleCommand(sql);
                            comm.Connection = conn;
                            comm.ExecuteNonQuery();                    }
                        return ds;
                    }
                }
                catch (Exception e)
                {
                    string m = "Error in running SQL: " + sql + "\r\nError Message: \r\n" + e.Message;
                    logger.Error(m);
                    throw new WBISException(m);
                }
            }