超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 调试时出现以下语句,我估计是由于连接开的太多造成的,请问各位大虾如何在关闭连接的情况下读取记录?
异常详细信息: System.InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。源错误:
行 10: MyCmd.Parameters("@RETURN_VALUE").Direction = ParameterDirection.ReturnValue
行 11: MyConn.Open()<----'该行出错
行 13: Dim MyReader As SqlDataReader = MyCmd.ExecuteReader()
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 调试时出现以下语句,我估计是由于连接开的太多造成的,请问各位大虾如何在关闭连接的情况下读取记录?
异常详细信息: System.InvalidOperationException: 超时时间已到。在从池中获取连接之前超时时间已过。出现这种情况可能是因为所有池连接都已被使用并已达到最大池大小。源错误:
行 10: MyCmd.Parameters("@RETURN_VALUE").Direction = ParameterDirection.ReturnValue
行 11: MyConn.Open()<----'该行出错
行 13: Dim MyReader As SqlDataReader = MyCmd.ExecuteReader()
解决方案 »
- 如何通过查询数据库当中的一个字段result值是0和1,来绑定这个单选框,并且值是0显示text=“通过”,值是1时text=“未通过”?
- FormsAuthentication.SetAuthCookie("UserName",false),在客户端为什么不产生cookie?
- 高手进,问个ihttphandler的问题
- 服务器无法处理请求
- asp.net 配置文件 问题!!郁闷几天了!!
- 判断图片是否重新加载成功问题????????????????
- Sql中怎樣將一個Table變量賦值給另一Table變量
- 菜鸟问题:登陆界面调用存储过程
- DataGrid中怎么有条件的显示Edit按纽?
- 在asp.net中 是否又groupbox这样的控件
- 为什么e.Item.Cells[0].Text为空???
- 在asp.net中是否可以调用dll还有如何打开串口?????
程序中有没有这行 MyConn.Close();
没有的话加进去
原码如下: Public Function Get_OrganzationRoot() As System.Data.SqlClient.SqlDataReader Dim MyConn As SqlConnection = New SqlConnection(ConfigurationSettings.AppSettings("SqlString"))
Dim MyCmd As SqlCommand = New SqlCommand("p_Get_OrganzationRoot", MyConn)
MyCmd.CommandType = CommandType.StoredProcedure MyCmd.Parameters.Add(New SqlParameter("@RETURN_VALUE", SqlDbType.Int, 4))
MyCmd.Parameters("@RETURN_VALUE").Direction = ParameterDirection.ReturnValue MyConn.Open()
Dim MyReader As SqlDataReader = MyCmd.ExecuteReader() Get_OrganzationRoot = MyReader End Function
1.在代码里面,把未关闭的连接关闭
2.扩大共享池,方法如下:
解决方法可以是修改连接池的连接生存期,因为默认值是60秒,即连接从应用程序被释放后可以在池中保存的时间。
改变连接池的大小.在连接字符串的后面加上以下代码:Enlist=true;Pooling=true;Max Pool Size=300;Min Pool Size=0;Connection Lifetime=300;user id=sa;packet size=1000
packet size参数取512到32767中的任一整数值
在该类中 先声明MyConn变量
SqlConnection MyConn=null;然后在方法中改为: MyConn = New SqlConnection(ConfigurationSettings.AppSettings("SqlString"))然后单在该类中写一个关闭MyConn 的方法
/// <summary>
/// 关闭数据库
/// </summary>
/// <param name="Conn"></param>
public void ConnClose(SqlCommand Cmd)
{
if(Conn!=null)
{
if(Conn.State.ToString()!="Closed")
{
Cmd.Dispose();
Conn.Close();
Conn=null;
}
}
}
在程序中调用该关闭方法就可以了
还有一个应急的笨法子:把数据库链接字符串中加上: pooling = false;
例:
"uid=sa;pwd=123;database=test;server=localhost;pooling=false"
{
SqlConnection myConn;
public void classA()
{
myConn=new SqlConnection("……");
}
public void Open()
{
if(myConn.State.ToString()=="Closed")
myConn.Open();
}
public void Close()
{
if(myConn.State.ToString()!="Closed")
myConn.Close();
}
public SqlDataReader Get_OrganzationRoot()
{
if(myConn.State.ToString()!="Closed")
{
SqlDataReader dr;
//……
return dr;
}
else
{
return null;
}
}
}
使用
classA c=new classA();
c.Open();
SqlDataReader r=c.Get_OrganzationRoot();
//……
c.Close();
此问题的VB解决方案如下:
Public MyConn As SqlConnection = Nothing'定义Connection
Public Function Get_OrganzationRoot() As System.Data.SqlClient.SqlDataReader
Conn_Close()
MyConn = New SqlConnection(ConfigurationSettings.AppSettings("SqlString"))
............................'
End Function
'关闭connection
Function Conn_Close()
If Not IsNothing(MyConn) Then
MyConn.Dispose()
MyConn.Close()
MyConn = Nothing
End If
End Function