ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.

今天调试一个监控程序,放到环境里发现不写库,于是给SQL执行类异常事件做了个日志,发现报:

ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.

左看右看,没问题呀,后来才想起,using里没有执行db.Open,打开数据库连接。

    public class SQLHelper : IDisposable
    {
        private IntPtr handle;
        private readonly Component component = new Component();
        private bool disposed;
        private readonly string _connstr = Config.ConnectionString;

        #region 执行SQL语句,返回影响行数
        /// <summary>
        /// 执行查询,返回影响行数
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public int iExecute(string sql)
        {
            int intTemp;
            try
            {
                using (var db = new SqlConnection(_connstr))
                {
                    db.Open();
                    var cmd = new SqlCommand(sql, db) {CommandType = CommandType.Text};
                    intTemp = cmd.ExecuteNonQuery();
                    db.Close();
                }
            }
            catch(Exception ex)
            {
                FileHelper.AppendFile("D:\\Log.txt", string.Format("{0}[{1}][{2}]",sql ,ex.Message,_connstr));
                intTemp = 0;
            }
            return intTemp;

        }
        #endregion

        #region 执行SQL语句,返回表结果
        /// <summary>
        /// 查询返回DataSet
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public DataSet pExecute(string sql)
        {
            var ds = new DataSet();
            try
            {
                using (var db = new SqlConnection(_connstr))
                {
                    db.Open();
                    var dr = new SqlDataAdapter();
                    var cmd = new SqlCommand(sql, db) {CommandType = CommandType.Text};
                    dr.SelectCommand = cmd;
                    dr.Fill(ds);
                    ds = (ds.Tables.Count == 0) ? null : ds;
                    db.Close();
                }
            }
            catch{}
            return ds;
        }
        #endregion

        #region 执行存储过程,返回查询的表结果
        /// <summary>
        /// 执行存储过程,返回查询的表结果
        /// </summary>
        /// <param name="produceName"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public DataSet pExecute(string produceName, SqlParameter[] param)
        {
            var ds = new DataSet();
            try
            {
                using (var db = new SqlConnection(_connstr))
                {
                    db.Open();
                    var cmd = new SqlCommand {Connection = db,CommandType = CommandType.StoredProcedure,CommandText = produceName};
                    var dr = new SqlDataAdapter();
                    foreach (var t in param)
                    {
                        cmd.Parameters.Add(t);
                    }
                    dr.SelectCommand = cmd;
                    dr.Fill(ds);
                    db.Close();
                }
            }
            catch (Exception){}
            return ds;
            
        }
        #endregion

        #region 执行存储过程,返回影响行数
        /// <summary>
        /// 执行存储过程,返回影响行数
        /// </summary>
        /// <param name="produceName"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public int iExecute(string produceName, SqlParameter[] param)
        {
            int intTemp = 0;
            try
            {
                using (var db = new SqlConnection(_connstr))
                {
                    db.Open();
                    var cmd = new SqlCommand
                                  {
                                      Connection = db,
                                      CommandType = CommandType.StoredProcedure,
                                      CommandText = produceName
                                  };
                    foreach (var t in param)
                    {
                        cmd.Parameters.Add(t);
                    }
                    intTemp = cmd.ExecuteNonQuery();
                    db.Close();
                }
            }
            catch (Exception){}
            return intTemp;
        }
        #endregion

        #region Dispose实现
        public void Dispose()
        {
            try
            {
                Dispose(true);
                GC.SuppressFinalize(this);
            }
            catch (Exception)
            {
            }

        }
        private void Dispose(bool disposing)
        {
            if (!disposed)
            {
                if (disposing)
                {
                    component.Dispose();
                }
                CloseHandle(handle);
                handle = IntPtr.Zero;
                disposed = true;
            }
        }
        [System.Runtime.InteropServices.DllImport("Kernel32")]
        private extern static Boolean CloseHandle(IntPtr handle);
        #endregion


    }
原文地址:https://www.cnblogs.com/blackice/p/2644901.html