sql >> Databáze >  >> RDS >> Mysql

Je připojení k databázi v této třídě znovu použitelné?

Problém, kterému čelíte, je, že jste se zakódovali do rohu „nové připojení na akci“. To, na co se skutečně chcete zaměřit a je považováno za nejlepší postup, je „nové připojení na dávku akcí“.

Co v tomto případě doporučuji, je v případě potřeby připojení otevřít a při likvidaci uzavřít. Co uděláme, je přesunout adaptéry odbc do proměnné s větším rozsahem, aby k ní bylo možné přistupovat v rámci třídy.

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

Nyní, až příště použijete svou třídu, udělejte něco jako

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

Na konci tohoto bloku kódu, protože je IDisposeable, za vás toto připojení uzavře metodou vyhazování.

Věci, které jsem změnil:

  • implementováno IDisposable rozhraní
  • změnili metody ze statických na metody třídy.
  • přidali nové metody pro otevírání a uzavírání připojení
  • přesunuli proměnnou připojení do rozsahu na úrovni třídy
  • do konstruktoru přidal argument, který vám umožní předat připojovací řetězec (tento připojovací řetězec byste měli vložit do souboru Web.Config

Úpravy:

  • konstruktor zapojí connectionString na návrh.


  1. Dynamické názvy tabulek/entit v Doktríně 2

  2. Jak poskytnout Npgsql vlastní datový typ jako parametr?

  3. Jaké jsou výhody a nevýhody ukládání souborů do databáze?

  4. Entity Framework s mysql, problém s kapitalizací tabulky mezi linuxem a windows