我有一个应用程序触发 mysql 命令(查询)“显示数据库”,查询正常工作并返回,但我无法关闭连接。我使用的用户同时允许 24 个连接,因此问题在我的程序中进一步出现,但将允许的连接减少到 2 个表明我什至无法关闭第一个查询(它不在循环中)。代码如下:
protected override Dictionary<string, Jerow_class_generator.Database> loadDatabases()
{
MySqlConnection sqlCon = new MySqlConnection(this.ConnectionString);
sqlCon.Open();
MySqlCommand sqlCom = new MySqlCommand();
sqlCom.Connection = sqlCon;
sqlCom.CommandType = CommandType.Text;
sqlCom.CommandText = "show databases;";
MySqlDataReader sqlDR;
sqlDR = sqlCom.ExecuteReader();
Dictionary<string, Jerow_class_generator.Database> databases = new Dictionary<string, Jerow_class_generator.Database>();
string[] systemDatabases = new string[] { "information_schema", "mysql" };
while (sqlDR.Read())
{
string dbName = sqlDR.GetString(0);
if (!systemDatabases.Contains(dbName))
{
databases.Add(sqlDR.GetString(0), new MySQL.Database(dbName, this));
}
}
sqlCom.Dispose();
sqlDR.Close();
sqlCon.Close();
sqlCon.Dispose();
return databases;
}
附: '新 MySQL.Database(dbName, this));'是我自己制作的类,仅存储数据库结构,可以认为是无关紧要的。
我得到的确切错误是“max_user_connections”。在下次需要触发查询时的 connection.open 行上。
而不是跟踪所有Open
/Close
/Dispose
到处打电话,我建议将所有这些替换为using声明 http://msdn.microsoft.com/en-us/library/yh598w02.aspx。这将确保每个对象的预期范围是明确的,并且在退出该范围时将被销毁/处置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)