DataReader
Hỗ trợ truy cập dữ liệu nhanh, one-way, read-only.
Chỉ đọc dữ liệu từ server từng dòng riêng rẽ nên không
tốn bộ nhớ.
Chỉ được tạo thông qua phương pháp ExecuteReader của
đối tượng Command.
Connection phải được mở trước khi gọi ExecuteReader Phương pháp Close của DataReader phải luôn được gọi
khi DataReader không còn cần sử dụng để giải phóng Connection.
41
Các phương pháp và tính chất quan trọng
GetSchemaTable
Trả về 1 DataTable mô tả lược đồ của tập mẩu tin kết quả truy vấn dữ liệu.
Read
Dời sang mẩu tin kế tiếp trong tập kết quả.
Close
Đóng đối tượng DataReader.
NextResult
Chuyển sang tập mẩu tin kết quả kế tiếp (trường hợp DataReader chứa nhiều kết quả truy vấn).
FieldCount
43
Phương thức ExecuteReader của Command
Cú pháp: reader = command.ExcuteReader(t) t ∈ enum CommandBehavior enum CommandBehavior CloseConnection SchemaOnly SingleResult SingleRow Vd: command.ExecuteReader(CommandBehavior.CloseConnecti on | CommandBehavior.SingleRow)
Truy cập DataReader với nhiều tập mẩu tin kết quả
String sql = “select * from HangHoa; select * from KhachHang”
SqlCommand command = new SqlCommand(sql,conn) conn.Open()
SqlDataReader reader = command.ExecuteReader();
do {
while (reader.Read()) {
45
Chương 6:
DataAdapter làm việc với Dataset để cung cấp cơ chế truy
cập dữ liệu không giữ kết nối.
Mô hình thừa kế của các lớp DataAdapter trong .Net
FrameWork : DataAdapter DbDataAdapter SqlDataAdapter OleDataAdapter OdbcDataAdapter
47
Phương thức Fill
Sử dụng command SelectCommand để truy vấn dữ liệu,
kết quả trả về được điền vào DataSet. Vd:
Me.SqlSelectCommand1 = New System.Data.SqlClient.SqlCommand Me.SqlSelectCommand1.CommandText = "SELECT HH_MaHang, HH_TenHang, HH_SoLuong, HH_GiaNhap, HH_MaLoai FROM HANGHOA"
Me.SqlSelectCommand1.Connection = Me.SqlConnection1
Me.SqlDataAdapter1.SelectCommand = Me.SqlSelectCommand1 Dim ds as new DataSet(“Authors”)
Me.SqlDataAdapter1.Fill(ds,”Table1”)
Phải mở và đóng Connection trước và sau khi thực hiện
Điền dữ liệu vào DataSet đã có sẵn Schema
Xác định tính chất MissingSchemaAction của
DataAdapter :
DataAdapter.MissingSchemaAction = MissingSchemaAction.Add
Bổ sung mọi cột còn thiếu trong Schema
DataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
Bổ sung mọi cột còn thiếu trong Schema, cập nhật khóa chính
DataAdapter.MissingSchemaAction = MissingSchemaAction.Error
Phát sinh ngoại lệ (Exception) với từng cột bị thiếu
49
Phương thức FillSchema
Schema : Lược đồ của tập dữ liệu, bao gồm cấu trúc và
quan hệ của các bảng dữ liệu.
Me.SqlSelectCommand1 = New System.Data.SqlClient.SqlCommand Me.SqlSelectCommand1.CommandText = "SELECT HH_MaHang, HH_TenHang, HH_SoLuong, HH_GiaNhap, HH_MaLoai FROM HANGHOA"
Me.SqlSelectCommand1.Connection = Me.SqlConnection1
Me.SqlDataAdapter1.SelectCommand = Me.SqlSelectCommand1 Dim ds as new DataSet(“Authors”)
Me.SqlDataAdapter1.FillSchema(ds, SchemaType.Source,”Table1”)
enum SchemaType :
SchemaType.Source SchemaType.Mapping
Khi có thao tác thay đổi dữ liệu trong một bảng của
DataSet, các dòng bị thay đổi sẽ được ghi nhận qua tính chất RowState.
RowState nhận các giá trị :
DataRowState.Added
Cho biết dòng mới được thêm vào
DataRowState.Deleted
Cho biết dòng đã bị xóa
DataRowState.Detached
51
Phương thức Update
Cập nhật dữ liệu từ DataSet vào cơ sở dữ liệu gốc.
Nội dung hoạt động của Update: duyệt qua từng khoản tin
trong DataSet, phân tích giá trị RowState và gọi 1 trong 4
command tương ứng của DataAdapter : Select, Insert, Update và Delete.
Command Select được định nghĩa ngay từ đầu khi tạo
DataAdapter, sử dụng để truy vấn dữ liệu và điền vào DataSet (có thể được định nghĩa tường minh, hoặc thông qua hàm dựng của DataAdapter).
Các command Insert, Update, Delete sử dụng cho phương
thức Update, có thể được người sử dụng định nghĩa hoặc được phát sinh tự động bằng cách sử dụng CommandBuilder :
Hạn chế khi sử dụng CommandBuilder :
Chỉ sử dụng cho DataAdapter kết nối đến 1 bảng dữ liệu. Bảng dữ liệu phải được chỉ định khóa chính.
Định nghĩa các command Insert, Update, Delete cho
DataAdapter: tạo các command với CommandText có chuỗi SQL tương ứng, sử dụng các tham số cho các cột dữ liệu.