sql >> データベース >  >> RDS >> Mysql

C#Mysql接続は有効で開いている必要があります

    問題は、ファクトリプロパティから返された接続を保存しないことです。ただし、メソッドのようなプロパティは使用しないでください。代わりに、次のように使用してください:

    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);
        }
    }
    


    1. 2人以上が同時に同じMySQLテーブルを更新しようとするとどうなりますか?

    2. WindowsServer2019にXAMPPソフトウェアをインストールして構成する

    3. Androidコンテンツプロバイダーに見つからないコンテンツプロバイダーのURLを修正するにはどうすればよいですか?

    4. ファントムリードを生成する方法は?