ADO.NET SqlData客户端连接永远不会消失

时间:2009-09-16 18:09:11

标签: ado.net connection-pooling sqlconnection

我正在处理的asp.net应用程序可能有几百个用户尝试连接。我们收到一个错误,表明已达到池中的最大连接数。我理解ADO.NET中连接池的概念,尽管在测试中我发现连接在ms sql 2005服务器上的“睡眠”时间连接完成后,浏览器关闭了。我试图限制连接字符串中的连接生存期,但这没有任何效果。我应该推送最大连接数吗?我是否完全误诊了真正的问题?

1 个答案:

答案 0 :(得分:2)

所有数据库连接必须包含在try ... finally:

SqlConnection myConnection = new SqlConnection(connString);
myConnection.Open();
try
{
}
finally
{
   myConnection.Close();
}

或者......好多了,创建一个DAL(数据访问层),在其Dispose方法中调用Close()并用使用包装所有数据库调用:

using (MyQueryClass myQueryClass = new MyQueryClass())
{
   // DB Stuff here...
}

一些注意事项:ASP.NET确实依赖于您发布Connections。它在它们超出范围后通过GC释放它们但你可以依靠这种行为,因为它可能需要很长时间才能启动 - 在连接池用完之前,可能比你能负担得起的时间长得多。说到这一点 - ASP.NET实际上会在您请求时将您的连接汇集到数据库中(回收旧连接而不是完全释放它们,然后从数据库中重新请求它们)。就你而言,这并不重要:你仍然必须调用Close()!

此外,您可以使用连接字符串(例如,最小/最大池大小等)来控制池。有关详细信息,请参阅MSDN上的this article