9/16/2019
Lập trình Ứng dụng quản lý
C#.NET
ADO.NET
Nội dung
Tổng quan ADO.NET
Các mơ hình kết nối
Ứng dụng có kết nối Database
Mẫu thiết kế Factory trong ADO.NET
1
9/16/2019
Nội dung
Tổng quan ADO.NET
Các mơ hình kết nối
Ứng dụng có kết nối Database
Mẫu thiết kế Factory trong ADO.NET
Tổng quan ADO.NET
Các hệ quản trị CSDL thông dụng
FoxPro
MS Access
SQL Server
Oracle
DB2
MySQL
…
2
9/16/2019
Lịch sử phát triển
Lịch sử phát triển phương pháp kết nối thống
nhất
ODBC (Open Database Connectivity): là các giao
diện đặc tả phương thức thống nhất mà các nhà
phát triển hệ CSDL phải hiện thực bằng ngôn ngữ
C/C++.
OLEDB (Object Linking and Embeding Database):
cải tiến hơn ODBC, liên kết tốt hơn với thư viện
nguyên gốc (native) của hệ CSDL. Đóng gói cả
ODBC.
ADO (ActiveX Data Object): cải tiến thêm, dễ dàng
cho người phát triển ứng dụng.
ADO.NET: là thay thế ADO (khác hồn tồn ADO)
tương thích nền .NET.
Mơ hình tổng quát
3
9/16/2019
Khái niệm
ADO.NET là một tập các lớp thư viện được sử
dụng để truy xuất dữ liệu
Thêm/xóa/sửa dữ liệu
Đọc dữ liệu
Chương trình
CSDL, XML…
Nằm trong bộ thư viện các lớp cơ sở của .Net
Framework
ADO.NET là thành phần nội tại của .Net
Framework có thể sử dụng trong các ngơn
ngữ hỗ trợ .Net (C#, VB.Net, ...)
ASP.NET
Windows Forms
Class Framework
Drawing
XML
Data
ADO.NET
Comman language Runtime
System Services
Các lớp ADO.Net đặt trong System.Data
Chức năng và cách sử dụng hoàn toàn giống
nhau.
4
9/16/2019
Lợi ích
ADO kết nối CSDL tốt, nhưng
Địi hỏi kết nối chuẩn COM và Windows
Xử lý kết nối CSDL qua Internet khó khăn và khơng
tốt.
ADO.Net
Tích hợp chặt chẽ với XML
Làm việc tốt trên môi trường Internet.
ADO.Net là sự cải tiến của ADO
Khác biệt nhau ở mơ hình (COM vs XML)
Giống nhau về các chức năng.
Kiến trúc
5
9/16/2019
Cây phân cấp các đối tượng trong ADO.NET
Các thành phần cơ bản
Connection: Là đối tượng có nhiệm vụ thực hiện
nhiệm vụ kết nối đến CSDL
Command: Dùng để thực hiện các câu lệnh SQL
thao tác với CSDL như: Insert, Update, Select,
Delete
DataReader: Dùng để đón nhận kết quả trả về từ
đối tượng Command
DataAdapter: Có chức năng như một cầu nối
giữa nguồn (tệp) dữ liệu và các bảng được
cached trong bộ nhớ
6
9/16/2019
.NET Data Provider
.NET Data Provider
XXXConnection
XXXCommand
XXXDataReader
Data Source
DataSet
XXXDataAdapter
(CSDL)
XXXParameter
XXXTransaction
Các Data Provider cơ bản
System.Data.OleDb: Access, SQL Server, Oracle
System.Data.SqlClient: SQL Server
System.Data.OracleClient: Oracle
Ghi chú:
Về mặt giao tiếp lập trình ứng dụng, cả 3 thư viện
trên không khác biệt nhau nhiều lắm.
Dùng thư viện System.Data.SqlClient sẽ truy xuất
SQL Server nhanh hơn System.Data.OleDb
Dùng thư viện System.Data.OracleClient sẽ truy
xuất Oracle nhanh hơn System.Data.OleDb
7
9/16/2019
Thành phần giữ dữ liệu
DataTable là một đối tượng có thể chứa một
bảng trong database trên bộ nhớ.
DataSet là một đối tượng có thể chứa nhiều
DataTable cùng với mối liên hệ giữa chúng
(relationship) và kể các ràng buộc (constraint)
được lưu hoàn toàn trong bộ nhớ để làm việc
offline. Như vậy DataSet được dùng để nắm giữ
dữ liệu của mọi database và cho phép thay đổi
dữ liệu bên trong nó, sau đó cập nhật lại cho
database.
Mối quan hệ
8
9/16/2019
Các property quan trọng
DataSet
Tables: chứa các DataTable.
Relations: chứa các DataRelation.
DataTable
Columns: chứa các DataColumn.
Rows: chứa các DataRow.
Constraints: chứa các Constraint.
DataView
DataView: dùng để trình bày dữ liệu có trong đối
tượng DataTable dưới hình thức sắp xếp, lọc, tìm
kiếm, hiệu chỉnh và điều hướng.
AllowDelete, AllowEdit, AllowNew: các thuộc tính
để cho phép tương tác với dữ liệu hiển thị của
DataView.
Count: trả về số lượng mẩu tin đang truy vấn.
RowFilter: thuộc tính này cho phép lọc dữ liệu
trong DataView tương tự mệnh đề WHERE trong
câu lệnh SQL.
Sort: thuộc tính cho phép sắp xếp các mẩu tin theo
điều kiện.
9
9/16/2019
Thành phần con
DataColumn: là phần tử cơ bản tạo nên
DataTable
ColumnName: tên của column.
DataType: kiểu dữ liệu trong column.
AllowDBNull: cho phép dữ liệu null hay không.
DefaultValue: dữ liệu mặc định.
Unique: ràng buộc dữ liệu duy nhất.
DataRow: là đối tượng nắm giữ dữ liệu cho
DataTable.
DataRowView: là đối tượng nắm giữ dữ liệu của
DataView.
Nội dung
Tổng quan ADO.NET
Các mơ hình kết nối
Ứng dụng có kết nối Database
Mẫu thiết kế Factory trong ADO.NET
10
9/16/2019
Mơ hình kết nối
Connected Model
Command
Connection
Chương trình
DataReader
Connection
Connection: Kết nối vào CSDL
Các lớp phụ trách kết nối
ODBCConnection
OleDBConnection
SqlConnection
OracleConnection
Thuộc tính quan trọng
ConnectionString: xác định nguồn dữ liệu cần kết nối
Phương thức quan trọng
Open: mở kết nối
Close: đóng kết nối
11
9/16/2019
Connection String
Microsoft SQL Server Connection String
connetionString="Data Source=ServerName;Initial Catalog=Databasename;
User ID=UserName;Password=Password"
OLEDB Data Provider Connection String
connetionString="Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=yourdatabasename.mdb;"
ODBC Connection String
connetionString="Driver={Microsoft Access Driver (*.mdb)};
DBQ=yourdatabasename.mdb;"
Command
Command: Thực hiện lệnh
Các lớp phụ trách
ODBCCommand
OleDBCommand
SqlCommand
OracleCommand
Thuộc tính quan trọng
Connection: xác định CSDL sẽ thực hiện thao tác
CommandText: xác định thao tác cần thực hiện
Parameters: xác định các tham số lệnh
Phương thức quan trọng
ExecuteReader: phù hợp lệnh Select trả ra 1 bảng dữ liệu
ExecuteScalar: phù hợp lệnh Select trả ra 1 giá trị
ExecuteNonQuery: phù hợp lệnh Insert, Delete, Update
12
9/16/2019
Reader
Reader: Thực hiện lệnh
Đọc dữ liệu từ CSDL
Dùng lệnh ExecuteReader hoặc
ExecuteScalar
Lớp XXXDataReader
Read
GetXXX
IsDBNull
Dữ liệu chỉ
đọc theo
chiều tiến
(Readonly)
Book BookNam Author
ID e
1
Book 1
Author
1
2
Book 2
Author
2
3
Book3
Author
3
Mơ hình ngắt kết nối
Disconnected Model
DataAdapter
Chương trình
13
9/16/2019
Thành phần
DataAdapter
SelectCommand
DataSet
InsertCommand
UpdateCommand
Data Source
DeleteCommand
Fill: dùng SelectCommand lấy dữ liệu từ Data
Source đổ vào DataSet.
Update: dùng InsertCommand, UpdateCommand
và DeleteCommand cập nhật dữ liệu trong DataSet
vào Data Source.
Nội dung
Tổng quan ADO.NET
Các mơ hình kết nối
Ứng dụng có kết nối Database
Mẫu thiết kế Factory trong ADO.NET
14
9/16/2019
Ứng dụng kết nối Database
Cấu hình chương trình
Mỗi chương trình khi chạy đa phần cần có những
tham số ràng buộc tùy theo ngữ cảnh, liên hệ bên
ngồi. Ví dụ: cách thức hiển thị, cách kết nối
database,…
Làm sao để thay đổi các tham số kể trên mà không
phải biên dịch lại chương trình.
Giải pháp ở đây là sử dụng Configuration của .NET.
Ứng dụng kết nối Database (tt)
Cấu hình chương trình
System.Configuration là namespace cung cấp các
mơ hình lập trình để xử lý các dữ liệu về cấu hình
(config).
Với chương trình Application.NET thì dữ liệu cấu
hình sẽ lưu trong file App.config.
Với chương trình ASP.NET thì dữ liệu cấu hình lưu
trong fiel Web.config.
Cách dùng Application config: Yêu cầu bắt buộc
đầu tiên phải add reference thư viện
System.Configuration
15
9/16/2019
Ứng dụng kết nối Database (tt)
Sau đó add file config vào project.
Thêm nội dung vào file config
Ứng dụng kết nối Database (tt)
ConfigurationManager
Thuộc namespace System.Configuration
Hỗ trợ xử lý dữ liệu trong file cấu hình.
Cần quan tâm 2 thuộc tính quan trọng là:
AppSettings và ConnectionStrings.
Ví dụ để lấy chuỗi connection string từ file config
trên
16
9/16/2019
Ứng dụng kết nối Database (tt)
DataGridView
Là đối tượng dùng để trình bày dữ liệu có trong
DataSet, DataTable, DataView dưới hình thức khác
nhau.
Có thể tùy biến các column để thêm các control
như: Button, TextBox, ComboBox, CheckBox,
Image, Link.
Ứng dụng kết nối Database (tt)
Các property:
DataSource: để gắn kết nguồn dữ liệu mà
DataGridView sẽ trình bày.
CurrentRow: để lấy ra mẩu tin đang được chọn.
CurrentCell: để lấy ra ô được chọn.
DefaultCellStyle: để định dạng hiển thị cho ô.
Columns: chứa các DataGridViewColumn (có các lớp
dẫn xuất tương ứng)
DataGridViewTextBoxColumn: column dạng TextBox.
DataGridViewCheckBoxColumn: column dạng CheckBox.
DataGridViewComboBoxColumn: column dạng ComboBox.
…
Các event:
SelectionChanged
DoubleClick
17
9/16/2019
Nội dung
Tổng quan ADO.NET
Các mơ hình kết nối
Ứng dụng có kết nối Database
Mẫu thiết kế Factory trong ADO.NET
Mẫu thiết kế Factory trong ADO.NET
ADO.NET xây dựng một nền tảng độc lập với Hệ
quản trị cơ sở dữ liệu nên các phương pháp kết
nối và truy vấn database là tương đồng với mọi
dạng database (Oracle, SQL, Access, MySQL,…)
Ví dụ:
Đối tượng Connection đảm nhận việc mở và đóng
kết nối với các phương thức: Open, Close,…
Đối tượng Command đảm nhận việc thực thi lệnh
với các phương thức: ExecuteReader,
ExecuteNonQuery, ExecuteScalar,…
18
9/16/2019
Mẫu thiết kế Factory trong ADO.NET (tt)
Tuy nhiên với mỗi Hệ quản trị CSDL khác nhau
thì có cách thức kết nối và truy vấn riêng biệt
(driver) nên các lớp đối tượng kể trên là khác
nhau.
Ví dụ:
Với SQL: SqlConnection, SqlCommand,…
Với Access: OleDbConnection,
OleDbCommand,…
Vậy làm cách nào để có thể cài đặt thật sự độc
lập với Hệ quản trọ CSDL ???
Mẫu thiết kế Factory trong ADO.NET (tt)
Abstract Factory Design Pattern
19
9/16/2019
Mẫu thiết kế Factory trong ADO.NET (tt)
Ví dụ
Mẫu thiết kế Factory trong ADO.NET (tt)
Microsoft.NET đã hiện thực mẫu thiết kế Factory
trong ADO.NET để giải quyết vấn đề “độc lập” với
các Hệ quản trị CSDL.
Các thành phần quan trọng
Các lớp đối tượng Dbxxx trong namespace
System.Data.Common
Lớp đối tượng abstract DbProviderFactory thường
được tạo cụ thể từ phương thức tĩnh GetFactory
của DbProviderFactories.
20
9/16/2019
Mẫu thiết kế Factory trong ADO.NET (tt)
Bài tập
Xây dựng ứng dụng cho phép kết nối với
database QLHS [các chức năng: lấy danh sách
Lớp học, cho phép lựa chọn và hiển thị danh
sách Học sinh của lớp được chọn] với yêu cầu
cho phép người dung thay đổi server database.
21