zoukankan      html  css  js  c++  java
  • 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
    
    
        }
  • 相关阅读:
    【Linux题目】第七关
    【Linux题目】第六关
    【Linux题目】第五关
    【Linux常见命令】tar命令
    【Linux题目】第四关
    【linux题目】第三关
    【Linux删除问题】Operation not permitted
    【linux题目】第二关
    【linux题目】第一关
    java加密类Cipher的使用
  • 原文地址:https://www.cnblogs.com/blackice/p/2644901.html
Copyright © 2011-2022 走看看