• 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
    
    
        }
  • 相关阅读:
    SQLServer性能诊断与调优
    (转).NET面试题整理之基础篇
    (转)[茗洋芳竹]程序员常用不常见很难得的地址大全,博主很辛苦
    (转)页面过度动画效果大集合
    (转)软件开发和团队”最小模式”初探2-6人模型(下)
    silverlight 乐动魔方 实战九 .
    (转)js+flash实现手写输入功能特效
    (转)软件开发和团队”最小模式”初探2-6人模型(上)
    (转)我眼中的PM
    silverlight 乐动魔方 实战十 .
  • 原文地址:https://www.cnblogs.com/blackice/p/2644901.html
Copyright © 2020-2023  润新知