我使用以下函数检查MySQL连接是否处于无效状态,或者是否达到了预定义的最大操作计数:
/// <summary>
/// Holds the amount of operations for the currently mysql-connection open
/// </summary>
private int connectionUsageCount = 0;
/// <summary>
/// The maximum usage count of the connection until it has to be refreshed
/// </summary>
private const int MAX_CONNECTION_USAGE_COUNT = 100;
/// <summary>
/// Holds the cached MySql Connection to the databse server.
/// </summary>
private MySqlConnection mySqlConnection;
/// <summary>
/// Checks the status of the sql connection and refreshes it when necessary.
/// </summary>
private void CheckSqlConnection()
{
// Check if the connection is in an invalid state or
// the connection has to be refreshed and refresh it
// when necessary
if (mySqlConnection == null
|| mySqlConnection.State == System.Data.ConnectionState.Broken
|| mySqlConnection.State == System.Data.ConnectionState.Closed
|| connectionUsageCount >= MAX_CONNECTION_USAGE_COUNT)
{
// If the connection was already initialized, close and dispose it
if (mySqlConnection != null)
{
// If connection is open, close it
if (mySqlConnection.State != System.Data.ConnectionState.Broken
&& mySqlConnection.State != System.Data.ConnectionState.Closed)
{
mySqlConnection.Close();
}
mySqlConnection.Dispose();
mySqlConnection = null;
}
// Create new connection
mySqlConnection = new MySqlConnection(this.ConnectionString.ToString());
}
}有人能回顾一下这段代码并告诉我一些反馈吗?我不确定我是否涵盖了在使用mySqlConnection时可能导致错误的所有可能性。
发布于 2014-01-06 10:02:45
Close并不一定会真正关闭连接,而只会将其放入连接池中。mySqlConnection = null;。您在下一条语句中为mySqlConnection分配了一个新值,因此将其设置为null没有任何效果。Close,并且不会产生异常,所以您可以跳过检查,无条件地调用Close。https://codereview.stackexchange.com/questions/38675
复制相似问题