So sánh đối tượng ADODB.Command và ADODB.Recordset

Làm VBA lâu năm có thể bạn chưa biết 2 đối tượng ADODB.Command và ADODB.Recordset nó khác nhau như thế nào ?

  1. Giống nhau ADODB.Command và ADODB.Recordset
  2. Một số vượt trội ADODB.Command so với ADODB.Recordset
  3. Sự khác biệt giữa ADODB.Recordset và ADODB.Command
  4. Chốt lại là khi nào dùng ADODB.Recordset / ADODB.Command

1. Giống nhau ADODB.Command và ADODB.Recordset

Đều là đối tượng trong thư viên ADODB

Cả 2 đều có chức năng truy cập sql server để trả về đối tượng recordset

2. Một số vượt trội ADODB.Command so với ADODB.Recordset

Tối ưu hóa hiệu suất và bảo mật

    Parameter (Tham số): Khi sử dụng ADODB.Command, bạn có thể dễ dàng thêm tham số vào câu truy vấn SQL, sử dụng kỹ thuật này code sẽ khó hơn nhưng mang lại bảo mật.

        Ví dụ,Một câu SQL của lập trình viên mới vào nghề SELECT * FROM tbUser WHERE UserName = 'admin' AND Pass='123' 

      Phía trên là câu SQL có thể làm web của bạn dễ bị tấn công bởi SQL Injection, đây là lỗi bảo mật khá phổ biến, ai lập trình lâu năm sẽ tự hiểu điều này.     

  Chính vì điều này mà ADODB.Command ra đời để tránh các vấn đề bảo mật như SQL Injection.

    Dim cmd As Object
    Set cmd = CreateObject("ADODB.Command")
    cmd.ActiveConnection = conn
    cmd.CommandText = "SELECT * FROM Customers WHERE Country = ?"
    cmd.Parameters.Append cmd.CreateParameter(, 8, 1, 50, "USA")  ' 8 = adVarChar, 1 = adParamInput
    Set rs = cmd.Execute
 

Thực thi các câu lệnh SQL phức tạp hơn

    Ngoài câu lệnh Select thì ADODB.Command còn thực thi được Insert, Update, Delete và sử dụng Paramater truyền vào cho câu Select.

Kiểm soát kết nối và giao tiếp với cơ sở dữ liệu

    Nếu 1 table có quá nhiều bảng ghi, mà tài nguyên của bạn giới hạn thì sử dụng ADODB.Command bạn có thể cấu hình các thuộc tính CommandTimeout, bạn có thể kiểm soát thời gian chờ (CommandTimeout), giúp bạn tránh tình trạng câu lệnh SQL bị treo hoặc mất kết nối quá lâu.

    cmd.CommandTimeout = 30  ' Thời gian chờ 30 giây

3. Sự khác biệt giữa ADODB.Recordset và ADODB.Command

    ADODB.Recordset:
        Chỉ được sử dụng để lưu trữ và thao tác với dữ liệu trả về từ một truy vấn (thường là các câu truy vấn SELECT).
        Không thể trực tiếp dùng để thực thi các câu lệnh SQL (như INSERT, UPDATE, DELETE).
    ADODB.Command:
        Được sử dụng để thực thi câu lệnh SQL hoặc thủ tục lưu trữ (stored procedure).
        Có thể làm việc với tham số, giúp bảo mật và tối ưu hóa câu lệnh SQL.
        Thích hợp cho các thao tác phức tạp hơn và hỗ trợ nhiều loại lệnh SQL khác nhau.

4. Chốt lại là khi nào dùng ADODB.Recordset / ADODB.Command

Nếu như vấn để bảo mật không quan trọng có thể sử dụng ADODB.Recordset

Nếu phần mềm chạy qua internet hay cần bảo mật thì dùng ADODB.Command

Dùng câu lệnh Insert, Delete, Update thì dùng ADODB.Command, chỉ dùng Select thì dùng ADODB.Recordset

 

Tìm kiếm:

Bài viết liên quan:

Làm VBA lâu năm có thể bạn chưa biết 2 đối tượng ADODB.Command và ADODB.Recordset nó khác nhau như thế nào ?