問題は、ファクトリプロパティから返された接続を保存しないことです。ただし、メソッドのようなプロパティは使用しないでください。代わりに、次のように使用してください:
using (var con = Services.conn)
{
Services.conn.Open();
Services.DB_Select("..a short select statement..", con ));
//Services.conn.Close(); unnecessary with using
}
したがって、プロパティから返された(またはusingで作成された)同じ接続をusingで使用し、それを使用するメソッドに渡します。ちなみに、プロパティをファクトリメソッドとして使用することはベストプラクティスではありません。
しかし 私の意見では、それを使用する場所に接続を作成する方がはるかに優れています。最適な場所は、using
です。 声明。そして、con
をスローします ゴミ箱の所有物であり、それは無意味であり、厄介なエラーの原因です。
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);
}
}