Mysql
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. грешка, която продължава да изскача в моите кодове (връзката вече е отворена)

  2. Извикване на функция-член execute() на булев вход

  3. Как да направите отделно присъединяване с MySQL

  4. Докато импортирате mysqldump файл ГРЕШКА 1064 (42000) близо до „ ■/“ на ред 1

  5. MySql избира следващото по-ниско число, без да използва лимит