DataReader
Đối tượng DataReader được .NET Framework cung cấp nhằm phục vụ việc truy cập vào cơ sở dữ liệu nhanh và hiệu quả cụ thể là việc đọc dữ liệu từ Database. Như đã đề cập các bài trước, DataSet phục vụ cho việc xử lý dữ liệu ngắt kết nối, còn DataReader lại phục vụ chủ yếu cho việc kết nối. Tốc độ của xử lý DataReader theo hướng kết nối rất phù hợp cho việc xử lý dữ liệu của ứng dụng Web. Do vậy, việc xử lý dữ liệu cho ứng dụng web thường được xử lý bằng DataReader.
Cơ chế xử lý của DataReader : DataReader chỉ xử lý 1 record tại một thời điểm và chỉ được truy xuất 1 chiều, không có các thao tác phức tạp như sắp xếp hay truy xuất bất cứ record ngẫu nhiên nào. Trong khi truy xuất dữ liệu, dĩ nhiên DataReader sẽ giữ kết nối liên tục với database (hướng kết nối), và DataReader chỉ phục vụ thao tác đọc (readonly). Chính vì tính chất hướng kết nối nên DataReader được đơn giản hoá tối đa để việc xử lý nhẹ nhàng, ít rờm rà, tối ưu được tốc độ xử lý (rất quan trọng đối với các ứng dụng trên nền web).
Cũng như 2 đối tượng Command và Connection, tùy theo loại kết nối mà DataReader cũng có 2 loại : OleDbDataReader và SqlDataReader. Để sử dụng ta phải import 2 namespace : System.Data.OleDb và System.Data.SqlClient.
Cách sử dụng
DataReader được sử dụng để chứa kết quả trả về từ đối tượng Command với việc thực thi hàm ExecuteReader.
Dim conn As SqlConnection = New SqlConnection("server=localhost;database=NorthWind;uid=sa;pwd=sa") conn.Open() Dim cmd As SqlCommand = New SqlCommand("Select * From Customers", conn) Dim dr As SqlDataReader = cmd.ExecuteReader While (dr.Read) Response.Write(dr("ContactName") + " ") End While conn.Close() |
Hàm ExecuteReader của đối tượng Command có thể nhận vào tham số là những giá trị liệt kê của đối tượng CommandBehavior.
cmd.ExecuteReader(CommandBehavior.SchemaOnly) |
Một số giá trị liệt kê thông dụng của CommandBehavior là :
- CloseConnection : connection sẽ đóng khi đối tượng DataReader đóng.
- SchemaOnly : Câu truy vấn không trả về dữ liệu mà trả về thông tin các cột của bảng.
- SingleRow : Câu truy vấn chỉ trả về 1 dòng duy nhất.
Chúng ta có thể kết nối các giá trị của CommandBehavior với nhau bằng dấu &:
cmd.ExecuteReader(CommandBehavior.CloseConnection & CommandBehavior.SingleRow) |
- Một số thuộc tính và phương thức thông dụng của DataReader:
Thuộc tính :
- FieldCount : trả về số trường có trong record hiện hành.
- IsClosed : trả về giá trị boolean xác định đối tượng DataReader có bị đóng hay không.
Phương thức:
- Close : Đóng
- GetBoolean, GetByte, GetChar, GetDateTime, GetDecimal : lấy các giá trị tại cột đang xét tùy vào kiểu.
- GetValue, GetValues : lấy về giá trị hoặc tập giá trị ở dạng “nguyên thủy” ( kiểu dữ liệu gốc của Database).
- NextResult : Nhóm Kết quả tiếp theo.
- Read : Record tiếp theo.
DataAdapter
- DataAdapter là đối tượng làm trung gian lấy dữ liệu về cho DataSet, để DataSet thực hiện xử lý ngắt kết nối. Do vậy, mặc dù DataAdapter được liệt kê là đối tượng hướng kết nối nhưng thực chất nó phục vụ cho việc ngắt kết nối.
- Cũng như các đối tượng khác của ADO.NET, DataAdapter cũng có 2 loại tuỳ theo loại dữ liệu : OleDbDataAdapter, SqlDataAdapter.
Cách Sử dụng
- Sau đây là một số thuộc tính và phương thức thông dụng:
Thuộc tính
- SelectCommand, InsertCommand, UpdateCommand, DeleteCommand : các câu lệnh select , insert, update ,delete dữ liệu.
Phương thức:
- Fill : phương thức thực hiện kết quả trong câu lệnh select, rồi trả về cho DataSet xử lý.
- Update : Gọi lệnh cập nhật các thay đổi của dữ liệu lên dữ liệu nguồn.