Đề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
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
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.
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
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.
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:
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 ?