Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah koneksi database di kelas ini dapat digunakan kembali?

Masalah yang Anda hadapi adalah bahwa Anda telah mengkodekan diri Anda ke sudut "koneksi baru per tindakan". Apa yang benar-benar ingin Anda tuju, dan dianggap sebagai praktik terbaik, adalah "koneksi baru per kumpulan tindakan".

Yang saya sarankan dalam hal ini adalah membuka koneksi saat diperlukan, dan menutup saat dibuang. Apa yang akan kita lakukan adalah memindahkan adaptor odbc ke variabel cakupan yang lebih besar sehingga dapat diakses di dalam kelas.

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

Sekarang lain kali Anda menggunakan kelas Anda, lakukan sesuatu seperti

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

Di akhir blok kode itu, karena IDisposeable, itu akan menutup koneksi itu untuk Anda dalam metode pembuangan.

Hal-hal yang saya ubah:

  • menerapkan IDisposable antarmuka
  • mengubah metode dari metode statis menjadi metode kelas.
  • menambahkan metode baru untuk membuka penutupan koneksi
  • memindahkan variabel koneksi ke cakupan tingkat kelas
  • menambahkan argumen ke konstruktor yang memungkinkan Anda meneruskan string koneksi (Anda harus meletakkan string koneksi ini di Web.Config Anda

Suntingan:

  • konstruktor menerima connectionString per saran.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Argumen kesalahan Prosedur Tersimpan 1 untuk rutin ... bukan variabel atau variabel semu BARU di pemicu SEBELUM

  2. Instal MySQL di Ubuntu 14.04

  3. Ekspor MySQL ke CSV, beberapa kolom dengan tanda kutip dan beberapa tanpa

  4. ImportError:Tidak ada modul bernama MySQLdb

  5. Mengapa kueri ini hanya memilih satu baris?