困境【...出现这种情况可能是因为所有池连接均在使用...】
最近发现存在连接池超时的问题,看了半天毫无头绪,请各位高手指点,下面贴出重要代码
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);
}
<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对象吧!
你不关闭连接,肯定会被占满的!