可以在类里加一个标志,表示连接是否需要关闭.
finally块里使标志位置位,在对象释放时检查标志位,再关闭连接.

解决方案 »

  1.   

    这是我执行过程后关闭的例子,返回记录集也差不多,private OleDbCommand cmd=new OleDbCommand();
    #region 增加删除交易历史信息
    public int Execute_tt_computer_history(string execflag,int p_trans_type,string p_reasons,string p_computer_name,string pro_name)
    {
        int i;
        string proc_name=pro_name;
        cmd.Parameters.Clear();
        cmd.Connection=new clsPublic().ConnectDB();
        cmd.CommandText=proc_name;
        cmd.CommandType=CommandType.StoredProcedure;    cmd.Parameters.Add("execflag",OleDbType.VarChar);
        cmd.Parameters.Add("v_trans_type",OleDbType.Integer);
        cmd.Parameters.Add("v_trans_reasons",OleDbType.VarChar);
        cmd.Parameters.Add("v_computer_name",OleDbType.VarChar);
        cmd.Parameters.Add("p_out",OleDbType.Integer);
        cmd.Parameters["execflag"].Value=execflag;
        cmd.Parameters["v_trans_type"].Value=p_trans_type;
        cmd.Parameters["v_trans_reasons"].Value=p_reasons;
        cmd.Parameters["v_computer_name"].Value=p_computer_name;

        cmd.Parameters["execflag"].Direction=ParameterDirection.Input;
        cmd.Parameters["v_trans_type"].Direction=ParameterDirection.Input;
        cmd.Parameters["v_trans_reasons"].Direction=ParameterDirection.Input;
        cmd.Parameters["v_computer_name"].Direction=ParameterDirection.Input;
        cmd.Parameters["p_out"].Direction=ParameterDirection.ReturnValue;
    try
    {
        cmd.ExecuteNonQuery();
        i=(int)cmd.Parameters["p_out"].Value;
    }
    catch
    {
        i=-3;
    }
    finally
    {
        if(cmd.Connection.State==ConnectionState.Open)
        {
    cmd.Connection.Close();
    cmd.Parameters.Clear();
    cmd.Dispose();
        }
    }
    return i;
    }
    #endregion