Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Kết nối cơ sở dữ liệu trong lớp này có thể sử dụng lại được không?

Vấn đề bạn phải đối mặt là bạn đã tự đặt mình vào một góc "kết nối mới cho mỗi hành động". Điều bạn thực sự muốn hướng tới và được coi là phương pháp hay nhất, là "kết nối mới cho mỗi đợt hành động".

Những gì tôi đề xuất trong trường hợp này là mở kết nối khi được yêu cầu và đóng khi xử lý. Những gì chúng tôi sẽ làm là di chuyển các bộ điều hợp odbc sang một biến có phạm vi lớn hơn để nó có thể được truy cập trong lớp.

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

Bây giờ, lần sau khi bạn sử dụng lớp học của mình, hãy làm điều gì đó như

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

Ở cuối khối mã đó, vì nó có thể thay đổi được, nó sẽ đóng kết nối đó cho bạn trong phương thức hủy bỏ.

Những điều tôi đã thay đổi:

  • đã triển khai IDisposable giao diện
  • đã thay đổi các phương thức từ phương thức tĩnh sang phương thức lớp.
  • đã thêm các phương pháp mới để mở kết nối đóng
  • đã chuyển biến kết nối sang phạm vi cấp lớp
  • đã thêm một đối số vào hàm tạo cho phép bạn truyền vào một chuỗi kết nối (bạn nên đặt chuỗi kết nối này trong Web.Config của bạn

Chỉnh sửa:

  • hàm tạo nhận vào Chuỗi kết nối cho mỗi đề xuất.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cố gắng trả về tất cả các cột của bản ghi con cho một bản ghi mẹ

  2. Kết quả tổng echo trong PHP (khó)

  3. MySQL:nối nhiều bảng trên một câu lệnh

  4. Cách thiết lập múi giờ xampp mysql và apache?

  5. Lỗi trường varchar 1500 duy nhất của MySQL (# 1071 - Khóa được chỉ định quá dài)