首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

苦境【.出现这种情况可能是因为所有池连接均在使用.】

2013-10-11 
困境【...出现这种情况可能是因为所有池连接均在使用...】最近发现存在连接池超时的问题,看了半天毫无头绪,

困境【...出现这种情况可能是因为所有池连接均在使用...】
最近发现存在连接池超时的问题,看了半天毫无头绪,请各位高手指点,下面贴出重要代码
1、SqlDbHelper:操作SQL Server数据库的通用类
...


        /// <summary>
        /// 返回一个DataReader对象实例
        /// </summary>
        /// <param name="sql">要查询的SQL文本命令</param>
        /// <returns>DataReader对象实例</returns>
        public SqlDataReader ExecuteReader(string sql)
        {
            return ExecuteReader(sql, CommandType.Text, null);
        }
        
/// <summary>
        /// 返回一个DataReader对象实例
        /// </summary>
        /// <param name="sql">要查询的SQL文本命令</param>
        /// <param name="commandType">要执行的查询语句的类型,存储过程或SQL文本命令</param>
        /// <param name="parameters">T-SQL语句或存储过程的参数数组</param>
        /// <returns>DataReader对象实例</returns>
        public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters)
        {
            SqlConnection connection = new SqlConnection(connectionString);
            SqlCommand command = new SqlCommand(sql, connection);

            if (parameters != null)
            {
                foreach (SqlParameter parameter in parameters)
                {
                    command.Parameters.Add(parameter);
                }
            }
            connection.Open();
            //参数CommandBehavior.CloseConnection表示,关闭Reader对象的同时关闭Connection对象
            return command.ExecuteReader(CommandBehavior.CloseConnection);
        }



2、页面.aspx 代码

            <tr>
            <td class="lt-r">角色包含权限:</td>
                <td>
                     <dl class="checklist">
                    <asp:Repeater ID="powerTypeListRter" runat="server" 
                             onitemdatabound="powerTypeListRter_ItemDataBound"  >
                        <ItemTemplate>
                            <dt>
                                <asp:HiddenField ID="myTypeidHF" runat="server" Value='<%#  Eval("PowerTypeID") %>' />
                            <%#  Eval("typeName") %>
                            <dd>
                                <asp:Repeater ID="powerListRter" runat="server"  >
                                <ItemTemplate>


                                    <div alt="苦境【.出现这种情况可能是因为所有池连接均在使用.】" />
5、运行一次后SPID居然达到150个,如果放在服务器运行则达到300, 胆敢运行第二次,就会出现报错‘超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小’ 超时 sql?server CommandBehavior


[解决办法]
确实像是照着些“实战项目”之类的书敲出的。
[解决办法]
正常啊,你的ExecuteReader方法中每次都new一个SqlConnection,有必要吗?
[解决办法]
你的conn似乎没有关闭代码,一般用完要有关闭的,你找找看代码有没有sqlConn.Close()的操作。
finally
            {
                if (sqlConn.State != ConnectionState.Closed)
                {
                    sqlConn.Close();
                }
            }
[解决办法]
SqlDataReader sdr2 = MyFunction.commonSqlHelper.ExecuteReader(typeSqlStr);
powerTypeListRter.DataSource = sdr2;

代码执行完毕后,关闭SqlDataReader的操作在哪里?没有的话,相应的SqlConnection也不会关闭的。
[解决办法]
同意3楼,看看SqlConnection有没有关闭
[解决办法]
//通过连接字符串获取连接
SqlConnection con = new SqlConnection(conn_String); 
try 

//打开连接,执行查询
//并且返回
SqlDataReader 
con.Open(); 
SqlCommand cmd = con.CreateCommand(); 
cmd.CommandText = Sql; 
SqlDataReader 
dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
return dr; 

catch 
{
con.Close(); 
throw; 
}
finally
{
if (con.State != ConnectionState.Closed)
{
con.Close();
}
}


  
[解决办法]
你不会把所有权限先全部查出来以后只在datatable里面查询啊,这权限的数据量再大能大到哪去

[解决办法]
用using语法创建SqlConnection对象吧!
你不关闭连接,肯定会被占满的!

热点排行