Das Problem besteht darin, dass Sie die Verbindung, die von Ihrer Factory-Eigenschaft zurückgegeben wurde, nicht speichern. Aber verwenden Sie eine Eigenschaft nicht wie eine Methode. Verwenden Sie es stattdessen auf diese Weise:
using (var con = Services.conn)
{
Services.conn.Open();
Services.DB_Select("..a short select statement..", con ));
//Services.conn.Close(); unnecessary with using
}
Verwenden Sie also dieselbe Verbindung in der Verwendung, die von der Eigenschaft zurückgegeben (oder besser in der Verwendung erstellt) wurde, und übergeben Sie sie an die Methode, die sie verwendet. Übrigens ist die Verwendung einer Eigenschaft als Factory-Methode nicht die beste Praxis.
Aber Meiner Meinung nach ist es viel besser, die Verbindung dort herzustellen, wo Sie sie verwenden, am besten im using
Aussage. Und wirf den con
Eigentum in den Mülleimer, es ist sinnlos und eine Quelle für fiese Fehler.
public static void DB_Select(string s, params List<string>[] lists)
{
try
{
using(var conn = new MySqlConnection(Services.ServerConnection))
{
conn.Open();
MySqlCommand cmd = conn.CreateCommand();
cmd.CommandText = s;
using( var sqlreader = cmd.ExecuteReader())
while (sqlreader.Read())
{
if (sqlreader[0].ToString().Length > 0)
{
for (int i = 0; i < lists.Count(); i++)
{
lists[i].Add(sqlreader[i].ToString());
}
}
else
{
foreach (List<string> save in lists)
{
save.Add("/");
}
}
} // unnecessary to close the connection
} // or the reader with the using-stetement
}
catch (Exception ex)
{
MessageBox.Show("Error while selecting data from database!\nDetails: " + ex);
}
}