Lập trình hướng đối tượng - Chương 12: Truy xuất database trong chương trình VC#

pdf 19 trang vanle 3100
Bạn đang xem tài liệu "Lập trình hướng đối tượng - Chương 12: Truy xuất database trong chương trình VC#", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdflap_trinh_huong_doi_tuong_chuong_12_truy_xuat_database_trong.pdf

Nội dung text: Lập trình hướng đối tượng - Chương 12: Truy xuất database trong chương trình VC#

  1. Chương 12 Truy xuất database trong chương trình VC# 12.0 Dẫn nhập 12.1 Tổng quát về truy xuất database 12.2 Truy xuất database thông qua ADO .Net 12.3 Thí dụ lập trình dùng ADO .Net 12.4 Databinding (Kết nối ₫ộng ₫ến dữ liệu) 12.5 Thí dụ về databinding mà không viết code 12.6 Thí dụ về databinding có viết code khởi tạo 12.7 Kết chương Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 1 12.0 Dẫn nhập ‰ Chương này giới thiệu cách thức dùng các ₫ối tượng trong thư viện ADO .Net ₫ể truy xuất database dễ dàng, tin cậy. ‰ Chương này cũng giới thiệu cách thức dùng khả năng databinding của các ₫ối tượng giao diện trong môi trường VS .Net ₫ể xây dựng chương trình truy xuất database ₫ược dễ dàng, nhanh chóng, tin cậy, và nhiều trường hợp không cần viết code cho chương trình. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 2
  2. 12.1 Tổng quát về truy xuất database ‰ Mục tiêu của chương trình là xử lý các dữ liệu của nó. Dữ liệu của chương trình có thể rất nhiều và ₫a dạng phong phú về tính chất. Trong chương 7, chúng ta ₫ã giới thiệu cách lập trình ₫ể ghi/₫ọc dữ liệu cổ ₫iển hay ₫ối tượng ra/vào file. ‰ Hầu hết các ứng dụng hiện nay (nhất là các ứng dụng nghiệp vụ) ₫ều phải truy xuất dữ liệu rất lớn. Thí dụ chương trình quản lý công dân Việt Nam phải xử lý hàng trăm triệu hồ sơ chứa thông tin về các công dân. ‰ Việc xử lý dữ liệu bao gồm nhiều tác vụ như tạo file mới với cấu trúc record cụ thể, thêm/bớt/hiệu chỉnh/duyệt các record, tìm kiếm các record thỏa mãn 1 tiêu chuẩn nào ₫ó, Để thực hiện các tác vụ trên (nhất là tìm kiếm record thỏa mãn 1 số tiêu chuẩn nào ₫ó) hiệu quả, tin cậy, ta cần nhiều kiến thức khác nhau và phải tốn nhiều công sức. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 3 12.1 Tổng quát về truy xuất database ‰ Hiện nay các record dữ liệu có cùng cấu trúc (thí dụ như các record sinh viên) cần xử lý của chương trình thường ₫ược lưu giữ trong 1 bảng dữ liệu (table). Nhiều bảng dữ liệu có mối quan hệ lẫn nhau ₫ược chứa trong 1 database quan hệ. Có nhiều ₫ịnh dạng database quan hệ khác nhau ₫ang ₫ược dùng như FoxPro, Access, SQL Server, MySQL, Oracle ‰ Để giải phóng ứng dụng khỏi các chi tiết quản lý database, người ta ₫ã xây dựng ứng dụng ₫ặc biệt : DBMS (Database Management System). ‰ Mỗi DBMS cung cấp ít nhất 1 Provider. Provider là module phần mềm cung cấp các hàm chức năng ₫ể chương trình ứng dụng gọi khi cần thiết hầu truy xuất dữ liệu trong database mà không cần biết chi tiết về cấu trúc vật lý của các record dữ liệu trong database. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 4
  3. 12.1 Tổng quát về truy xuất database ‰ Mỗi lần cần truy xuất dữ liệu trong database, ứng dụng sẽ nhờ DBMS thực hiện dùm thông qua việc dùng 1 trong các cấp dịch vụ sau ₫ây (từ cao xuống thấp) : ƒ Các lệnh truy vấn của ngôn ngữ SQL ƒ Các ₫ối tượng trong thư viện ADO .Net (ActiveX Data Objects) ƒ Các ₫ối tượng trong thư viện ADO (ActiveX Data Objects) ƒ Các ₫ối tượng trong thư viện DAO (Data Access Objects) ƒ Các hàm trong thư viện ODBC (Open Database Connectivity) Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 5 12.1 Tổng quát về truy xuất database ‰ Ngôn ngữ truy vấn SQL là ngôn ngữ phi thủ tục, nó cung cấp 1 tập các lệnh SQL rất mạnh và dễ dàng dùng ₫ể xử lý database. Thí dụ ₫ể tìm tất cả sinh viên nam quê ở Bến tre ₫ang theo học tại trường Bách Khoa Tp.HCM, ta chỉ cần dùng 1 lệnh SQL như sau : Select * from Sinhvien where Phai = 1 and Quequan = 71 ‰ Thư viện ADO .Net cung cấp 1 số ₫ối tượng ₫ể giúp người lập trình truy xuất database rất dễ dàng thông qua mô hình hướng ₫ối tượng. ‰ Ngôn ngữ VC# cho phép ta kết hợp 2 cấp truy xuất database dễ dàng, ₫ơn giản nhất : dùng các ₫ối tượng ADO .Net ₫ể thực hiện các lệnh truy vấn SQL. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 6
  4. 12.2 Truy xuất database thông qua ADO .Net ‰ Các ₫ối tượng ADO .Net ₫ược tổ chức theo từng namespace, mỗi namespace chứa ₫ối tượng dùng cùng Provider truy xuất database : ƒ System.Data.OleDb chứa các ₫ối tượng ADO .Net ₫ể truy xuất database do bộ Microsoft Office quản lý như Visual FoxPro, Access, Excel, ƒ System.Data.Sql và System.Data.SqlClient chứa các ₫ối tượng ADO .Net ₫ể truy xuất database do serer "SQLServer" quản lý. ƒ System.Data.Odbc chứa các ₫ối tượng ADO .Net ₫ể truy xuất database thông qua chuẩn giao tiếp ODBC. Hầu hết các hệ quản trị database (DBMS) hiện nay ₫ều hỗ trợ chuẩn giao tiếp này. ƒ Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 7 12.2 Truy xuất database thông qua ADO .Net ‰ Trong từng namespace, ₫ể lập trình truy xuất database, ta thường dùng các ₫ối tượng ADO .Net chính yếu sau ₫ây : 1. preConnection, trong ₫ó pre là phần tiếp ₫ầu ngữ miêu tả tên namespace như OleDb, Obdc, Sql, SqlClient, Đối tượng này có chức năng quản lý cầu nối ₫ến nguồn database mà chúng ta cần truy xuất. 2. preCommand có chức năng quản lý lệnh truy vấn SQL mà ta cần thực hiện. 3. preDataReader cho phép duyệt ₫ọc/xử lý các record từ 1 bảng dữ liệu. 4. preDataAdapter quản lý 1 tập các lệnh truy vấn và 1 connection tới nguồn database ₫ể cho phép việc ₫ọc/ghi dữ liệu. 5. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 8
  5. 12.3 Thí dụ lập trình dùng ADO .Net ‰ Thí dụ trong một tổ chức quản lý việc nhập/xuất/tồn các sản phẩm, ta dùng 1 database quản lý dữ liệu. Database chứa 3 bảng dữ liệu sau ₫ây : ƒ SPNhap chứa số lượng các sản phẩm nhập, mỗi record có các field như MaSP, Soluong, ƒ SPXuat chứa số lượng các sản phẩm xuất, mỗi record có các field như MaSP, Soluong, ƒ SPTon chứa số lượng các sản phẩm tồn kho, mỗi record có các field như MaSP, Soluong, ‰ Thường thì người làm công tác nghiệp vụ sẽ thực hiện việc cập nhật bảng sản phẩm nhập, bảng sản phẩm xuất theo thời gian. Chúng ta hãy viết chương trình tạo bảng sản phẩm tồn theo nội dung hiện hành của 2 bảng sản phẩm nhập/xuất. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 9 12.3 Thí dụ lập trình dùng ADO .Net 1. Chạy VS .Net, chọn menu File.New.Project ₫ể hiển thị cửa sổ New Project. 2. Mở rộng mục Visual C# trong TreeView "Project Types", chọn mục Windows, chọn icon "Console Application" trong listbox "Templates" bên phải, thiết lập thư mục chứa Project trong listbox "Location", nhập tên Project vào textbox "Name:" (td. TaoSPTon), click button OK ₫ể tạo Project theo các thông số ₫ã khai báo. 3. Ngay sau khi Project vừa ₫ược tạo ra, cửa sổ soạn code cho chương trình ₫ược hiển thị. Thêm lệnh using sau ₫ây vào ₫ầu file : using System.data.OleDb; Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 10
  6. 12.3 Thí dụ lập trình dùng ADO .Net 4. Viết code cho thân hàm Main như sau : static void Main(string[] args) { //₫ịnh nghĩa các biến ₫ối tượng cần dùng String ConnectionString; OleDbConnection cn; OleDbCommand cmd = new OleDbCommand(); //xây dựng chuỗi ₫ặc tả database cần truy xuất ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\\MyDatabase.mdb;"; //tạo ₫ối tượng Connection ₫ến database & mở Connection cn = new OleDbConnection(ConnectionString); cn.Open(); //cấu hình cho ₫ối tượng Command cmd.Connection = cn; Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 11 12.3 Thí dụ lập trình dùng ADO .Net //thực hiện lệnh SQL xóa bảng SPTon nếu ₫ã có cmd.CommandText = "Drop Table SPTon"; try { cmd.ExecuteNonQuery(); } catch { } //thực hiện lệnh SQL tạo bảng sản phẩm tồn cmd.CommandText = "Create Table SPTon(MaSP Text, Soluong int)"; cmd.ExecuteNonQuery(); //thực hiện lệnh SQL tạo các sản phẩm tồn có MaSP tồn tại trong bảng SPNhap cmd.CommandText = "Insert into SPTon select SPNhap.MaSP, IIf(IsNull(SPNhap.Soluong), 0, SPNhap.Soluong)- IIf(IsNull(SPXuat.Soluong), 0, SPXuat.Soluong) as Soluong from SPXuat right join SPNhap on SPXuat.MaSP = SPNhap.MaSP"; cmd.ExecuteNonQuery(); Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 12
  7. 12.3 Thí dụ lập trình dùng ADO .Net //thực hiện lệnh SQL tạo bảng sản phẩm Tam cmd.CommandText = "Create Table Tam(MaSP Text, Soluong int)"; cmd.ExecuteNonQuery(); //thực hiện lệnh SQL tạo các sản phẩm tồn có MaSP tồn tại trong bảng SPXuat cmd.CommandText = "Insert into Tam select SPXuat.MaSP, IIf(IsNull(SPNhap.Soluong), 0, SPNhap.Soluong) - IIf(IsNull(SPXuat.Soluong), 0, SPXuat.Soluong) as Soluong from SPNhap right join SPXuat on SPXuat.MaSP = SPNhap.MaSP"; cmd.ExecuteNonQuery(); //Trộn 2 bảng kết quả lại thành bảng SPTon cmd.CommandText = "Insert into SPTon select MaSP, Soluong from Tam where Soluong < 0"; cmd.ExecuteNonQuery(); Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 13 12.3 Thí dụ lập trình dùng ADO .Net //Xóa bảng Tam cmd.CommandText = "Drop Table Tam"; cmd.ExecuteNonQuery(); } 5. Chọn menu Debug.Start Debugging ₫ể dịch và chạy ứng dụng. 6. Sau khi ứng dụng chạy xong, chạy ứng dụng Access, mở file database, kiểm tra nội dung bảng SPTon ₫ể ₫ánh giá kết quả có ₫úng yêu cầu không. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 14
  8. 12.4 Databinding (Kết nối ₫ộng ₫ến dữ liệu) Khi viết chương trình truy xuất database có giao diện ₫ồ họa trực quan, chúng ta thường phải thực hiện các chức năng chính : 1. thiết kế các ₫ối tượng giao diện ₫ể giúp người dùng tương tác với database. 2. viết code thiết lập các thông tin về database, về các dữ liệu cần truy xuất. 3. mỗi lần record trên database bị thay ₫ổi nội dung (do bị xử lý bên trong, do bị thay ₫ổi vị trí truy xuất), ta phải viết code ₫ọc thông tin của record hiện hành và hiển thị lên các ₫ối tượng giao diện tương ứng. 4. mỗi lần người dùng cập nhật nội dung trong các ₫ối tượng giao diện, ta phải viết code ₫ọc thông tin của các ₫ối tượng giao diện và ghi lên record tương ứng trên database ₫ể ₫ảm bảo tính nhất quán dữ liệu. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 15 12.4 Databinding (Kết nối ₫ộng ₫ến dữ liệu) ‰ Trong 4 công việc cần thực hiện trong slide trước thì công việc 3 và 4 khá nặng nề. VC# cung cấp khả năng Databinding ₫ể giúp người lập trình không cần thực hiện 2 công việc nặng nề này. ‰ Thật vậy, hầu hết các ₫ối tượng giao diện có sẵn trong framework .Net như TextBox, ListBox, ComboBox, TreeView, DataGridView, ₫ều có thuộc tính DataBindings. Nó giúp ta chỉ cần thiết lập sự kết hợp giữa ₫ối tượng giao diện với dữ liệu nào ₫ó trong database ₫ể khi chương trình hoạt ₫ộng, máy sẽ tự hiển thị thông tin từ database lên ₫ối tượng giao diện và mỗi khi nội dung ₫ối tượng giao diện bị thay ₫ổi bởi người dùng, máy cũng sẽ tự ₫ộng ghi lên database ₫ể ₫ảm bảo tính nhất quán dữ liệu theo suốt thời gian làm việc. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 16
  9. 12.4 Databinding (Kết nối ₫ộng ₫ến dữ liệu) ‰ Việc thiết lập sự kết hợp giữa ₫ối tượng giao diện với dữ liệu trong database có thể thực hiện bằng thiết kế trực quan hay viết code tường minh. ‰ Nếu ta thiết lập sự kết hợp giữa ₫ối tượng giao diện với dữ liệu trong database bằng thiết kế trực quan thì sẽ dẫn ₫ến kết quả hết sức hấp dẫn : xây dựng chương trình truy xuất database mà không cần viết code nào cả. Thí dụ trong mục 10.5 sẽ cho thấy kết luận này. ‰ Tuy nhiên ₫ể chủ ₫ộng hơn trong việc xác lập mối quan hệ ràng buộc giữa các nội dung hiển thị trong các ₫ối tượng giao diện, ta thường sẽ viết ₫oạn code ₫ể thiết lập sự kết hợp giữa ₫ối tượng giao diện với dữ liệu trong database cũng như các ràng buộc giữa chúng. Thí dụ trong mục 10.6 sẽ cho thấy kết luận này. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 17 12.5 Thí dụ về databinding mà không viết code ‰ Trong bộ Microsoft Office, Microsoft có cung cấp 1 database Access có tên là NorthWind.mdb, database này chứa thông tin quản lý của 1 siêu thị ₫iện tửảo, gồm nhiều bảng dữ liệu, trong ₫ócóbảng Customers miêu tả các khách hàng của siêu thị. ‰ Chúng ta hãy thử viết 1 chương trình ₫ơn giản có chức năng hiển thị thông tin về các khách hàng trong bảng Customers cho người dùng xem. ‰ Sau ₫ây là qui trình ₫iển hình ₫ể xây dựng chương trình theo yêu cầu trên mà không cần viết code cho chương trình. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 18
  10. 12.5 Thí dụ về databinding mà không viết code 1. Chạy VS .Net, chọn menu File.New.Project ₫ể hiển thị cửa sổ New Project. 2. Mở rộng mục Visual C# trong TreeView "Project Types", chọn mục Windows, chọn icon "Windows Application" trong listbox "Templates" bên phải, thiết lập thư mục chứa Project trong listbox "Location", nhập tên Project vào textbox "Name:" (td. DBAccess), click button OK ₫ể tạo Project theo các thông số ₫ã khai báo. 3. Form ₫ầu tiên của ứng dụng ₫ã hiển thị trong cửa sổ thiết kế, việc thiết kế form là quá trình lặp 4 thao tác tạo mới/xóa/hiệu chỉnh thuộc tính/tạo hàm xử lý sự kiện cho từng ₫ối tượng cần dùng trong form. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 19 12.5 Thí dụ về databinding mà không viết code 4. Duyệt tìm phần tử DataGridView (trong nhóm Data), chọn nó, dời chuột vào trong Form và vẽ nó với kích thước mong muốn (chiếm hết form). Hiệu chỉnh thuộc tính (Name) = grdCustomers. 5. Ngay sau khi vẽ xong DataGridView, máy sẽ hiển thị cửa sổ "DataGridView Tasks". Nếu sơ xuất làm mất nó thì bạn hãy click chuột vào button nhỏởphía trên phải DataGridView ₫ể hiển thị lại. Click chuột vào icon chỉ xuống trong listbox "Choose data source" ₫ể hiển thị cửa sổ hỗ trợ. Click chuột vào mục "Add Project Data Source", ₫ể hiển thị cửa sổ "Choose a Data Source type". chọn icon Database rồi click button Next ₫ể hiển thị cửa sổ "Choose Your Database Connection". Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 20
  11. 12.5 Thí dụ về databinding mà không viết code 6. Click button New Connection ₫ể hiển thị cửa sổ "Add Connection", xác ₫ịnh Provider truy xuất database, thí dụ như Provider "Microsoft Access Database File (OLE DB)" ₫ể truy xuất file Access, provider "Microsoft SQL Server" ₫ể truy xuất database do SQL Server quản lý 7. Xác ₫ịnh database cần truy xuất trong "Database file name" rồi click button OK ₫ể quay về cửa sổ trước. Click buttonNext ₫ể hiển thị cửa sổ "Choose Your Database Object". 8. Mở rộng mục Tables ₫ể hiển thị ₫ầy ₫ủ các tên bảng dữ liệu có trong database, duyệt tìm và ₫ánh dấu chọn vào bảng Customers rồi click button Finish ₫ể hoàn tất việc khai báo trực quan. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 21 12.5 Thí dụ về databinding mà không viết code 9. Bây giờ chương trình ₫ã ₫ược viết xong. hãy chọn menu Debug.Start Debugging ₫ể dịch và chạy ứng dụng. Cửa sổứng dụng sẽ hiển thị ₫ối tượng DataGridView, ₫ối tượng này hiển thị ₫ầy ₫ủ danh sách thông tin các khách hàng trong bảng Customers, người dùng có thể "scroll" lên/xuống hay trái/phải ₫ể xem thông tin thích hợp. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 22
  12. 12.6 Thí dụ về databinding có viết code khởi tạo ‰ Trong bộ Microsoft Office, Microsoft có cung cấp 1 database Access có tên là NorthWind.mdb, database này chứa thông tin quản lý của 1 siêu thị ₫iện tửảo, gồm nhiều bảng dữ liệu và mối quan hệ giữa chúng : ƒ Customers : là bảng dữ liệu miêu tả các khách hàng của siêu thị, mỗi khác hàng có các field thông tin như CustomerID, CustomerName, ƒ Orders : là bảng dữ liệu miêu tả các ₫ơn ₫ặt hàng của các khách hàng, mỗi ₫ơn ₫ặt hàng có các field thông tin như CustomerID, OrderID, ƒ OrderDetails : là bảng dữ liệu miêu tả nội dung chi tiết của từng ₫ơn ₫ặt hàng, có các field thông tin như OrderID, ProductID, Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 23 12.6 Thí dụ về databinding có viết code khởi tạo ‰ Chúng ta hãy viết chương trình cho phép người dùng xem thông tin mua hàng của các khách hàng, mỗi thời ₫iểm xem chi tiết 1 khách hàng cần khảo sát, người dùng có thể dời tới/dời lui ₫ể xem thông tin khách hàng kế cận, người dùng có thể chọn ngẫu nhiên 1 khách hàng ₫ể xem thông tin. Thông tin chi tiết về khách hàng gồm tên, ₫ịa chỉ liên hệ, số phone, số fax, danh sách các ₫ơn ₫ặt hàng ₫ã ₫ặt, nội dung chi tiết của từng ₫ơn ₫ặt hàng. ‰ Sau khi phân tích kỹ yêu cầu của chương trình trên, ta thiết kế ₫ược nội dung chi tiết của form giao diện của chương trình như sau : Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 24
  13. 12.6 Thí dụ về databinding có viết code khởi tạo Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 25 12.6 Thí dụ về databinding có viết code khởi tạo ‰ Vai trò cụ thể của các ₫ối tượng giao diện như sau : ƒ 2 Button : cho phép người dùng tiến tới/lùi 1 khách hàng. ƒ ComboBox : hiển thị tên khách hàng ₫ang chọn khảo sát, nó còn cho phép người dùng chọn ngẫu nhiên 1 khác hàng khác nếu muốn. ƒ 3 textbox : hiển thị các thông tin về khác hàng như ₫ịa chỉ liên hệ, số phone, số fax. ƒ 1 DataGridView : hiển thị danh sách chi tiết về các ₫ơn hàng của khách hàng ₫ang quan tâm. ƒ 1 DataGridView : hiển thị danh sách chi tiết về các mặt hàng của ₫ơn hàng ₫ang quan tâm. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 26
  14. Xây dựng ứng dụng databinding bằng VC# 1. Chạy VS .Net, chọn menu File.New.Project ₫ể hiển thị cửa sổ New Project. 2. Mở rộng mục Visual C# trong TreeView "Project Types", chọn mục Windows, chọn icon "Windows Application" trong listbox "Templates" bên phải, thiết lập thư mục chứa Project trong listbox "Location", nhập tên Project vào textbox "Name:" (td. DBAccess), click button OK ₫ể tạo Project theo các thông số ₫ã khai báo. 3. Form ₫ầu tiên của ứng dụng ₫ã hiển thị trong cửa sổ thiết kế, việc thiết kế form là quá trình lặp 4 thao tác tạo mới/xóa/hiệu chỉnh thuộc tính/tạo hàm xử lý sự kiện cho từng ₫ối tượng cần dùng trong form. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 27 Xây dựng ứng dụng databinding bằng VC# 4. Nếu cửa sổ ToolBox chưa hiển thị, chọn menu View.Toolbox ₫ể hiển thị nó (thường nằm ở bên trái màn hình). Thay ₫ổi kích thước của form lớn ra theo yêu cầu. 5. Duyệt tìm phần tử Button (trong nhóm Common Controls), chọn nó, dời chuột về vị trí thích hợp trong form và vẽ nó với kích thước mong muốn. Hiệu chỉnh thuộc tính Text = "Tới" và thuộc tính (Name) = btnToi. 6. Lặp lại bước 5 ₫ể vẽ Button thứ 2 với thuộc tính Text = "Lùi" và thuộc tính (Name) = btnLui. 7. Duyệt tìm phần tử Label (trong nhóm Common Controls), chọn nó, dời chuột về vị trí thích hợp trong form và vẽ nó với kích thước mong muốn. Hiệu chỉnh thuộc tính Text = "Tên khách hàng :". 8. Lặp lại bước 7 ₫ể vẽ 3 Label còn lại với thuộc tính Text tuần tự là "Địa chỉ liên hệ :", "Số Phone : ", "Số Fax :" Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 28
  15. Xây dựng ứng dụng databinding bằng VC# 9. Duyệt tìm phần tử ComboBox (trong nhóm Common Controls), chọn nó, dời chuột về bên phải Label "Tên khách hàng :" và vẽ nó với kích thước mong muốn. Hiệu chỉnh thuộc tính (Name) = cbCust. 10. Duyệt tìm phần tử TextBox (trong nhóm Common Controls), chọn nó, dời chuột về vị trí bên phải Label "Địa chỉ liên hệ :" và vẽ nó với kích thước mong muốn. Hiệu chỉnh thuộc tính (Name)= txtContact. 11. Lặp lại bước 10 ₫ể vẽ 2 TextBox còn lại với thuộc tính (Name) tuần tự là txtPhoneNo, txtFaxNo. 12. Duyệt tìm phần tử GroupBox (trong nhóm Common Controls), chọn nó, dời chuột về vị trí ngay dưới Label "Số Fax :" và vẽ nó với kích thước mong muốn. Hiệu chỉnh thuộc tính Text = "Danh sách các ₫ơn ₫ặt hàng của khách hàng ₫ang ₫ược chọn :". Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 29 Xây dựng ứng dụng databinding bằng VC# 13. Duyệt tìm phần tử DataGridView (trong nhóm Data), chọn nó, dời chuột vào trong GroupBox vừa vẽ và vẽ nó với kích thước mong muốn. Hiệu chỉnh thuộc tính (Name)= grdOrders. 14. Lặp lại bước 12 và 13 ₫ể vẽ GroupBox có thuộc tính Text = "Chi tiết của ₫ơn ₫ặt hàng ₫ang ₫ược chọn :" và DataGridView bên trong có thuộc tính (Name) = grdOrderDetails. 15. Tạo hàm xử lý sự kiện cho 2 button btnToi và btnLui rồi viết code cho chúng như sau : //hàm xử lý Click chuột trên button "Tới" private void btnToi_Click(object sender, EventArgs e) { CurrencyManager cm = (CurrencyManager)this.BindingContext[ dsView, "Customers"]; //nếu không phải khách hàng cuối thì tiến tới 1 khách hàng if (cm.Position < cm.Count - 1) cm.Position++; } Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 30
  16. Xây dựng ứng dụng databinding bằng VC# //hàm xử lý Click chuột trên button"Lùi" private void btnLui_Click(object sender, EventArgs e) { //nếu không phải khách hàng ₫ầu tiên thì lùi 1 khách hàng if (this.BindingContext[dsView, "Customers"].Position > 0) this.BindingContext[dsView, "Customers"].Position ; } 16. Thêm lệnh using sau vào ₫ầu file ₫ặc tả class Form : using System.Data.OleDb; 17. Thêm các lệnh ₫ịnh nghĩa các thuộc tính dữ liệu cần dùng sau ₫ây vào ở vị trí ₫ầu class ₫ặc tả Form : //₫ịnh nghĩa các thuộc tính dữ liệu cần dùng private String ConnectionString; private DataViewManager dsView; private DataSet ds; private OleDbConnection cn; Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 31 Xây dựng ứng dụng databinding bằng VC# 18. Hiệu chỉnh lại hàm constructor của Form ₫ể có nội dung như sau: public Form1() { InitializeComponent(); //xây dựng chuỗi ₫ặc tả database cần truy xuất ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\\NorthWind.mdb;"; //tạo ₫ối tượng Connection ₫ến database cn = new OleDbConnection(ConnectionString); //tạo ₫ối tượng DataSet ds = new DataSet("CustOrders"); //tạo ₫ối tượng DataApdater quản lý danh sách các khách hàng OleDbDataAdapter da1 = new OleDbDataAdapter ("SELECT * FROM Customers", cn); Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 32
  17. Xây dựng ứng dụng databinding bằng VC# //ánh xạ Tablename "Table" tới bảng dữ liệu "Customers" da1.TableMappings.Add("Table","Customers"); //chứa bảng Customers vào Dataset da1.Fill(ds); //tạo ₫ối tượng DataApdater quản lý danh sách các ₫ơn ₫ặt hàng OleDbDataAdapter da2 = new OleDbDataAdapter ("SELECT * FROM Orders", cn); //ánh xạ Tablename "Table" tới bảng dữ liệu "Orders" da2.TableMappings.Add("Table","Orders"); // chứa bảng Orders vào Dataset da2.Fill(ds); //tạo ₫ối tượng DataApdater quản lý danh sách các mặt hàng OleDbDataAdapter da3 = new OleDbDataAdapter ("SELECT * FROM [Order Details]", cn); Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 33 Xây dựng ứng dụng databinding bằng VC# //ánh xạ Tablename "Table" tới bảng dữ liệu "Orders" da3.TableMappings.Add("Table","OrderDetails"); // chứa bảng [Orders Details] vào Dataset da3.Fill(ds); //thiết lập quan hệ "RelCustOrd" giữa bảng Customers và Orders System.Data.DataRelation relCustOrd; System.Data.DataColumn colMaster1; System.Data.DataColumn colDetail1; colMaster1 = ds.Tables["Customers"].Columns["CustomerID"]; colDetail1 = ds.Tables["Orders"].Columns["CustomerID"]; relCustOrd = new System.Data.DataRelation ("RelCustOrd",colMaster1,colDetail1); //"add" quan hệ vừa tạo vào dataSet ds.Relations.Add(relCustOrd); Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 34
  18. Xây dựng ứng dụng databinding bằng VC# //thiết lập quan hệ "relOrdDet" giữa bảng Orders & [Order Details] System.Data.DataRelation relOrdDet; System.Data.DataColumn colMaster2; System.Data.DataColumn colDetail2; colMaster2 = ds.Tables["Orders"].Columns["OrderID"]; colDetail2 = ds.Tables["OrderDetails"].Columns["OrderID"]; relOrdDet = new DataRelation("RelOrdDet",colMaster2,colDetail2); //"add" quan hệ vừa tạo vào dataSet ds.Relations.Add(relOrdDet); //Xác ₫ịnh DataViewManager của DataSet. dsView = ds.DefaultViewManager; //thiết lập Databinding giữa database với 2 DataGridView grdOrders.DataSource = dsView; grdOrders.DataMember = "Customers.RelCustOrd"; Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 35 Xây dựng ứng dụng databinding bằng VC# grdOrderDetails.DataSource = dsView; grdOrderDetails.DataMember = "Customers.RelCustOrd.RelOrdDet"; //thiết lập Databinding giữa database với ComboBox cbCust.DataSource = dsView; cbCust.DisplayMember = "Customers.CompanyName"; cbCust.ValueMember = "Customers.CustomerID"; //thiết lập Databinding giữa database với 3 Textbox txtContact.DataBindings.Add("Text",dsView,"Customers.ContactName"); txtPhoneNo.DataBindings.Add("Text",dsView,"Customers.Phone"); txtFaxNo.DataBindings.Add("Text",dsView,"Customers.Fax"); } Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 36
  19. Xây dựng ứng dụng databinding bằng VC# 19. Chọn menu Debug.Start Debugging ₫ể dịch và chạy ứng dụng. Lúc ₫ầu, form sẽ hiển thị thông tin về khách hàng ₫ầu tiên trong bảng, khi bạn click vào button "Tới" hay "Lùi", thông tin khách hàng tương ứng sẽ tự ₫ược hiển thị. Bạn cũng có thể chọn 1 khách hàng tùy ý trong ComboBox "Tên khách hàng :" ₫ể chương trình tự hiển thị thông tin chi tiết về khách hàng ₫ó. 20. Tóm lại Databinding trong VC# giúp ta giảm nhẹ rất nhiều công sức viết chương trình truy xuất database : chúng ta chỉ viết ₫oạn code thiết lập databinding giữa các ₫ối tượng giao diện với dữ liệu tương ứng trong database chứ chúng ta không cần viết ₫oạn code cập nhật nội dung của các phần tử giao diện theo sự biến ₫ộng của database, chúng ta cũng không cần viết code cập nhật database theo nội dung mà người dùng thay ₫ổi trên các ₫ối tượng giao diện. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 37 12.7 Kết chương ‰ Chương này ₫ã giới thiệu cách thức dùng các ₫ối tượng trong thư viện ADO .Net ₫ể truy xuất database dễ dàng, tin cậy. ‰ Chương này cũng ₫ã giới thiệu cách thức dùng khả năng databinding của các ₫ối tượng giao diện trong môi trường VS .Net ₫ể xây dựng chương trình truy xuất database ₫ược dễ dàng, nhanh chóng, tin cậy, và nhiều trường hợp không cần viết code cho chương trình. Khoa Khoa học & Kỹ thuật Máy tính Môn : Lập trình hướng ₫ối tượng Trường ĐH Bách Khoa Tp.HCM Chương 12 : Truy xuất database trong chương trình VC# © 2010 Slide 38