Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 88 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
88
Dung lượng
1,16 MB
Nội dung
UDPM-CĐ-MĐ19-LTCNET TUYÊN BỐ BẢN QUYỀN Tài liệu thuộc loại sách giáo trình nên nguồn thơng tin phép dùng nguyên trích dùng cho mục đích đào tạo tham khảo Mọi mục đích khác mang tính lệch lạc sử dụng với mục đích kinh doanh thiếu lành mạnh bị nghiêm cấm LỜI GIỚI THIỆU Yêu cầu có tài liệu tham khảo cho sinh viên khoa Công nghệ Thông tin Trường Cao đẳng Nghề ngày trở nên cấp thiết Việc biên soạn tài liệu nằm kế hoạch xây dựng hệ thống giáo trình mơn học Khoa Đề cương giáo trình thông qua Hội đồng Khoa học Khoa Trường Mục tiêu giáo trình nhằm cung cấp cho sinh viên tài liệu tham khảo mơn học Mạng máy tính, giới thiệu khái niệm hệ thống mạng máy tính, đồng thời trang bị kiến thức số kỹ chủ yếu cho việc bảo trì quản trị hệ thống mạng Đây coi kiến thức ban đầu tảng cho kỹ thuật viên, quản trị viên hệ thống mạng Mặc dù có cố gắng để hồn thành giáo trình theo kế hoạch, hạn chế thời gian kinh nghiệm soạn thảo giáo trình, nên tài liệu chắn khiếm khuyết Rất mong nhận đóng góp ý kiến thầy Khoa bạn sinh viên sử dụng tài liệu Các góp ý xin gửi Khoa Công nghệ thông tin - Trường Cao đẳng nghề Cần Thơ Xin chân thành cảm ơn Cần Thơ, ngày tháng năm 2021 Tham gia biên soạn Chủ biên Nguyễn Phát Minh MỤC LỤC TRANG LỜI GIỚI THIỆU MỤC LỤC TRANG GIÁO TRÌNH MƠN HỌC/MƠ ĐUN Tên mơn học/mơ đun: MẠNG MÁY TÍNH Mã môn học/mô đun: MH 07 CHƯƠNG 1: TỔNG QUAN VỀ CÔNG NGHỆ MẠNG MÁY TÍNH Mã chương: MH 07 - 01 Lịch sử mạng máy tính: Error! Bookmark not defined Giới thiệu mạng máy tính: Error! Bookmark not defined 2.1 Định nghĩa mạng máy tính mục đích việc kết nối mạng: Error! Bookmark not defined 2.2 Đặc trưng kỹ thuật mạng máy tính: Error! Bookmark not defined Phân loại mạng máy tính: Error! Bookmark not defined 3.1 Phân loại mạng theo khoảng cách địa lý : Error! Bookmark not defined 3.2 Phân loại theo kỹ thuật chuyển mạch: Error! Bookmark not defined 3.3 Phân loại theo kiến trúc mạng sử dụng: Error! Bookmark not defined 3.4 Phân loại theo hệ điều hành mạng: Error! Bookmark not defined Giới thiệu mạng máy tính thơng dụng nhất: Error! Bookmark not defined 4.1 Mạng cục bộ: Error! Bookmark not defined 4.2 Mạng diện rộng với kết nối LAN TO LAN: Error! Bookmark not defined 4.3 Liên mạng INTERNET: Error! Bookmark not defined 4.4 Mạng INTRANET: Error! Bookmark not defined CÂU HỎI ÔN TẬP: Error! Bookmark not defined CHƯƠNG 2: MƠ HÌNH HỆ THỐNG MỞ OSI Error! Bookmark not defined Mã chương: MH 07 - 02 Error! Bookmark not defined Mơ hình tham khảo OSI: Error! Bookmark not defined Các giao thức mơ hình OSI Error! Bookmark not defined Các chức chủ yếu tầng mơ hình OSI: Error! Bookmark not defined 3.1 Tầng 1: Vật lý (Physical) Error! Bookmark not defined 3.2 Tầng 2: Liên kết liệu (Data link) Error! Bookmark not defined 3.3 Tầng 3: Mạng (Network) Error! Bookmark not defined 3.4 Tầng 4: Vận chuyển (Transport): Error! Bookmark not defined 3.5 Tầng 5: Giao dịch (Session): Error! Bookmark not defined 3.6 Tầng 6: Trình bày (Presentation) Error! Bookmark not defined 3.7 Tầng 7: ứng dụng (Application) Error! Bookmark not defined CÂU HỎI ÔN TẬP: Error! Bookmark not defined CHƯƠNG 3: TÔ PÔ MẠNG Error! Bookmark not defined Mã chương: MH 07 - 03 Error! Bookmark not defined Mạng cục : Error! Bookmark not defined Kiến trúc mạng cục : Error! Bookmark not defined 2.1 Mạng hình sao: Error! Bookmark not defined 2.2 Mạng trục tuyến tính (Bus): Error! Bookmark not defined 2.3 Mạng hình vịng: Error! Bookmark not defined 2.4 Kết nối hỗn hợp: Error! Bookmark not defined CÂU HỎI ÔN TẬP: Error! Bookmark not defined PHẦN THỰC HÀNH: Error! Bookmark not defined CHƯƠNG 4: CÁP MẠNG VÀ VẬT TẢI TRUYỀN Error! Bookmark not defined Mã chương: MH 07 - 04 Error! Bookmark not defined Các thiết bị mạng thông dụng Error! Bookmark not defined 1.1 Các loại cáp truyền Error! Bookmark not defined 1.1.1 Cáp đôi dây xoắn (Twisted pair cable) Error! Bookmark not defined 1.1.2 Cáp đồng trục (Coaxial cable) băng tần sở Error! Bookmark not defined 1.1.3 Cáp đồng trục băng rộng (Broadband Coaxial Cable) Error! Bookmark not defined 1.1.4 Cáp quang Error! Bookmark not defined Các thiết bị ghép nối Error! Bookmark not defined 2.1 Card giao tiếp mạng (Network Interface Card viết tắt NIC) Error! Bookmark not defined 2.2 Bộ chuyển tiếp (REPEATER ) Error! Bookmark not defined 2.3 Các tập trung (Concentrator hay HUB) Error! Bookmark not defined 2.4 Switching Hub (hay gọi tắt switch) Error! Bookmark not defined 2.5 Modem Error! Bookmark not defined 2.6 Multiplexor - Demultiplexor Error! Bookmark not defined 2.7 Router Error! Bookmark not defined Một số kiểu nối mạng thông dụng chuẩn Error! Bookmark not defined 3.1.Các thành phần thông thường mạng cục gồm có Error! Bookmark not defined 3.2 Kiểu 10BASE5: Error! Bookmark not defined 3.3 Kiểu 10BASE2: Error! Bookmark not defined 3.4 Kiểu 10BASE-T Error! Bookmark not defined 3.5 Kiểu 10BASE-F Error! Bookmark not defined CÂU HỎI ÔN TẬP : Error! Bookmark not defined BÀI THỰC HÀNH: Error! Bookmark not defined CHƯƠNG 5: GIỚI THIỆU GIAO THỨC TCP/IP Error! Bookmark not defined Mã chương: MH 07 - 05 Error! Bookmark not defined Giao thức IP Error! Bookmark not defined 1.1 Họ giao thức TCP/IP Error! Bookmark not defined 1.2 Chức - Giao thức liên mạng IP(v4) Error! Bookmark not defined 1.3 Địa IP Error! Bookmark not defined 1.4 Cấu trúc gói liệu IP Error! Bookmark not defined 1.5 Phân mảnh hợp gói IP Error! Bookmark not defined 1.6 Định tuyến IP Error! Bookmark not defined Một số giao thức điều khiển Error! Bookmark not defined 2.1 Giao thức ICMP Error! Bookmark not defined 2.2 Giao thức ARP giao thức RARP Error! Bookmark not defined 2.3 Giao thức lớp chuyển tải (Transport Layer) Error! Bookmark not defined 2.3.1 Giao thức TCP Error! Bookmark not defined 2.3.2 Cấu trúc gói liệu TCP Error! Bookmark not defined 2.3.3 Thiết lập kết thúc kết nối TCP Error! Bookmark not defined CÂU HỎI ÔN TẬP: Error! Bookmark not defined BÀI THỰC HÀNH: Error! Bookmark not defined TÀI LIỆU THAM KHẢO 87 GIÁO TRÌNH MƠN HỌC/MƠ ĐUN Tên mơn học/mơ đun: LẬP TRÌNH VỚI C# NET Mã môn học/mô đun: MĐ 19 Vị trí, tính chất, ý nghĩa vai trị mơn học/mơ đun: Vị trí: Mơn học bố trí sau sinh viên học xong môn học chung, môn học sở chuyên ngành đào tạo chuyên mơn nghề Tính chất: Là mơn học sở chuyên ngành bắt buộc Ý nghĩa vai trò mơn học/mơ đun: Lập trình với C#.NET mơn học nâng cao từ mơn học Lập trình C# để sinh viên tìm hiểu lập windows tảng để học mơn lập trình ASP.NET Mục tiêu môn học/mô đun: - Về kiến thức: + Hiểu kiến thức tảng Microsoft NET + Biết kiến thức kỹ lập trình hướng đối tượng C# + Có kiến thức kỹ giao diện C# + Có kiến thức kỹ xử lý mảng, chuỗi; - Về kỹ năng: + Tạo ứng dụng windows sử dụng ngôn ngữ C# môi trường Net; - Về lực tự chủ trách nhiệm: + Nghiêm túc, tỉ mỉ việc tiếp nhận kiến thức Chủ động, tích cực thực hành tìm kiếm nguồn tập liên quan: Nội dung môn học/mô đun: Thời gian Số TT Tên chương, mục I Ngơn ngữ lập trình C# Chương trình Biến liệu Các kiểu liệu định nghĩa sẵn C# Luồng điều khiển chương trình Tổng số Lý thuyết Thực Kiểm tra* hành Bài (LT tập hoặcTH) 10 Cấu trúc chương trình Phương thức Dữ liệu kiểu array Các toán tử Enumerations – Kiểu liệt kê Namespace II Lập trình hướng đối tượng với C# 20 10 30 16 12 60 30 27 Kế thừa C# Nạp chồng phương thức (Method Overloading) Ghi đè phương thức che dấu phương thức Gọi phương thức với phiên lớp sở Lớp trừu tượng hàm trừu tượng Lớp bị niêm phong phương thức bị niêm phong Nạp chồng toán tử III Xử lý liệu với ADO.NET Kiến trúc tổng quan ADO.NET Tổng quan mơ hình xử lý liệu ADO.NET Làm việc với mơ hình Kết nối ADO.NET Làm việc với mơ hình Ngắt kết nối: DataSet DataTable Sử dụng Data Binding Cộng BÀI 1: NGÔN NGỮ LẬP TRÌNH C# Mã bài: MĐ 19 - 01 Giới thiệu: Trong trình bày kiến thức tổng quát lập trình với ngơn ngữ C# ứng dụng Windows Mục tiêu bài: Trình bày kiểu liệu định nghĩa sẵn C# Trình bày cấu trúc chương trình ứng dụng Window Viết chương trình ứng dụng Window Hiểu khái niệm Namespace Thực thao tác an tồn với máy tính Nội dung chính: Chương trình Chúng ta làm quen với ngơn ngữ lập trình C# mơi trường tích hợp phát triển (IDE – Integrated Development Environment) Visual Studio NET cách xây dựng ứng dụng đầu tiên, ứng dụng firstApp Ứng dụng cho phép người sử dụng nhập vào số, sau in hình tổng, tích thương hai số vừa nhập Trình tự thực sau: 1.Khởi động Microsoft Visual Studio 2005 Nhấn Ctrl + Shift + N chọn menu tương ứng File → New→Project để tạo project Chọn loại ứng dụng cần phát triển Visual C#→Windows→Console Application Sau đó, chọn thư mục chứa project đặt tên cho project minh họa hình Chú ý, đây, bỏ chọn hộp kiểm “Create directory for solution” Sau nhấn nút OK, khảo sát xem cấu trúc thư mục chứa solution Bạn phải nắm tồn tại, ý nghĩa tập tin, thư mục tạo trình làm việc! Gõ mã lệnh minh họa vào phần mã nguồn tập tin Program.cs 5.Bạn sử dụng MSDN để tra cứu thông tin bạn chưa biết về: a.Lớp Console phương thức ReadLine(), WriteLine() b.Cách chuyển đổi kiểu chuỗi thành số, ví dụ int.Parse() 6.Nhấn Ctrl + F5 để thực biên dịch chạy chương trình Sau quan sát cấu trúc thư mục solution, cho biết thay đổi so với tạo bước (xem thư mục bin thư mục obj project) 7.Thử thay đổi kết câu lệnh float thuong = (float)x / y; thành float thuong = x / y; chạy chương trình, quan sát kết rút kết luận 8.Sử dụng thêm cấu trúc lệnh khác để tinh chỉnh hoạt động chương trình (xử lý phép chia cho 0, …) Biến liệu Biến C# khai báo theo cú pháp sau datatype identifier; Ví dụ: int i; Câu lệnh khai báo số int tên i Trình biên dịch thực chưa cho phép sử dụng biến khởi tạo giá trị Lệnh khai báo làm nhiệm vụ cấp phát vùng nhớ (4 bytes) cho biến i Sau khai báo, gán giá trị cho biến toán tử gán =, sau: i = 10; Chúng ta vừa khai báo, vừa khởi tạo giá trị cho biến lúc int i = 10; // khai bao va khoi tao gia tri cho bien int double x = 10.25, y = 20; // khai bao va khoi tao hai bien double 2.1 Tầm hoạt động biến Tầm hoạt động biến vùng mã lệnh mà biến truy xuất Nói chung, tầm hoạt động biến xác định theo quy tắc sau: Một trường liệu (field), gọi biến thành phần lớp đối tượng có tầm hoạt động phạm vi lớp chứa Một biến cục có tầm hoạt động khối khai báo (trong cặp dấu ngoặc nhọn { }) 10 nạp liệu vào table (đang tồn tạo mới) Ở ví dụ đây, table tạo với tên mặc định “Table”: DataSet ds = new DataSet(); // Tạo DataTable, nạp liệu vào DataTable, đưa DataTable vào DataSet int nRecs = da.Fill(ds); // trả số lượng record nạp vào DataTable // Nếu muốn đặt tên cho DataTable DataSet thay lấy tên mặc định // sử dụng code int nRecs = da.Fill(ds, "nhanvien ") Với table tồn tại, tác dụng lệnh Fill tùy thuộc vào table có primary hay khơng Nếu có, dịng liệu có khóa trùng với dịng liệu thay Các dòng liệu khơng trùng với liệu có nối vào sau DataTable 4.4.4 Cập nhật CSDL DataAdapter Sau DataAdapter nạp liệu vào table, connection đóng, thay đổi sau đối sau tạo cho liệu có ảnh hưởng DataSet khơng phải liệu nguồn! Để thực cập nhật thay đổi lên nguồn liệu, DataAdapter phải sử dụng để khơi phục connection gửi dịng liệu thay đổi lên CSDL Ngoài SelectCommand, DataAdapter có thêm thuộc tính Command nữa, gồm InsertCommand, DeleteCommand UpdateCommand, làm nhiệm vụ thực thao tác tương ứng với tên thuộc tính chúng (chèn, xóa, cập nhật) Các Command thực thi phương thức Update DataAdapter triệu gọi Khó khăn nằm chỗ tạo query command phức tạp (cú pháp câu lệnh SQL tương ứng dài dòng phức tạp số lượng column nhiều lên) Rất may data provider có 74 cài đặt lớp gọi CommandBuilder dùng để quản lý việc tạo Command nói cách tự động 4.4.4.1 CommandBuilder Một đối tượng CommandBuilder sinh Command cần thiết để thực việc cập nhật nguồn liệu tạo DataSet Cách tạo đối tượng CommandBuilder truyền đối tượng DataAdapter cho phương thức khởi dựng nó; sau đó, phương thức DataAdapter.Update gọi, lệnh SQL sinh thực thi Đoạn code minh họa cách thức thay đổi liệu DataTable cập nhật lên CSDL tương ứng DataAdapter: //Giả sử có DataSet ds chứa liệu bảng khoa DataTable dt= ds.Tables["khoa"]; // (1) Dùng commandBuilder để sinh Command cần thiết để update SqlCommandBuilder sb = new SqlCommandBuilder(da); // (2) Thực thay đổi liệu: thêm khoa DataRow drow = dt.NewRow(); drow["Makhoa"] = 12; drow["tenkhoa"] = "abc"; dt.Rows.Add(drow); // (3) Thực thay đổi liệu: xóa khoa dt.Rows[4].Delete(); // (4) Thực thay đổi liệu: thay đổi giá trị dòng liệu dt.Rows[5]["tenkhoa"] = "this must be changed"; // (5) Tiến hành cập nhật lên CSDL int nUpdate = da.Update(ds, "khoa"); MessageBox.Show("Số dịng thay đổi: " + nUpdate.ToString()); // Có số hạn chế sử dụng CommandBuilder: Command Select ứng với DataAdapter 75 tham chiếu đến table, table nguồn CSDL phải bao gồm primary key column chứa giá trị Column (hay tổ hợp columns) phải bao gồm command Select ban đầu 4.4.4.2 Đồng hóa liệu DataSet CSDL Như minh họa ví dụ này, việc sử dụng DataAdapter làm đơn giản hóa tự động hóa q trình cập nhật CSDL data source Tuy nhiên, có vấn đề đây: multi-user (nhiều người sử dụng) Mơ hình Ngắt kết nối dựa chế Optimistic Concurrency, cách tiếp cận mà dịng liệu data source khơng bị khóa (lock) thời gian mà chúng đọc thời gian mà cập nhật áp dụng cho data source Trong khoảng thời gian này, user khác cập nhật data source Nếu có thay đổi xảy kể từ lần đọc trước phương thức Update nhận biết không cho áp dụng thay đổi dịng liệu Có hai phương án để giải lỗi concurrency (tương tranh) có nhiều cập nhật áp dụng: roll back tất thay đổi xuất xung đột (violation), áp dụng cập nhật không gây lỗi xác định cập nhật có gây lỗi để xử lý lại 4.4.4.3 Sử dụng Transactions để Roll Back nhiều cập nhật Khi thuộc tính DataAdapter.ContinueUpdateOnErrors thiết lập false, ngoại lệ ném thay đổi dịng liệu khơng thể thực Điều ngăn cập nhật thực thi, lại không ảnh hưởng đến cập nhật xuất trước ngoại lệ Do cập nhật có liên quan với nhau, ứng dụng thường cần chiến lược tất cả, không (all-or-none) Cách dễ để thực thi chiến lược tạo transaction tất command update thực thi Để thực điều này, tạo đối tượng SqlTransaction gắn với 76 SqlDataAdapter.SelectCommand cách truyền cho hàm khởi dựng Nếu có ngoại lệ xảy ra, phương thức Rollback thực thi để undo thay đổi trước đó; khơng có ngoại lệ xuất hiện, phương thức Commit thực thi để áp dụng tất command update Dưới ví dụ: SqlDataAdapter da = new SqlDataAdapter(); SqlCommandBuilder sb = new SqlCommandBuilder(da); SqlTransaction tran; SqlConnection conn = new SqlConnection(connStr); conn.Open(); // Connection phải dùng với Transaction // (1) Tạo transaction SqlTransaction tran = conn.BeginTransaction(); // (2) Gắn SelectCommand với transaction da.SelectCommand = new SqlCommand(sql, conn, tran); DataSet ds = new DataSet(); da.Fill(ds, "docgia"); // // Code phần thực cập nhật lên dòng liệu DataSet try { int updates = da.Update(ds, "docgia"); MessageBox.Show("Cập nhật: " + updates.ToString()); } // (3) Nếu có ngoại lệ xuất hiện, roll back cập nhật transaction catch (Exception ex) { MessageBox.Show(ex.Message); // Lỗi cập nhật if (tran != null) { tran.Rollback(); // Roll back cập nhật 77 tran = null; MessageBox.Show("Tất cập nhật bị roll back."); } } finally { // (4) Nếu khơng có lỗi, commit tất cập nhật if (tran != null) { tran.Commit(); MessageBox.Show("Tất cập nhật thành công "); tran = null; } } conn.Close(); 4.4.4.4 Xác định dòng gây lỗi cập nhật Khi thuộc tính DataAdapter.ContinueUpdateOnErrors thiết lập True, xử lý không ngưng có dịng liệu khơng thể cập nhật Thay vào đó, DataAdapter cập nhật tất dịng liệu khơng gây lỗi Sau đó, lập trình viên xác định dịng liệu không cập nhật định cách xử lý chúng Các dịng liệu khơng cập nhật dễ dàng xác định qua thuộc tính DataRowState chúng (đã trình bày phần mơ tả DataRow) Các dòng liệu cập nhật thành cơng có trạng thái Unchanged; dịng liệu khơng cập nhật thành cơng mang trạng thái Added, Deleted Modified Đoạn code minh họa cách lặp qua dòng liệu xác định dòng chưa cập nhật // SqlDataAdapter da nạp liệu bảng docgia 78 da.ContinueUpdateOnError = true; DataSet ds = new DataSet(); Try { da.Fill(ds, "docgia"); DataTable dt = ds.Tables["docgia"]; SqlCommandBuilder sb = new SqlCommandBuilder(da); // Các thao tác cập nhật dt.Rows[29].Delete(); // Delete dt.Rows[30]["HoTen"] = "try to change"; // Update dt.Rows[30][Madocgia] = 1234; // Update dt.Rows[31]["HoTen"] = "XYZ"; // Update DataRow drow = dt.NewRow(); drow["HoTen"] = "tnv spider"; drow["Madocgia"] = 25; dt.Rows.Add(drow); // insert // Submit updates int updates = da.Update(ds, "docgia"); if (ds.HasChanges()) { // Load rows that failed into a DataSet DataSet failures = ds.GetChanges(); int rowsFailed = failures.Rows.Count; Console.WriteLine("Số dịng khơng thể cập nhật: " + rowsFailed); foreach (DataRow r in failures.Tables[0].Rows ) { string state = r.RowState.ToString()); // Phải hủy bỏ thay đổi để hiển thị dịng bị xóa if (r.RowState == DataRowState.Deleted) r.RejectChanges(); 79 string iMadocgia= ((int)r["Madocgia"]).ToString(); string msg = state + " Madocgia: " + iMadocgia; Console.WriteLine(msg); } } Lưu ý thao tác xóa xuất trước, khơng có tác dụng thao tác khác Câu lệnh SQL xóa hay cập nhật dòng liệu dựa theo giá trị primary key không liên quan đến vị trí Ngồi cập nhật dòng kết hợp đếm cập nhật cho dịng phương thức Update Ở ví dụ trên, cập nhật cho dịng 30 tính cập nhật 4.4.5 Định nghĩa Relationships Table DataSet Một DataRelation mối quan hệ parent-child hai đối tượng DataTables Nó định nghĩa dựa việc so khớp columns DataTable Cú pháp hàm khởi dựng sau: public DataRelation( string relationName, DataColumn parentColumn, DataColumn childColumn) Một DataSet có thuộc tính Relations giúp quản lý tập hợp DataRelation định nghĩa DataSet Sử dụng phương thức Relations.Add để thêm DataRelation vào tập hợp Relations Ví dụ thiết lập mối quan hệ hai bảng khoa docgia để liệt kê danh sách docgia khoa string connStr="Data Source=tên máy chủ;Initial Catalog=quanlythuvien; Trusted_Connection=yes"; DataSet ds = new DataSet(); 80 // (1) Fill bảng docgia string sql = "SELECT * FROM docgia”; SqlConnection conn = new SqlConnection(connStr); SqlCommand cmd = new SqlCommand(); SqlDataAdapter da = new SqlDataAdapter(sql, conn); da.Fill(ds, "docgia"); // (2) Fill bảng khoa sql = "SELECT * FROM khoa”; da.SelectCommand.CommandText = sql; da.Fill(ds, "khoa"); // (3) Định nghĩa relationship bảng khoa docgia DataTable parent = ds.Tables["khoa"]; DataTable child = ds.Tables["docgia"]; DataRelation relation = new DataRelation("khoa_docgia", parent.Columns["makhoa"], child.Columns["makhoa"]); // (4) Đưa relationship vào DataSet ds.Relations.Add(relation); // (5) Liệt kê danh sách đọc giả khoa foreach (DataRow r in parent.Rows) { Console.WriteLine(r["tenkhoa"]); // Tên khoa foreach (DataRow rc in r.GetChildRows("khoa_docgia")) { Console.WriteLine(" " + rc["HoTen"]); } } /* Ví dụ kết quả: Khoa Tin Nguyễn Văn Trung 81 Ngô Anh Tuấn Lê Thanh Hoa Khoa Toán Nguyễn Thị Hoa Trần Văn Phúc */ Khi relationship định nghĩa tables, thêm ForeignKeyConstraint vào tập hợp Constraints DataTable Constraint định cách mà DataTable bị ảnh hưởng dòng liệu phía DataTable cha bị thay đổi hay bị xóa Trong thực tế, điều có nghĩa bạn xóa dịng DataTable cha, dịng có liên quan bị xóa – key bị đặt lại giá trị thành NULL Tương tự thế, giá trị key bị thay đổi DataTable cha, dịng liệu có liên quan DataTable bị thay đổi theo bị đổi giá trị thành NULL Các luật xác định thuộc tính DeleteRule UpdateRule constraint Các luật nhận giá trị liệt kê sau đây: - Cascade Xóa/Cập nhật dịng liệu có liên quan DataTable Đây giá trị mặc định - None Không làm - SetDefault Thiết lập giá trị khóa dịng liệu có liên quan DataTable thành giá trị mặc định column tương ứng - SetNull Thiết lập giá trị khóa dịng liệu có liên quan DataTable thành null Xem xét ví dụ đây: // (1) Thêm dịng với khóa vào DataTable DataRow row = child.NewRow(); 82 row["Makhoa"] = 999; // giả sử bảng khoa khơng có record có Makhoa = 999 child.Rows.Add(row); // Không 999 không tồn DataTable cha // (2) Xóa dịng DataTable cha row = parent.Rows[0]; row.Delete(); // Xóa dịng DataTable có khóa // (3) Tạm thời vơ hiệu hóa constraints thử thêm dòng ds.EnforceConstraints = false; row["Makhoa"] = 999; child.Rows.Add(row); // Được chấp nhận!!! ds.EnforceConstraints = true; // Kích hoạt constraint trở lại // (4) Thay đổi constraint để đặt dòng liệu thành null DataTable thay đổi ((ForeignKeyConstraint)child.Constraints[0]).DeleteRule = Rule.SetNull; Lưu ý thuộc tính EnforeceConstraint đặt thành false làm vơ hiệu hóa tất constraint – điều thuật ngữ CSDL gọi bỏ qua tính tồn vẹn tham chiếu Điều cho phép khoa bổ sung vào chí column Makhoa khơng tương ứng với dịng bảng khoa Nó cho phép dịng khoa xóa có nhiều dịng tương ứng với bảng docgia Sử dụng Data Binding Chúng ta đề cập đến điều khiển để thiết kế giao diện TextBox, ListBox, RadioButton, ComBoBox các điều khiển ADO.NET DataSet, DataTable DataView Các điều khiển làm việc cách độc lập với nhau, nhiên số tình chúng cần kết hợp lại với Ví dụ ta cần hiển thị tên khoa từ sở liệu TextBox, ta cần tạo DataSet chứa liệu bảng khoa TextBox, sau liên kết liệu DataSet vào TextBox Sự kết hợp hai điều khiển sử dụng DataBinding 4.5.1 Các loại Binding ADO.NET cung cấp loại Binding: 83 - DataBinding đơn giản (Simple DataBinding): Tại thời điểm, giá trị đơn DataSet bị buộc vào điều khiển Ví dụ: giả sử có DataSet ds chứa liệu bảng Khoa, cần buộc tên khoa vào TextBox txttenkhoa: txttenkhoa.DataBindings.Add("Text", ds, "khoa.tenkhoa"); Khi thay đổi DataSet ds ảnh hưởng đến TextBox txtdocgia ngược lại - DataBinding phức tạp (Complex DataBinding): Các liệu DataSet bị buộc vào điều khiển thay giá trị đơn Chỉ có DataGidView ComboBox hỗ trợ chức DataBinding phức tạp Ví dụ: giả sử có DataSet ds chứa liệu bảng Khoa, cần buộc tên khoa vào ComboBox cmbkhoa buộc toàn liệu bảng khoa vào DataSet ds: //Buộc tenkhoa bảng khoa DataSet ds vào cmbkhoa cmbkhoa.DataSource = ds; cmbkhoa.DisplayMember = "khoa.tenkhoa"; //Buộc toàn liệu bảng khoa DataSet ds vào DataGridView dgvkhoa dgvKhoa.DataSource = ds; dgvKhoa.DataMember = "khoa"; 4.5.2 Các nguồn liệu DataBinding Nhiều thành phần hoạt động nguồn liệu DataBinding Bất kỳ thành phần cài đặt từ giao diện Ilist xem nguồn liệu DataBinding Các ví dụ sau minh họa cách để sử dụng DataTable, DataView, DataSet Mảng nguồn liệu để cài đặt DataBinding đơn giản phức tạp - DataTable: Loại liệu lưu trữ liệu bảng sở liệu DataTable t = ds.Tables["khoa"]; //DataBinding đơn giản txttenkhoa.DataBindings.Add("Text", t, "tenkhoa"); //DataBinding phức tạp cmbkhoa.DataSource = t; 84 cmbkhoa.DisplayMember = "tenkhoa"; dgvKhoa.DataSource = t; - DataView: DataView dv =new DataView (ds.Tables["khoa"]); //DataBinding đơn giản txttenkhoa.DataBindings.Add("Text", dv, "tenkhoa"); //DataBinding phức tạp cmbkhoa.DataSource = dv; cmbkhoa.DisplayMember = "tenkhoa"; dgvKhoa.DataSource = dv; - DataSet: ví dụ phần 3.5.1 - Mảng: int[] t = new int[4] { 12, 2, 3, }; //DataBinding đơn giản txttenkhoa.DataBindings.Add("Text", t, ""); //DataBinding phức tạp cmbkhoa.DataSource = t; 4.5.3 BindingContext Sơ đồ bên cách buộc liệu từ nguồn liệu vào điều khiển Form Phần chủ yếu thảo luận lớp BindingContext, CurrencyManager cách chúng tương tác liệu bị buộc vào nhiều điều khiển Form: BindingContext Mỗi Windows Form có thuộc tính BindingContext Một BindingContext có tập hợp BindingManagerBase, đối tượng tạo liệu buộc vào điều khiển Nếu nguồn liệu bao gồm danh sách đối tượng a DataTable, DataView đối tượng cài đặt giao diện Ilist CurrencyManager sử 85 dụng Một CurrencyManager trì vị trí thời (current position ) bên nguồn liệu Nếu nguồn liệu trả giá trị đơn PropertyManager lưu trữ bên BindingContext Một CurrencyManager PropertyManager tạo lần cho nguồn liệu Nếu hai TextBox bị buộc vào dịng DataTable có mộ CurrencyManager tạo BindingContext Khi tạo điều khiển form, điều khiển liên kết với quản lý buộc liệu form ( form's binding manager) Khi tạo điều khiển thuộc tính BindingContext null Để buộc liệu vào điều khiển ta dùng thuộc tính DataBindings ví dụ bên buộc mã khoa tên khoa DataSet ds vào TextBox1 textBox2 textBox1.DataBindings.Add("Text", ds, "khoa.makhoa"); textBox2.DataBindings.Add("Text", ds, "khoa.tenkhoa"); CurrencyManager and PropertyManager Khi buộc liệu vào điều khiển form CurrencyManager PropertyManager tương ứng tạo Mục đích lớp xác định vị trí mẫu tin thời bên nguồn liệu vị trí thay đổi liệu điều khiển bị buộc form tự động thay đổi theo Các thuộc tính BindingContext: Bài tập: 86 Bài tập nâng cao: VPS loại mạng gì? Trình bày ưu điểm khuyết điểm? Những trọng tâm cần ý bài: - Lợi ích kết nối máy tính thành mạng - Các loại mạng thường gặp đặc trưng Yêu cầu đánh giá kết học tập: Nội dung: + Về kiến thức: Trình bày lợi ích kết nối máy tính thành mạng, mạng chuyển mạch gói có tốc độ trao đổi thơng tin nhanh tốc độ trao đổi thông tin mạch chuyển mạch tin báo?, mạng cục LAN (Local Area Networks) nêu đặc trưng + Về kỹ năng: phân biệt mạng cục bộ, mạng đô thị, mạng diện rộng + Năng lực tự chủ trách nhiệm: Tỉ mỉ, cẩn thận, xác, ngăn nắp cơng việc Phương pháp: + Về kiến thức: Được đánh giá hình thức kiểm tra viết, trắc nghiệm, vấn đáp + Về kỹ năng: Đánh giá kỹ phân biệt loại mạng + Năng lực tự chủ trách nhiệm: Tỉ mỉ, cẩn thận, xác, ngăn nắp cơng việc 87 TÀI LIỆU THAM KHẢO [1] C# 2008 - Lập Trình Cơ Bản nâng cao Nhà xuất lao động xã hội; [2] MSDN Library; [3] Jesse Liberty, Programming C#, Nhà xuất bản: O’Reilly; [4] Bradley L.Jones ,C# in 21 Days, Nhà xuất bản: SAMS 88