Ich habe eine Anwendung, die einen mysql-Befehl (Abfrage) "show databases" feuert, die Abfrage funktioniert und gibt ordnungsgemäß zurück, aber ich kann meine Verbindungen nicht schließen. Der Benutzer, den ich benutzte, hatte 24 Verbindungen gleichzeitig erlaubt, so dass das Problem weiter unten in meinem Programm auftauchte, aber das Reduzieren der erlaubten Verbindungen auf 2 zeigt mir, dass ich nicht einmal die erste Abfrage schließen kann (die nicht in einer Schleife ist). Der Code ist der folgende:C# MySqlConnection wird nicht geschlossen
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;
}
P.S. Die 'Neue MySQL.Datenbank (dbName, this));' ist mein owm gemacht Klasse, die nur die DB-Struktur speichert, könnte als irrelevant betrachtet werden.
Der genaue Fehler, den ich bekomme, ist 'max_user_connections'. in der connection.open-Zeile des nächsten Mal, wenn eine Abfrage ausgelöst werden muss.
Danke für die Anregung sieht, mehr sauberer. Aber immer noch kein Ergebnis. –
@Daniel, für MySQL ist es immer noch am besten, die Verbindung manuell zu schließen, diese Verbindung früher zu schließen, bevor C# GC tut. – Adrian