通常,当您收到异常说您已达到连接池阈值时,您的代码没有正确关闭/处理连接。
我的理论是,您在生产中遇到了一个您不在开发中的数据库异常,因此您的连接保持打开状态。
您应该始终在 Try/Catch 中进行数据库工作,在外部声明连接和命令并在内部进行初始化。您永远不应该依赖在 try/catch 中关闭连接,始终在 finally 块中关闭/处置:
try
{
m_Connection = this.getConnection();
m_Command = this.getCommand();
m_Command.CommandTimeout = m_ConnectionTimeout;
m_Command.CommandText = sql;
m_Command.Connection = m_Connection;
m_Command.CommandType = CommandType.Text;
m_Connection.Open();
return m_Command.ExecuteNonQuery();
}
finally
{
if (m_Connection != null && m_Connection.State != ConnectionState.Closed)
{
m_Connection.Close();
m_Connection.Dispose();
}
if (m_Command != null)
m_Command.Dispose();
}
一个应用程序真的不应该消耗 100 个与数据库的连接。我会检查您是否正确关闭了连接。至少在您与数据库通信的地方放置一些日志,以查看那里是否发生异常。