Masalahnya adalah Anda tidak menyimpan koneksi yang dikembalikan dari properti pabrik Anda. Tapi jangan gunakan properti seperti metode. Alih-alih menggunakannya dengan cara ini:
using (var con = Services.conn)
{
Services.conn.Open();
Services.DB_Select("..a short select statement..", con ));
//Services.conn.Close(); unnecessary with using
}
Jadi gunakan koneksi yang sama dalam penggunaan yang dikembalikan dari properti (atau lebih baik dibuat dalam penggunaan) dan berikan ke metode yang menggunakannya. Omong-omong, menggunakan properti sebagai metode pabrik bukanlah praktik terbaik.
Tapi menurut saya jauh lebih baik untuk membuat koneksi di mana Anda menggunakannya, tempat terbaik adalah di using
penyataan. Dan lempar con
properti ke tong sampah, itu tidak ada gunanya dan sumber kesalahan buruk.
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);
}
}