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

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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 4  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 6  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 8  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 10  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 12  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 14  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 16  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 18  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 20  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 22  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 24  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 26  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 28  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 30  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 32  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 34  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 36  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
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  
Trường ĐH Bách Khoa Tp.HCM  
© 2010  
Môn : Lập trình hướng ₫ối tượng  
Chương 12 : Truy xuất database trong chương trình VC#  
Slide 38  
pdf 19 trang myanh 20180 Free
Bạn đang xem tài liệu "Bài giảng 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 hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_chuong_12_truy_xuat_data.pdf