Các kỹ thuật triển khai ß Sử dụng các kỹ thuật gắn kết dữ liệu để kết nối tập dữ liệu ADO.NET trực tiếp đến các control ß Viết lệnh truy xuất các đối tượng ADO.NET và gắn kết dữ liệu t
Trang 2NỘI DUNG
III Lưu trữ và xử lý dữ liệu
hàng
Trang 4I.1- Kiến trúc n-tier
a/- 2-tier
dụng ADO/ADO.NET truy xuất trực tiếp CSDL
dụng vừa và nhỏ, không
có quá nhiều form
Trang 5I.1- Kiến trúc n-tier
a/- 2-tier (tt)
1 Các kỹ thuật triển khai
ß Sử dụng các kỹ thuật gắn kết dữ liệu để kết nối tập
dữ liệu ADO.NET trực tiếp đến các control
ß Viết lệnh truy xuất các đối tượng ADO.NET và gắn
kết dữ liệu thủ công đến các control
2 Ưu điểm
ß Triển khai nhanh chóng và dễ dàng
ß Quan sát toàn bộ mã lệnh trong form
3 Khuyết điểm
ß Thay đổi quy trình công việc Î biên dịch lại
ß Thay đổi lược đồ dữ liệu Î biên dịch lại
ß Ít khả năng tận dụng được các lệnh xử lý giống
nhau giữa các form do tên field, tên table khác nhau
Trang 6I.1- Kiến trúc n-tier
b/- 3-tier
Web/Windows service nhằm táchbiệt công việc truyxuất CSDL
ứng dụng lớn có sốlượng form nhiều
và xử lý dữ liệu
Trang 7I.1- Kiến trúc n-tier
b/- 3-tier (tt)
1 Các kỹ thuật triển khai
ß Tất cả thao tác dữ liệu đều ở XML Web Service Các tập dữ liệu
đều được tạo dựng trên server và trả về thông qua XML stream
ß Các tập dữ liệu được trả về từ XML Web Service có thể được gắn
kết vào các control một cách trực tiếp hoặc thủ công
2 Ưu điểm
ß Triển khai nhanh chóng và dễ dàng
ß Người dùng có thể sử dụng ứng dụng tại bất kỳ nơi nào có kết nối
ß Lược đồ CSDL được xây dựng cố định Î chi phí cập nhật cao
ß Hiệu suất thực hiện kém do phụ thuộc kết nối mạng
Trang 8I.2.- Mô hình thiết kế ứng dụng:
a/- WaterFall ModelKhảo sát
Trang 9Cải tiến
Trang 10I.2.- Mô hình thiết kế ứng dụng (tt)
c/- Spiral Model
Yêu cầu và cài đặt
Ước lượng và giảm thiểu rủi ro
Phát triển và
Tính khả thi
Hiểu rõ yêu cầu
Thiết kế
đúng đắn
Trang 12
II.- ADO.NET
Trang 13SQL Native Oracle Native Native Library
Access
Kiến trúc ODBC.
Trang 14II.- ADO.NET
2.- Các đối tượng của ADO.NET (tt)
APPLICATION
OLEDB
SQL Native Oracle Native Native Library
SQL Server Oracle Fox / Access
ODBC
Trang 15SQL Native Oracle Native Native Library
Access
Kiến trúc ADO.NET.
ODBC SQL/Oracle Provider OLEDB Provider ODBC Provider
Trang 16II.- ADO.NET
2.- Các đối tượng của ADO.NET (tt)
1 A ctive D ata O bject NET
2 ADO.NET có thể kết nối và thao tác trên các
hệ quản trị CSDL như SQL server, MySQL,
MS Access, Oracle,
3 Tối ưu cho các ứng dụng Internet và phân tán.
4 ADO.NET được thiết kế nhằm tăng tốc độ truy
cập và thao tác dữ liệu trong môi trường đa lớp.
5. Hai thành phần chính của ADO.NET là:
ß Thành phần kết nối (.NET Framework Data Providers)
Trang 17II.- ADO.NET
2.- Các đối tượng của ADO.NET (tt)
Trang 18II.- ADO.NET
2.- Các đối tượng của ADO.NET (tt)
.NET framework Data Provider
Transaction
UpdateCommand DeleteCommand
XML
Trang 19II.- ADO.NET
2.- Các đối tượng của ADO.NET (tt)
1 ADO.NET chỉ cung cấp một đặc tả giao tiếp cho các
đối tượng như Connection, Command, DataReader, DataAdapter
2 Các hệ quản trị CSDL sẽ được xây dựng riêng các
trình điều khiển gọi là Provider
SQL Server NET Data OLE DB NET Data
System.Data.SqlClient System.Data.OleDb SqlCommand
SqlConnection SqlDataAdapter SqlDataReader SqlParameter
OleDbCommand OleDbConnection OleDbDataAdapter OleDbDataReader OleDbParameter
Trang 20OleDBDataAdapte r
DataSet DataTableCollection
Trang 21II.- ADO.NET
2.- Các đối tượng của ADO.NET (tt)
a/- Đối tượng Connection
Phương thức
SqlConnection OleDbConnection
Open() Cho phép mở kết nối CSDL với các thuộc tính khai báo
trong ConnectionString Close() Cho phép đóng kết nối CSDL đang mở
CreateCommand() Phương thức này cho phép gán hay trảvề một đối tượng
SqlCommand / OleDbCommand ứng với đối tượng SqlConnection/ OleDbConnection
Dispose() Dùng để giải phóng tài nguyên mà đối tượng
SqlConnection đang sử dụng
Trang 22II.- ADO.NET
2.- Các đối tượng của ADO.NET
a/- Đối tượng Connection(tt)
1 ConnectionString: chuỗi chỉ định kết nối
2 Mỗi Provider có riêng một định dạng chuỗi kết nối
Trang 23II.- ADO.NET
2.- Các đối tượng của ADO.NET
a/- Đối tượng Connection (tt)
1 Kết nối CSDL với SQLConnection
ß String connStr = “server=(local);Init Catalog=qlsv;Integrated
Security=True;”;
ß SqlConnection dbConn = new SqlConnection(connStr);
2 Kết nối CSDL với OleDbConnection
ß String connStr = “Provider=SQLOLEDB;Data Source=(local);Init
Trang 24II.- ADO.NET
2.- Các đối tượng của ADO.NET (tt)
b/- Đối tượng Command
2.b.1.- Đối tượng Command cho phép thi hành các câu
lệnh truy vấn SQL, gọi thủ tục nội của SQL Server,
Connection Mỗi đối tượng SqlCommand được sử dụng
phải kèm theo đối tượng SqlConnection
CommandText Tên bảng, lệnh Sql hoặc tên Storeprocedure
muốn thực hiện trên nguồn dữ liệu
CommandType Tương ứng với giá trị CommandText Gồm
Text, TableDirect, StoredProcedure
CommandTimeout Khai báo thời gian chờ cho câu lệnh thực hiện
(thời gian thực hiện mặc định là 30 giây)
Trang 25II.- ADO.NET
2.- Các đối tượng của ADO.NET
b/- Đối tượng Command (tt)
ExcuteNonQuery() Phương thức dùng để gọi thực thi các câu lệnh SQL,
thủ tục nội tại của Sql Server, tên bảng dữ liệu.
Kết quả trả về là số mẫu tin chịu tác động của Command
ExcuteReader() Phương thức này trả về một đối tượng DataReader
chỉ đọc một chiều DataReader đọc dữ liệu trực tiếp
từ nguồn dữ liệu nên phải duy trì kết nối cho đến khi đọc xong.
ExcuteScalar() Phương thức này thực hiện lệnh của Command và
trả về giá trị của cột đầu tiên và dòng đầu tiên Phương thức này thường được sử dụng khi muốn Command thực hiện các hàm tính thống kê như : SUM, COUNT, AVG, MAX, MIN… trên nguồn dữ liệu ngay lúc thực thi.
Trang 26II.- ADO.NET
2.- Các đối tượng của ADO.NET
b/- Đối tượng Command (tt)
2.b.2.- Tạo lệnh truy xuất dữ liệu
ß String sql = “SELECT * FROM SINHVIEN ”;
ß String sql = “vMonHoc”;
ß String sql = “sp_KetQuaSV”;
ß String sql = “INSERT INTO KETQUA VALUES(‘A01’,’K1’,9)”;
2.b.3.- Truy xuất CSDL với SqlCommand
ß SqlCommand dbCmd = new SqlCommand(sql, dbConn);
2.b.4.- Truy xuất CSDL với OleDbCommand
ß OleDbCommand dbCmd = new OleDbCommand(sql, dbConn);
2.b.5.- Thực hiện
ß dbCmd.CommandType = CommandType.XXX;
Trang 27II.- ADO.NET
2.- Các đối tượng của ADO.NET
b/- Đối tượng Command (tt)
2.b.6.- Thực hiện và nhận kết quả vô hướng
z OleDbCommand dbCmd = new OleDbCommand(“select count(*)
from MonHoc”, dbConn);
z dbCmd.CommandType = CommandType.Text;
z int SLMonHoc = dbCmd.ExecuteScalar();
z SqlCommand dbCmd = new SqlCommand(“select count(*) from
MonHoc”, dbConn);
z dbCmd.CommandType = CommandType.Text;
z int SLMonHoc = dbCmd.ExecuteScalar();
Trang 28II.- ADO.NET
2.- Các đối tượng của ADO.NET
b/- Đối tượng Command (tt)
z Parameter dùng để truyền tham số cho chuỗi
lệnh Sql trong thuộc tính CommandText có thể
sử dụng dấu ? thay thế cho các giá trị chưa xác định, hay thủ tục nội của Sql có thể cần phải truyền các tham số đầu vào/ đầu ra.
z Cơ chế Parameter giúp cho việc truyền tải
thông tin giữa ứng dụng và server mang tính bảo mật và an toàn hơn cách thức nối chuỗi SQL thông thường
Trang 29II.- ADO.NET
2.- Các đối tượng của ADO.NET
b/- Đối tượng Command (tt)
Thuộc tính của
Parameters
Mô tả
Direction Giá trị cho biết loại tham số với các giá trị sau:
+ Input (mặc định): loại tham số đầu vào +Output: loại tham số đầu ra
+InputOutput: loại tham số vào/ra +ReturnValue: loại tham số nhận giá trị trả về của một thủ tục nội, một hàm, hàm do người dùng định nghĩa.
Trang 30II.- ADO.NET
2.- Các đối tượng của ADO.NET
b/- Đối tượng Command (tt)
Để đưa tham số cho Command, chúng
ta có thể sử dụng một trong các cách sau:
1 Dùng phương thức CreateParameter
của Command và Add của tập hợp
Parameters
2 Đưa tham số vào tập hợp Parameters
3 Tạo tham số và đưa vào tập hợp
Parameters
Trang 31II.- ADO.NET
2.- Các đối tượng của ADO.NET
b/- Đối tượng Command (tt)
a/- Tạo Stored Procedure
CREATE PROCEDURE sp_KetQuaSV
kq.MaKH=k.MaKH AND k.MaMH=mh.MaMH
END
Trang 32II.- ADO.NET
2.- Các đối tượng của ADO.NET
b/- Gọi Stored Procedure - OleDbCommand
ß OleDbCommand dbCmd = new OleDbCommand(“sp_KetQuaSV”,
c/- Gọi Stored Procedure – SqlCommand
ß SqlCommand dbCmd = new SqlCommand(“sp_KetQuaSV”,
dbConn);
ß dbCmd.CommandType = CommandType.StoredProcedure;
ß dbCmd.Parameters.Add("@masv", SqlType.NVarChar).Value =
"A01“;
Trang 33II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter
lý logic một cách hiệu quả giữa ứngdụng và CSDL
tách rời DataAdapter cung cấp cùng lúc
4 đối tượng Command: Select, Insert, Update, Delete
chỉ đóng vai trò cầu nối giữa Connection
và DataTable (DataSet)
Trang 34II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter (tt)
1 Khai báo sử dụng:
ß Dim adap As New SqlDataAdapter(dbCmd)
ß Dim adap As New OleDbDataAdapter(dbCmd)
tương ứng, đã được tạo ra vớiSqlConnection hoặc OleDbConnectiontương ứng và Connection này phải đãđược mở (Open)
Trang 35II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter (tt)
3 Phương thức Fill – Đọc và lưu trữ dữ liệu
ß DataAdapter cung cấp 4 đối tuợng Command
trong đó phương thức Fill tương ứng với việc gọi SELECT Command
ß Lệnh khai báo đối tượng ở slide trước chỉ nên
dùng cho các đối tượng Command thực hiện lệnh SELECT
Command, chúng ta nên tạo riêng từng Command này.
Trang 36II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter (tt)
4 SELECT Command (đổi Sql thành OleDb để sử
dụng OLEDB)
ß SqlDataAdapter adap = new SqlDataAdapter();
ß adap.SelectCommand = new SqlCommand(“SELECT *
FROM MonHoc”, dbConn);
ß DataTable tbl = new DataTable();
ß adap.Fill(tbl);
ß ‘ Các lệnh xử lý khác
Trang 37II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter (tt)
5.- Update – Cập nhật dữ liệu
ß Phương thức Update hoạt động dựa trên 3
Command còn lại (Insert, Update, Delete)
ß Khi trình bày dữ liệu trên Form thông qua các
control, phương thức Update sẽ tự động cập nhật tất cả thay đổi lên CSDL thông qua 3 Command này
minh 3 Command này
Trang 38II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter (tt)
6.- Đổi Sql thành OleDb để sử dụng OLEDB
a/- INSERT Command
…
adap.InsertCommand = new SqlCommand(“INSERT INTO MonHoc
VALUES (@mamh, @tenmh, @sotc)”, dbConn) adap.InsertCommand.Parameters.Add(“@mamh”).SourceColumn= “MaMH”
adap.InsertCommand.Parameters.Add(“@tenmh”).SourceColumn= “TenMH”
adap.InsertCommand.Parameters.Add(“@sotc”).SourceColumn=“SoTC”
Trang 39II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter (tt)
b/- UPDATE Command
…
adap.UpdateCommand = New SqlCommand(“UPDATE MonHoc SET
TenMH=@tenmh, SoTC=@sotc WHERE MaMH=@mamh”, dbConn) adap.UpdateCommand.Parameters.Add(“@mamh”).SourceColumn=
“MaMH”
adap.UpdateCommand.Parameters.Add(“@tenmh”).SourceColumn=
“TenMH”
adap.UpdateCommand.Parameters.Add(“@sotc”).SourceColumn=“SoTC”
Trang 40II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter (tt)
Trang 41II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter (tt)
z Sử dụng đối tượng SqlCommandBuilder /
OleDBCommandBuilder để xây dựng tự động
3 Command còn lại dựa vào SELECT
Command được cung cấp ban đầu
SqlDataAdapter adap = new SqlDataAdapter(“select
* from SinhVien”, dbConn);
SqlCommandBuilder cmdBuilder = new
SqlCommandBuilder(adap);
DataTable tbl = new DataTable();
adap.Fill(tbl);
Trang 42
II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter (tt)
Ví dụ Đọc tên SV và hiển thị trong List
private void btnKetNoi_Click(object sender, EventArgs e)
{
String connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Users\NghiaTran\Documents\qlsv.mdb;User ID=Admin;Password=“;
OleDbConnection dbConn = new OleDbConnection(connStr);
OleDbCommand dbCmd = new OleDbCommand("select * from sinhvien" ,
dbConn);
OleDbAdapter adap = new OleDbDataAdapter(dbCmd);
DataSet ds = new DataSet();
Trang 43II.- ADO.NET
2.- Các đối tượng của ADO.NET
c/- Đối tượng DataAdapter (tt)
Ví dụ Hiển thị và cập nhật trong DataGrid
1. Tạo project mới, trong Form1 thêm các lệnh using cần thiết, vẽ 2
button và 1 DataGridView Viết lệnh như sau
// biến thành viên của form
OleDbConnection dbConn = new OleDbConnection(connStr);
OleDbDataAdapter adap = new OleDbDataAdapter();
private void btnMonHoc_Click(object sender, EventArgs e)
{
String connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=C:\Users\NghiaTran\Documents\qlsv.mdb;User ID=Admin;Password=“;
// Gõ các lệnh xây dựng 4 Command ở các slide trước
DataTable tbl = new DataTable();
Trang 44NỘI DUNG (tt)
bán hàng
Trang 46II.-Lưu trữ và xử lý dữ liệu
1.- DataTable
1 Dùng lưu trữ và xử lý dữ liệu được lấy từ
CSDL thông qua đối tượng DataAdapter
2 DataTable có khả năng tạo bảng mới với
cấu trúc bảng được tạo thông qua các đối tượng DataColumn; thêm dữ liệu mới và cập nhật dữ liệu đã có bằng DataRow
3 Trong môn học này, DataTable chủ yếu
được dùng để lưu trữ dữ liệu phục vụ cho việc trình bày dữ liệu trên Form
4 using System.Data
Trang 47bảng con TableName Tên của DataTable
Columns Tập hợp các cột trong bảng (thuộc lớp DataColumn)
Rows Tập hợp các dòng dữ liệu của bảng (thuộc lớp
DataRow) Constraints Tập hợp các ràng buộc trong bảng
DataSet Cho biết DataSet chứa bảng
DefaultView Cho biết DefaultView phát sinh từ bảng
PrimaryKey Mảng các cột có chức năng làm khoá chính của bảng
Trang 48II.-Lưu trữ và xử lý dữ liệu
1.- Đối tượng DataTable (tt)
Phương thức Mô tả
GetChanges() Trả về một DataTable chứa các dòng dữ liệu bị
người dùng thay đổi RejectChanges() Hủy bỏ tất cả những thay đổi của người dùng trên
dữ liệu
AcceptChanges() Chấp nhận tất cả những thay đổi của người dùng
trên dữ liệu Clear() Xóa toàn bộ dữ liệu trong bảng
Copy() Tạo DataTable mới có cùng cấu trúc và dữ liệu
Clone() Tạo DataTable mới có cùng cấu trúc nhưng không
có dữ liệu LoadDataRow Thêm các dòng dữ liệu mới dạng mảng vào bảng
WriteXml Ghi toàn bộ cấu trúc và dữ liệu ra file XML
Trang 49II.-Lưu trữ và xử lý dữ liệu
2.- Đối tượng DataSet
Disconnected
ß Tạo kết nối CSDL khi cần
ß Ngắt kết nối khi thực hiện xong thao tác
ß Không chiếm giữ nhiều tài nguyên
ß Phục vụ được nhiều ứng dụng
ß Những thay đổi trên CSDL diễn ra tại một nơi
khác sẽ không được cập nhật ngay cho người dùng
Trang 50II.-Lưu trữ và xử lý dữ liệu
2.- Đối tượng DataSet (tt)
thu nhỏ, do nó có thể bao gồm nhiều:
ß DataTable (các table, view trong CSDL)
ß DataRelation
ß Stored Procedure
Trang 53II.-Lưu trữ và xử lý dữ liệu
2.- Đối tượng DataSet (tt)
của hai đối tượng thuộc tính Relations vàTables để thêm, xóa DataTable hay
DataRelation vào DataSet
DataAdapter cho DataSet thì DataSet sẽ
có số lượng DataTable tương ứng với sốlượng câu truy vấn trong đối tượng
SELECT Command của DataAdapter
Trang 54II.-Lưu trữ và xử lý dữ liệu
3.- BindingSource
các dòng trong DataTable Trong chứcnăng này, BindingSource đóng vai tròcầu nối giữa DataTable với control hiểnthị dữ liệu (DataGridView)
cập nhật giữa 2 DataTable khi xây dựngMaster/Detail form
Trang 55II.-Lưu trữ và xử lý dữ liệu
Ví dụ về DataSet, DataTable, BindingSource
frmSinhVien
cùng 1 TextBox trên Toolbar như trên hình
Trang 56II.-Lưu trữ và xử lý dữ liệu
4 Khai báo biến thành viên của lớp như sau:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=
C:\Users\NghiaTran\Documents\qlsv.mdb;User ID=Admin;Password=“;
Trang 57II.-Lưu trữ và xử lý dữ liệu
5 Chận sự kiện Form_Load, thực hiện:
private void KetQuaSV_Load(object sender, EventArgs e)
{
OleDbCommandBuilder cmdBuilder; // dùng xây dựng các lệnh
dbConn = new OleDbConnection(connStr);
dbConn.Open();
adapSV = new OleDbDataAdapter("select * from sinhvien", dbConn);
cmdBuilder = new OleDbCommandBuilder(adapSV);
dsSV = new DataSet();
adapSV.Fill(dsSV); // lấy và lưu trữ dữ liệu
bindSV = new BindingSource(); // tạo BindingSource
bindSV.DataSource = dsSV.Tables[0]; // chỉ định nguồn dữ liệu cho bind
dgrSV.DataSource = bindSV; // nguồn dữ liệu cho lưới là bind
}