Vấn đề là bạn không lưu trữ kết nối được trả về từ thuộc tính nhà máy của bạn. Nhưng đừng sử dụng một thuộc tính như một phương thức. Thay vào đó, hãy sử dụng nó theo cách này:
using (var con = Services.conn)
{
Services.conn.Open();
Services.DB_Select("..a short select statement..", con ));
//Services.conn.Close(); unnecessary with using
}
Vì vậy, hãy sử dụng cùng một kết nối trong việc sử dụng được trả về từ thuộc tính (hoặc tốt hơn là được tạo trong việc sử dụng) và chuyển nó cho phương thức sử dụng nó. Nhân tiện, sử dụng thuộc tính làm phương pháp nhà máy không phải là phương pháp hay nhất.
Nhưng Theo ý kiến của tôi, tốt hơn hết là bạn nên tạo kết nối ở nơi bạn sử dụng nó, nơi tốt nhất là ở using
bản tường trình. Và ném con
thuộc tính của thùng rác, nó là vô nghĩa và là nguồn gây ra các lỗi khó chịu.
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);
}
}