Command cĩ nhiều phương thức thực hiện khác nhau như sau:
II.4.1. ExecuteNonquery
Để gọi thực hiện các câu truy vấn cập nhật INSERT, UPDATE, DELETE,... hay thủ tục nội khơng trả về
dữ liệu hoặc khi chúng ta khơng quan tâm đến dữ liệu trả về. Tuy khơng trả về dữ liệu, nhưng các tham số đầu ra, trả về đều chứa dữ liệu (nếu cĩ). Với các lệnh INSERT, UPDATE, DELETE, phương thức này trả về số dịng chịu tác động của Command, ngược lại phương thức trả về -1:
Ví dụ: Trong ví dụ trên, chúng ta nhận được số lượng mặt hàng "C001" đã giao cho đơn đặt hàng
“D001” khi goi thực hiện như sau. cmd.ExecuteNonQuery()
Console.WriteLine("Số lượng đã giao {0}", tv.Value)
II.4.2. ExecuteReader
Phương thức này trả về một đối tượng DataReader để đọc dữ liệu mỗi lần một dịng với phương thức Read(). DataReader đọc dữ liệu trực tiếp từ nguồn dữ liệu nên phải duy trì kết nối cho đến khi đọc xong. Cú pháp gọi phương thức này như sau.
Cú pháp:
ExecuteReader() Hoặc
ExecuteReader(<behavior>)
Các giá trị của <behavior>
Giá trị Mơ tả
CloseConnection Khi đối tượng DataReader đĩng lại, Connection tự động đĩng theo.
Dim bo_doc As New OledbReader = _
lenh.ExecuteReader(CommandBehavior.CloseConnection) Dim ndung As String, i As Short
For i = 0 To bo_doc.FieldCount -1 ndung &= bo_doc.GetValue(i) & vbTab Next
ndung &= vbNewLine Loop
bo_doc.Close()
MsgBox (lenh.Connection.State) ' trả về Closed Default Tương tự như khi gọi ExecuteReader()
SchemaOnly Truy vấn chỉ trả về cấu trúc các cột và khơng làm ảnh hưởng đến các thao tác khác.
Dim bo_doc As New OledbReader = _
lenh.ExecuteReader(CommandBehavior.SchemaOnly) Dim ndung As String, i As Short
For i = 0 To bo_doc.FieldCount -1
ndung &= bo_doc.GetName(i) & vbNewLine Next
II.4.3. ExecuteScalar
Phương thức này thực hiện lệnh của Command và chỉ trả về giá trị của cột đầu tiên và dịng đầu tiên. Chúng ta thường gọi phương thức này khi muốn Command thực hiện các hàm tính tốn thống kê SUM, COUNT, AVG, MAX, MIN, ... trên nguồn dữ liệu ngay lúc thực thi.
Cú pháp:
ExecuteScalar()
Ví dụ:
lenh.CommandText = "Select Sum(slnhap*dgnhap) from CTNHAP where sopn = ?" lenh.Parameters.Add("pn", "PN01")
Dim kq As Integer = lenh.ExecuteScalar()
Console.WriteLine("Trị giá của phiếu nhập {0} là {1:#,###}", _ lenh.Parameters(0).Value, kq)
II.5. DataReader
Là đối tượng truy cập dữ liệu trực tiếp, sử dụng cursor phía Server và duy trì kết nối với Server trong suốt quá trình đọc dữ liệu, DataReader thuộc khơng gian tên System.Data.OledbDataReader hoặc System.Data.SqlDataReader
II.5.1. Các thuộc tính của DataReader
Các thuộc tính
Tên Mơ tả
FieldCount Trả về số cột trên dịng hiện hành của DataReader. IsClosed Cho biết DataReader đã đĩng chưa.
Item Trị của cột truyền vào. Tham số truyền cĩ thể là tên cột hoặc số thứ tự (từ 0)
II.5.2. Các phương thức của DataReader
Các phương thức
Tên Mơ tả
Close Đĩng DataReader.
GetFieldType Trả về kiểu dữ liệu của cột truyền vào. GetName Trả về tên của cột truyền vào.
GetOrdinal Trả về số thứ tự của cột truyền vào (bắt đầu từ 0). GetSchemaTable Trả về bảng chứa thơng tin mơ tả cột của DataReader. GetValue Trả về giá trị trên cột truyền vào.
Read Di chuyển đến dịng kế tiếp và trả về True nếu cịn dịng để di chuyển, ngược lại trả về False
Trong khi DataReader đang mở, các thao tác dữ liệu khác trên nguồn dữ liệu đều khơng thể cho đến
khi DataReader đĩng lại bằng lệnh Close.
III. DataAdapter
Để lấy dữ liệu từ nguồn dữ liệu về cho ứng dụng, chúng ta sử dụng một đối tượng gọi là DataAdapter. Đối tượng này cho phép lấy cấu trúc và dữ liệu của các bảng trong nguồn dữ liệu.
DataAdapter là một bộ gồm bốn đối tượng Command:
SelectCommand: cho phép lấy thơng tin từ nguồn dữ liệu về
InsertCommand: cho phép thêm dữ liệu vào bảng trong nguồn dữ liệu.
UpdateCommand: cho phép sửa đổi dữ liệu trên bảng trong nguồn dữ liệu.
DeleteCommand: cho phép hủy bỏ dữ liệu trên bảng trong nguồn dữ liệu.
Thơng thường, chúng ta chỉ cần khai báo nội dung lệnh cho SelectCommand, các nội dung của các command cịn lại cĩ thể được phát sinh nhờ đối tượng CommandBuilder dựa vào nội dung của
SelectCommand.