以下是我们遇到的错误。我们将app和db服务器从32位移到了x64。 Framework 2.0 Service Pack 2安装在服务器上。
超时已过期。从池中获取连接之前经过的超时时间。这可能是因为所有池连接都在使用中并且达到了最大池大小。
以下是DataAccess的一些代码,它从Try块中返回一个值:
public string GetSomething()
{ var a = String.Empty;
try
{
// loop through the datareader
return "some data";
}
finally
{
reader.close();
}
return whatever;
}
以下是一些打开并管理连接的代码:
public DBHelper(IDbCommand command)
{
this.command = command;
if (command.Connection.State == ConnectionState.Open)
{
shouldCloseConnection= false;
}
else
{
command.Connection.Open();
shouldCloseConnection= true;
}
}
答案 0 :(得分:2)
尝试使用
SqlConnection.ClearAllPools()
并查看这是否真的是连接池问题。
答案 1 :(得分:2)
A)确保您的最小池大小足够大。也许是20或30之类的东西。
B)小心你正确处理物体。我了解到,例如,当您使用IDataReader从数据库中获取内容时,您应该
使用(IDataReader rdr = ...) {
}
无论什么(包括错误),rdr将被处理掉。无论如何,有时池问题是由于没有正确处理数据库连接引起的。
答案 2 :(得分:0)
不是直接答案,但请查看活动监视器并查看为应用程序打开的连接。可能是先前安装中的超时设置被缩短,导致连接在池填充之前被SQL强制关闭。