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

このクラスのデータベース接続は再利用可能ですか?

    あなたが直面している問題は、「アクションごとの新しい接続」コーナーに自分自身をコーディングしていることです。あなたが本当に目指したい、そしてベストプラクティスと考えられているのは、「アクションのバッチごとの新しい接続」です。

    この場合、必要に応じて接続を開き、廃棄するときに閉じることをお勧めします。クラス内でアクセスできるように、odbcアダプターをより大きなスコープの変数に移動します。

    namespace databaseFunctions
    {
        public class databaseConnection:IDisposable
        {
            private OdbcConnection con;
            private string connectionString;
    
            public databaseConnection(string connectionString){
                this.connectionString = connectionString;
            }
    
    
            public void OpenConnection(){
                if (con == null || con.IsClosed ){ // we make sure we're only opening connection once.
                    con = new OdbcConnection(this.connectionString);
                }
            }
            public void CloseConnection(){
                if (con != null && con.IsOpen){ // I'm making stuff up here
                    con.Close();
                }
            }
    
            public DataTable getFromDatabase(string SQL)
            {
                OpenConnection();
    
                DataTable rt = new DataTable();
                DataSet ds = new DataSet();
                OdbcCommand cmd = new OdbcCommand(SQL, con);
                da.SelectCommand = cmd;
                da.Fill(ds);
                try
                {
                    rt = ds.Tables[0];
                }
                catch
                {   
                    rt = null;
                }
                return rt;
            }
    
            public Boolean insertIntoDatabase(string SQL)
            {
                OpenConnection();
    
                OdbcCommand cmd = new OdbcCommand(SQL, con);
                con.Open();
                try
                {
                    cmd.ExecuteNonQuery();
                    return true;
                }
                catch
                {
                    return false;
                }
    
            }
    
    
            // Implementing IDisposable method
            public void Dispose(){
                CloseConenction();
            }
        }
    }
    

    これで、次にクラスを使用するときに、次のようなことを行います

    using (DatabaseConnection db = new DatabaseConnection()){
        db.InsertIntoDatabase(...);
        db.GetLastInsertID();
        db.GetFromDatabase(...);
    }
    

    そのコードブロックの最後で、IDisposeableであるため、disposeメソッドでその接続を閉じます。

    私が変更したもの:

    • 実装された IDisposable インターフェース
    • メソッドを静的メソッドからクラスメソッドに変更しました。
    • 接続を閉じるための新しいメソッドを追加しました
    • 接続変数をクラスレベルのスコープに移動しました
    • コンストラクターに引数を追加して、接続文字列を渡すことができるようにしました(この接続文字列をWeb.Configに入れる必要があります

    編集:

    • コンストラクターは提案ごとにconnectionStringを取り込みます。


    1. ENUM値のPostgreSQL配列の保存

    2. php + mysql+googleマップ

    3. SQLは日時を変換し、時間を減算します

    4. MySQLのすべてのフィールドを置き換えます