Problem polega na tym, że nie przechowujesz połączenia, które zostało zwrócone z własności fabryki. Ale nie używaj właściwości jak metody. Zamiast tego użyj go w ten sposób:
using (var con = Services.conn)
{
Services.conn.Open();
Services.DB_Select("..a short select statement..", con ));
//Services.conn.Close(); unnecessary with using
}
Użyj więc tego samego połączenia w użyciu, które zostało zwrócone z właściwości (lub lepiej utworzonego w użyciu) i przekaż je do metody, która go używa. Nawiasem mówiąc, używanie właściwości jako metody fabrycznej nie jest najlepszą praktyką.
Ale moim zdaniem dużo lepiej jest tworzyć połączenie tam, gdzie go używasz, najlepiej w using
oświadczenie. I wrzuć con
właściwości do kosza na śmieci, jest bezcelowe i jest źródłem paskudnych błędów.
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);
}
}