超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小
超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小
最近有用户的系统偶尔提示“超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小” , 目前Max Pool Size = 512。
扫一扫加微信
问题描述
解决方案:
一、查看所有Connection连接,Open的连接必须都Close。
C# Code:
/// <summary>
/// 关闭SQL连接
/// </summary>
/// <param name="connection">当前连接</param>
public void CloseConnection(DbConnection connection)
{
if (connection != null)
{
if (connection.State != ConnectionState.Closed) connection.Close();
connection.Dispose();//释放资源!
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// <summary>
/// 关闭SQL连接
/// </summary>
/// <param name="connection">当前连接</param>
public void CloseConnection(DbConnection connection)
{
if (connection != null)
{
if (connection.State != ConnectionState.Closed) connection.Close();
connection.Dispose();//释放资源!
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
二、如果访问量很大,加上Pooling=True;Max Pool Size=32767。SQLSERVER的最大连接数: 32767。
C# Code:
string connStr="Server=.;Database=CSFrameworkTest;User ID=sa;Password=test;pooling=true;connection lifetime=0;min pool size = 1;max pool size=32767";
//来源:C/S框架网 | www.csframework.com | QQ:23404761
//来源:C/S框架网 | www.csframework.com | QQ:23404761
三、若上面方法还是不能解决问题,把连接字符串Pooling=False,改为实时连接模式,确保每次访问数据库完成,把Open的连接都Close。
参考调用方法:
C# Code:
/// <summary>
/// 执行SQL语句并返回受影响的行数。
/// </summary>
/// <param name="DBName">帐套的数据库名</param>
/// <param name="command">SQL命令</param>
/// <returns></returns>
public int ExecuteSQL(string DBName, string SQL)
{
SqlConnection connection = this.CreateConnection(DBName);
try
{
SqlCommand cmd = new SqlCommand(SQL, connection);
cmd.CommandTimeout = COMM_TIME_OUT;
int iValue = cmd.ExecuteNonQuery();
this.CloseConnection(connection);
return iValue;
}
catch (System.Exception ex)
{
this.CloseConnection(connection);
throw ex;
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// <summary>
/// 执行SQL语句并返回受影响的行数。
/// </summary>
/// <param name="DBName">帐套的数据库名</param>
/// <param name="command">SQL命令</param>
/// <returns></returns>
public int ExecuteSQL(string DBName, string SQL)
{
SqlConnection connection = this.CreateConnection(DBName);
try
{
SqlCommand cmd = new SqlCommand(SQL, connection);
cmd.CommandTimeout = COMM_TIME_OUT;
int iValue = cmd.ExecuteNonQuery();
this.CloseConnection(connection);
return iValue;
}
catch (System.Exception ex)
{
this.CloseConnection(connection);
throw ex;
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
扫一扫加微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网