Bài giảng Lập trình trên Windows: Chương 5.2 cung cấp cho người học các kiến thức: Khái niệm DataSet, khái niệm DataAdapter, lớp DataAdapter, truy vấn 1 bảng, truy vấn nhiều bảng, truy vấn lược đồ CSDL, ánh xạ - Mapping.
Lập trình Windows Chương 5.2 Lấy liệu theo cách Disconnected Nội dung • Khái niệm DataSet • Khái niệm DataAdapter • Lớp DataAdapter • Truy vấn bảng • Truy vấn nhiều bảng • Truy vấn lược đồ CSDL • Ánh xạ - Mapping Khái niệm DataSet • Khái niệm DataSet • Lớp DataSet • Lớp DataTable • Lớp DataColumn • Lớp DataRow • Constraints • Primary key • Lớp DataRelation • DataSet kiểu mạnh Khái niệm DataSet • DataSet • DataSet đối tượng cho phép • Nạp phần liệu data source lên nhớ • Lưu trữ liệu theo mơ hình quan hệ • DataSet thuộc kiến trúc Disconnected • DataSet khơng phụ thuộc vào loại data source Khái niệm DataSet • Cấu trúc lớp DataSet • Gồm tập bảng – DataTable • Gồm tập quan hệ – DataRelation DataSet DataTable DataTable DataRelation Lớp DataSet • Sơ đồ lớp • thuộc tính quan trọng DataSet • Tạo đối tượng DataSet • Một số thuộc tính/phương thức DataSet Lớp DataSet Sơ đồ lớp Lớp DataSet thuộc tính quan trọng DataSet • Lớp DataSet có collection properties quan trọng • Tables • Relations • ExtendedProperties Lớp DataSet thuộc tính quan trọng DataSet • Tables property • Là đối tượng lớp DataTableCollection, chứa hay nhiều đối tượng DataTable • Đối tượng DataTable dùng để lưu trữ tập liệu dạng bảng trích từ Data Source Lớp DataSet thuộc tính quan trọng DataSet • Relations property • Là đối tượng lớp DataRelationCollection, chứa hay nhiều đối tượng DataRelation • Đối tượng DataRelation định nghĩa mối quan hệ cha-con bảng dựa vào khóa ngoại 10 Truy vấn lược đồ CSDL private void buttonFillSchema_Click(object sender, EventArgs e) { string strConn = …; string strSql = “Select * from… ; Select * from …”; SqlConnection conn = new SqlConnection(strConn); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = strSql; SqlDataAdapter da = new SqlDataAdapter(cmd); da.FillSchema(dsData, SchemaType.Source); conn.Dispose(); } 72 Truy vấn lược đồ CSDL • Phương thức FillSchema • FillSchema(DataSet, SchemaType) • FillSchema(DataTable, SchemaType) • FillSchema(DataSet, SchemaType, String) 73 Ánh xạ - Mapping • Khái niệm Mapping • Giải pháp mapping SQL • Giải pháp mapping ADO.NET 74 Ánh xạ - Mapping Khái niệm Mapping • Thơng thường, tên bảng/cột CSDL không phù hợp đưa lên ứng dụng • Để thay đổi tên đối tượng CSDL dùng kỹ thuật ánh xạ - mapping Khi code sử dụng đối tượng theo tên chọn • Có cách mapping • SQL: Dùng từ khóa AS SQL (bí danh) • ADO.NET: ADO.NET cung cấp giải pháp mapping thông qua đối tượng DataTableMapping, DataColumnMapping 75 Ánh xạ - Mapping Giải pháp mapping SQL • Dùng từ khóa AS SQL Select tenCot as ‘Tên Cột Mới’ From tenBang … Select tenCot as [Tên Cột Mới] From tenBang … 76 Ánh xạ - Mapping Giải pháp mapping SQL • Hạn chế • Khơng thể ánh xạ tên bảng • Giải pháp • Dùng thuộc tính TableName DataTable 77 Ánh xạ - Mapping Giải pháp mapping ADO.NET • Cơ chế mapping ADO.NET • Khi Fill liệu vào DataSet, data adapter kiểm tra thuộc tính TableMappings data adapter để xác định xem có định nghĩa quy tắc mapping hay khơng • Nếu TableMappings rỗng (default) tên cột CSDL dùng làm tên DataTables 78 Ánh xạ - Mapping Giải pháp mapping ADO.NET • bước thực mapping • Bước 1: Tạo đối tượng DataColumnMapping cho cột muốn mapping • Bước 2: Tạo đối tượng DataTableMapping cho bảng muốn mapping • Bước 3: Thêm đối tượng DataColumnMapping vào đối tượng DataTableMapping thơng qua thuộc tính ColumnMappings • Bước 4: Thêm đối tượng DataTableMapping vào DataAdapter thông qua thuộc tính TableMappings 79 Ánh xạ - Mapping Giải pháp mapping ADO.NET • Đoạn mã tổng quát // Định nghĩa Connection // Định nghĩa Command // Tạo data adapter: da DoDataMapping(da); // Fill vào dataset 80 Ánh xạ - Mapping Giải pháp mapping ADO.NET private void DoDataMapping(SqlDataAdapter da) { // Tạo DataColumnMapping DataColumnMapping col1 = new DataSolumMapping(“source col”, “dataSet col”); DataColumnMapping col2 = new DataSolumMapping(“source col”, “dataSet col”); // Tạo DataTableMapping DataTableMapping tb = new DataTableMapping (“source table”, “dataSet table”); // Thêm DataColumnMapping vào DataTableMapping tb.ColumnMappings.Add(col1); tb.ColumnMappings.Add(col1); // Thêm DataTableMapping vào data adapter da.TableMappings.Add(tb); } 81 Ánh xạ - Mapping Giải pháp mapping ADO.NET • Ví dụ • sinhvien(masv, hoten, tuoi) • Đổi tên • • • • masv mã sinh viên hoten họ tên tuoi tuoi Tên bảng Fill ‘sinhvien’ sinh viên 82 Ánh xạ - Mapping Giải pháp mapping ADO.NET • Ví dụ string strConn = “…"; SqlConnection conn = new SqlConnection(strConn); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText = "select * from sinhvien"; SqlDataAdapter da = new SqlDataAdapter(cmd); DoDataMappings(da); da.Fill(ds, "sinhvien"); dataGridView.DataSource = ds.Tables[“sinh viên”]; string s; s = (string)ds.Tables[0].Rows[0]["mã sinh viên"]; MessageBox.Show(s); conn.Dispose(); 83 Ánh xạ - Mapping Giải pháp mapping ADO.NET private void DoDataMappings(SqlDataAdapter da) { DataColumnMapping masvCol = new DataColumnMapping("masv","mã sinh viên"); DataColumnMapping hotenCol = new DataColumnMapping("hoten", "họ tên"); DataColumnMapping tuoiCol = new DataColumnMapping("tuoi", "tuổi"); DataTableMapping sinhvienTab = new DataTableMapping("sinhvien", "sinh viên"); sinhvienTab.ColumnMappings.Add(masvCol); sinhvienTab.ColumnMappings.Add(hotenCol); sinhvienTab.ColumnMappings.Add(tuoiCol); da.TableMappings.Add(sinhvienTab); } 84 Ánh xạ - Mapping Giải pháp mapping ADO.NET • Chú ý • Nếu muốn mapping tên bảng khơng cần tạo đối tượng DataColumnMapping • Tạo đối tượng mapping trước gọi phương thức Fill • Tên bảng nguồn tạo đối tượng DataTableMapping phải giống với tên bảng Fill Nếu Fill không tên bảng tên bảng là: Table, Table1, Table2, 85 Q&A 86 86 ... cột hay nhiều cột (giá trị nhất) • ConstraintException • Nếu nhập giá trị vi phạm ràng buộc chương trình ném ngoại lệ ConstraintException UniqueConstraint uc = new UniqueConstraint(DataColumn... DataRelationCollection, chứa hay nhiều đối tượng DataRelation • Đối tượng DataRelation định nghĩa mối quan hệ cha-con bảng dựa vào khóa ngoại 10 Lớp DataSet thuộc tính quan trọng DataSet • ExtendedProperties property... bảng trích từ Data Source • Đặc điểm DataTable • Là trung tâm kiến trúc ADO.NET • Có thể dùng độc lập với DataSet 15 Lớp DataTable thuộc tính quan trọng DataTable • Lớp DataTable có collection properties