当前位置:编程学习 > C#/ASP.NET >>

关于数据库连接池的问题。


//SQL连接串语句添加了 "Max Pool Size=2; Min Pool Size=1" 访问第二次的时候,连接池就满了???
//我明明 调用了 reader.Close();reader.Dispose();。
//数据库访问
 public static DbDataReader ExecuteReader(CommandType commandType, string commandText, params DbParameter[] commandParameters)
        {
            if (ConnectionString == null || ConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");
            DbConnection connection = null;
        
            connection = Factory.CreateConnection();
            connection.ConnectionString = ConnectionString; 

            return ExecuteReader(connection, (DbTransaction)null, commandType, commandText, commandParameters);
        }

  private static DbDataReader ExecuteReader(DbConnection connection, DbTransaction transaction, CommandType commandType, string commandText, DbParameter[] commandParameters)
        { 
            connection.ConnectionString = ConnectionString;  
            connection.Open(); 
            bool mustCloseConnection = false;
            // 创建命令
            DbCommand cmd = Factory.CreateCommand();
  if (connection.State != ConnectionState.Open)
            {
                mustCloseConnection = true;
                connection.Open();
            }
            else
            {
                mustCloseConnection = false;
            } 
            command.Connection = connection; 
            command.CommandText = commandText;
             command.CommandType = commandType;
                DbDataReader dataReader; 
                dataReader = cmd.ExecuteReader();
                cmd.Parameters.Clear();
                  
                return dataReader
}
//========================
 IDataReader reader= ExecuteReader(....)
 if (reader != null)
            {
                while (reader.Read())
                {
                    list.Add(LoadToEntity(reader));
                }
                reader.Close();
                reader.Dispose();
            }
            return list;

 
                   数据库连接池 数据库 --------------------编程问答-------------------- 在关闭数据库连接前确保关闭了所有用户定义的事务 --------------------编程问答-------------------- 引用 楼主 madaming 的回复:
 ObjectQuery<T>.Include 方法include的实体怎样排序  具体实例:       return this.ObjectContext.题库集.Include("背记题"); “题库集”与"背记题"是一对多关联,那么在include中德"题库集"怎样排序。  
--------------------编程问答-------------------- 最好确保事务、链接对象放到using(){}小括号里面,达到释放链接的效果。 --------------------编程问答--------------------
引用 楼主 zsyok 的回复:

//SQL连接串语句添加了 "Max Pool Size=2; Min Pool Size=1" 访问第二次的时候,连接池就满了???
//我明明 调用了 reader.Close();reader.Dispose();。
//数据库访问
 public static DbDataReader ExecuteReader(CommandType commandType, string commandText, params DbParameter[] commandParameters)
        {
            if (ConnectionString == null || ConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");
            DbConnection connection = null;
        
            connection = Factory.CreateConnection();
            connection.ConnectionString = ConnectionString; 

            return ExecuteReader(connection, (DbTransaction)null, commandType, commandText, commandParameters);
        }

  private static DbDataReader ExecuteReader(DbConnection connection, DbTransaction transaction, CommandType commandType, string commandText, DbParameter[] commandParameters)
        { 
            connection.ConnectionString = ConnectionString;  
            connection.Open(); 
            bool mustCloseConnection = false;
            // 创建命令
            DbCommand cmd = Factory.CreateCommand();
  if (connection.State != ConnectionState.Open)
            {
                mustCloseConnection = true;
                connection.Open();
            }
            else
            {
                mustCloseConnection = false;
            } 
            command.Connection = connection; 
            command.CommandText = commandText;
             command.CommandType = commandType;
                DbDataReader dataReader; 
                dataReader = cmd.ExecuteReader();
                cmd.Parameters.Clear();
                  
                return dataReader
}
//========================
 IDataReader reader= ExecuteReader(....)
 if (reader != null)
            {
                while (reader.Read())
                {
                    list.Add(LoadToEntity(reader));
                }
                reader.Close();
                reader.Dispose();
            }
            return list;

 
                  

没有使用到事务。
connection.close()使用datareader 无法使用 using(){}包裹起来的,
只有在读取完数据时 调用 reader.Close(); reader.Dispose();
当第二次准备 connection.open() 时查看connection状态,是已经close 的
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,