日期:2014-05-18  浏览次数:20829 次

求优化一个SqlHelper类
下面是代码。程序偶尔会报数据库的错误,我怀疑是SqlHelper类有些地方不够完善。


C# code

    public class MSSQLDAL:IDataAccess
    {
        private SqlConnection _con;
        private SqlTransaction _tran;

        public MSSQLDAL(string constr)
        {
            this._con = new SqlConnection(constr);
        }


        #region IDataAccess 成员
        /// <summary>
        /// 打开数据库连接
        /// </summary>
        public void Open()
        {
            try
            {
                if (this._con == null || this._con.State == ConnectionState.Closed)
                {
                    this._con.Open();
                }
                else
                {
                    this._con.Close();
                    this._con.Open();
                }
            }
            catch
            {
                this._con.Close();             
            }
        }
        /// <summary>
        /// 关闭数据库连接
        /// </summary>
        public void Close()
        {
            if (this._con != null || this._tran != null)
            {
                this._con.Close();
            }
        }
        /// <summary>
        /// 增删改操作
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="param">参数</param>
        /// <returns>影响行数</returns>
        public int ExecuteNonQuery(string sql, params QueryParameter[] param)
        {
            int i = 0;
            try
            {
                SqlCommand cmd = new SqlCommand();
                PrepareCommand(cmd, sql, CommandType.Text, param);
                i = cmd.ExecuteNonQuery();
                cmd.Parameters.Clear();
            }
            catch
            {
                this._con.Close();
            }
            return i;
        }
        /// <summary>
        /// 返回单个值
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="param">参数</param>
        /// <returns>查询结果的第一行值</returns>
        public object GetScalar(string sql, params QueryParameter[] param)
        {
            object obj = null;
            try
            {
                SqlCommand cmd = new SqlCommand();
                PrepareCommand(cmd, sql, CommandType.Text, param);
                obj = cmd.ExecuteScalar();
                cmd.Parameters.Clear();
            }
            catch
            {
                this._con.Close();
            }

             return obj;
        }
        /// <summary>
        /// 返回DataTable
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="param">参数</param>
        /// <returns>DataTable</returns>
        public DataTable GetDataTable(string sql, params QueryParameter[] param)
        {
            DataTable dt = new DataTable();

            try
            {
                SqlCommand cmd = new SqlCommand();
                PrepareCommand(cmd, sql, CommandType.Text, param);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                dt = new DataTable();
                da.Fill(dt);
                cmd.Parameters.Clear();
            }
            catch
            {
                this._con.Close();
            }
            
            return dt;
        }
        /// <summary>
        /// 返回DataReader
        /// </summary>
        /// <param name="sql">SQL语句</param>
        /// <param name="param">参数</param>
        /// <returns>DataReader</returns>
        public IDataReader GetDataReader(string sql, params QueryParameter[] param)
        {
            SqlDataReader dr = null;