Problém je v tom, že neukládáte připojení, které bylo vráceno z vašeho továrního majetku. Ale nepoužívejte vlastnost jako metodu. Místo toho jej použijte tímto způsobem:
using (var con = Services.conn)
{
Services.conn.Open();
Services.DB_Select("..a short select statement..", con ));
//Services.conn.Close(); unnecessary with using
}
Použijte tedy stejné připojení v use, které bylo vráceno z vlastnosti (nebo lépe vytvořené v use) a předejte jej metodě, která jej používá. Mimochodem, používat vlastnost jako tovární metodu není nejlepší praxe.
Ale podle mého názoru je mnohem lepší vytvořit připojení tam, kde jej používáte, nejlepší místo je v using
tvrzení. A hodí con
vlastnictví do popelnice, je to zbytečné a je zdrojem nepříjemných chyb.
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);
}
}