ADO.NET, 3 Layers
Ngô Ngọc Đăng Khoa
1
ADO.NET
2
Giới thiệu
• ActiveX Data Object .NET • Hỗ trợ kết nối, xử lý CSDL trên .NET
– Access – SQL Server – ...
• Đối với HQT CSDL chưa được ADO.NET hỗ
trợ sẵn cần cài thêm provider – MySQL Connector .NET (MySQL) – ADO.NET 2.0 Provider for SQLite3 (SQLite3) – ...
3
Mô hình
ADO.NET có 2 mô hình hoạt động
• xxxConnection
• xxxDataAdapter
DataSet DataTable
• xxxCommandBuilder
Dis connect ed
• xxxConnection
• xxxDataReader
ArrayList List<…>
Connect ed
• xxxCommand
4
Disconnected Model
• Thao tác đọc (Select)
Select
xxxDataAdapter
xxxConnection
DataSet DataTable
5
Example
• Access
using System.Data.OleDb;
//----------------------------------------------------------------------
string cnStr = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=‘db.mdb’";
OleDbConnection cn = new OleDbConnection(cnStr);
string sql = "select * from HocSinh"; OleDbDataAdapter da = new OleDbDataAdapter(sql, cn); DataTable dt = new DataTable(); //DataSet ds = new DataSet(); da.Fill(dt); //da.Fill(ds);
6
Example
• SQL Server
using System.Data.SqlClient;
//----------------------------------------------------------------------
string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;";
//string cnStr = "Server=.; Database=QLHS; Integrated Security=True;"; //string cnStr = "Server=.; Database=QLHS; UID=...; PWD=...;"; SqlConnection cn = new SqlConnection(cnStr);
string sql = "select * from HocSinh"; SqlDataAdapter da = new SqlDataAdapter(sql, cn); DataTable dt = new DataTable(); //DataSet ds = new DataSet(); da.Fill(dt); //da.Fill(ds);
7
Hot Tip
• Các thao tác lên các CSDL khác nhau trong ADO.NET là khá tương đồng
• Khác biệt ở những điểm sau đây:
– using thư viện khác – Chuỗi kết nối khác – Thay xxx trong xxxConnection, xxxDataAdapter, …
thành các tên tương ứng:
• OleDbConnection, SqlConnection • OleDbDataAdapter, SqlDataAdapter • ...
8
Disconnected Model
• Thao tác ghi (Insert/Delete/Update)
xxxDataAdapter
xxxCommandBuilder
DataSet DataTable
Dữ liệu gốc
Select
xxxDataAdapter
xxxConnection
9
Example - Insert
• SQL Server
DataRow row = dt.NewRow(); dt.Rows.Add(row);
row["TenHS"] = "CR7"; row["DiaChi"] = "MU"; row["DienThoai"] = string.Empty; row["NgaySinh"] = new DateTime(1985, 1, 1); row["MaLop"] = 2;
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da); da.Update(dt);
//dt là DataTable đã chứa dữ liệu lấy từ bảng HocSinh
10
Example - Delete
• SQL Server
string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr);
string sql = "select * from HocSinh where MaHS=1"; SqlDataAdapter da = new SqlDataAdapter(sql, cn); DataTable dt = new DataTable(); da.Fill(dt);
dt.Rows[0].Delete(); //chưa kiểm tra dữ liệu
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da); da.Update(dt);
11
Example - Update
• SQL Server
string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr);
string sql = "select * from HocSinh where MaHS=1"; SqlDataAdapter da = new SqlDataAdapter(sql, cn); DataTable dt = new DataTable(); da.Fill(dt);
DataRow row = dt.Rows[0]; row["TenHS"] = "CR7"; row["DiaChi"] = "RM";
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(da); da.Update(dt);
12
Connected Model
• Thao tác đọc (Select)
Select
xxxCommand
xxxConnection
xxxDataReader
13
Example
string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr); SqlCommand cmd = new SqlCommand("select * from HocSinh", cn);
int maHS = reader.GetInt32(0); string tenHS = reader["TenHS"].ToString(); string diaChi = reader.GetString(2); string dienThoai = reader["DienThoai"].ToString(); DateTime ngaySinh = Convert.ToDateTime(reader["NgaySinh"]); int maLop = Convert.ToInt32(reader["MaLop"]);
cmd.Connection.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { } reader.Close(); cmd.Connection.Close();
14
Connected Model
• Thao tác ghi (Insert/Delete/Update)
Store Procedure
Functions
xxxCommand
Insert
Delete
Update
xxxConnection
15
Example
string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr);
string sql = “Delete From HocSinh Where MaHS=1”; //string sql = “Update HocSinh Set TenHS=‘RO10’ Where MaHS=1”; //string sql = “Insert Into HocSinh(TenHS) Values(‘Messi’)”;
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Connection.Open(); cmd.ExecuteNonQuery(); //thực thi lệnh
cmd.Connection.Close();
16
xxxCommand
1. Trỏ đến đối tượng kết nối
Connection
4. Danh sách các tham số truyền vào
Parameters
Command Type
2. Loại command
5. Thời gian chờ đợi thực thi 1 câu SQL
Command TimeOut
3. Câu SQL hoặc tên proc, tên bảng
Các thuộc tính quan trọng của đối tượng xxxCommand
Command Text
17
CommandType
CommandType.Text Giá trị mặc định của CommandType
Text
CommandType.StoreProcedure
Các giá trị của thuộc tính CommandType
CommandType.TableDirect
Store Procedure
Table Direct
18
Command’s methods
xxxCommand
xxxCommand
Kiểu trả về của các hàm thông dụng trong đối tượng xxxCommand
Trả về 1 XMLReader
Các hàm thông dụng
Trả về một DataReader
Trả về số lượng dòng bị ảnh hưởng
Trả về 1 giá trị duy nhất
19
Example
string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr);
string sql = “Select COUNT(*) From HocSinh”; SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Connection.Open(); int n = Convert.ToInt32(cmd.ExecuteScalar());
cmd.Connection.Close();
//Sử dụng n
20
Parameter
• Để truyền dữ liệu vào Command
– Dùng dữ liệu & phép toán nối chuỗi để tạo
commandText hoàn chỉnh
string sql =
"Update HocSinh Set TenHS=‘" + tenHS + “’ Where MaHS=" + maHS;
– Dùng xxxParameter
• Tham số hóa câu truy vấn: ? hoặc @[tên tham số] • Tạo các parameters tương ứng cho command • Gán giá trị cho các parameters
21
Example
string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;"; SqlConnection cn = new SqlConnection(cnStr);
string sql = “Update HocSinh Set TenHS=@TenHS Where MaHS=@MaHS”; //string sql = “Update HocSinh Set TenHS=? Where MaHS=?”;
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Parameters.Add(“@TenHS”, SqlDbType.NVarChar); cmd.Parameters.Add(“@MaHS”, SqlDbType.Int);
cmd.Parameters[“@TenHS”].Value = “RO10”; cmd.Parameters[“@MaHS”].Value = 1;
Thứ tự tham số?
cmd.Connection.Open(); cmd.ExecuteNonQuery(); //thực thi lệnh
cmd.Connection.Close();
22
Tip: Access Password
• CSDL Access cho phép đặt mật khẩu
• Phương pháp đặt mật khẩu Database Tools > Encrypt with Password
23
ConnectionString
string cnStr = “
Provider=Microsoft.Jet.OleDb.4.0; Data Source=‘db.mdb’;
Jet OLEDB:Database Password=‘pwd’ ”
24
3 LAYERS
25
ArrayList
ArrayList list = new ArrayList(); list.Add(“string-1”); list.Add(“string-2”); list.Add(“string-3”);
string s = list[0].ToString();
//---------------------------------------------------------------------
ArrayList list = new ArrayList(); list.Add(0); list.Add(1); list.Add(2);
int i = (int)list[0];
26
ArrayList
ArrayList list = new ArrayList(); list.Add(“string-1”); list.Add(“string-2”); list.Add(“string-3”);
int s = (int)list[0];
ERROR
27
Generics
list.Add(“string-1”); list.Add(“string-2”); list.Add(“string-3”);
//---------------------------------------------------------------------
List list = new List();
string s = list[0];
list.Add(0); //FAILED
28
Kiến trúc 3-layers
• Chia phần mềm thành các lớp (layer) • Mỗi lớp có vai trò, đặc trưng riêng • Ưu điểm:
– Sẵn sàng cho việc mở rộng hệ thống – Thuận tiện cho việc sự dụng lại – Dễ bảo trì – Dễ dàng phân chia công việc
29
Kiến trúc 3-layers
Presentation/GUI
Business
Data Transfer Object (DTO)
Data Access
30
Data Access Layer
• Quản lý việc:
Presentation/GUI
– Thêm/Xóa /Sửa – Truy vấn
• Trên:
Business
– Cơ sở dữ liệu – XML – Files
Data Access
31
Business Layer
Presentation/GUI
Xử lý nghiệp vụ
Business
Data Access
32
GUI Layer
Presentation/GUI
Input/Output
Business
Data Access
33
DEMO
34
Thank You! Question & Answers
35

