• 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)
35 trang |
Chia sẻ: lylyngoc | Lượt xem: 1839 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu ADO.NET, 3 Layers - Ngô Ngọc Đăng Khoa, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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
• xxxConnection
• xxxDataAdapter
• xxxCommandBuilder
Mô hình
• xxxConnection
• xxxDataReader
• xxxCommand
Connect
ed
ADO.NET có 2 mô hình hoạt động
4
Dis
connect
ed
DataSet
DataTable
ArrayList
List
Disconnected Model
• Thao tác đọc (Select)
5
xxxDataAdapter xxxConnection
Select
DataSet
DataTable
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)
9
DataSet
DataTable
xxxDataAdapter
Select Dữ liệu gốc
xxxCommandBuilder
xxxDataAdapter
xxxConnection
Example - Insert
• SQL Server
//dt là DataTable đã chứa dữ liệu lấy từ bảng HocSinh
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);
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)
13
xxxCommand xxxConnection
Select
xxxDataReader
Example
string cnStr = "Server=.; Database=QLHS; Integrated Security=SSPI;";
SqlConnection cn = new SqlConnection(cnStr);
SqlCommand cmd = new SqlCommand("select * from HocSinh", cn);
cmd.Connection.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read()) {
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"]);
}
reader.Close();
cmd.Connection.Close();
14
Connected Model
• Thao tác ghi (Insert/Delete/Update)
15
xxxCommand
xxxConnection
Insert Delete Update
Store Procedure Functions
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
Connection
Command
Type
Command
Text
Command
TimeOut
Parameters
5. Thời gian chờ đợi
thực thi 1 câu SQL
1. Trỏ đến đối
tượng kết nối
2. Loại command
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
17
4. Danh sách các
tham số truyền vào
CommandType
Các giá trị của thuộc tính
CommandType
Text
Store
Procedure
Table
Direct
CommandType.Text
Giá trị mặc định của CommandType
CommandType.StoreProcedure
CommandType.TableDirect
18
Command’s methods
xxxCommand
Kiểu trả về của các hàm thông dụng
trong đối tượng xxxCommand
Các hàm
thông dụng
xxxCommand
Trả về 1 XMLReader
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;
cmd.Connection.Open();
cmd.ExecuteNonQuery(); //thực thi lệnh
cmd.Connection.Close();
22
Thứ tự
tham số?
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];
27
ERROR
Generics
List list = new List();
list.Add(“string-1”);
list.Add(“string-2”);
list.Add(“string-3”);
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
30
Presentation/GUI
Business
Data Access
Data Transfer
Object (DTO)
Data Access Layer
• Quản lý việc:
– Thêm/Xóa /Sửa
– Truy vấn
• Trên:
– Cơ sở dữ liệu
– XML
– Files
31
Presentation/GUI
Business
Data Access
Business Layer
32
Presentation/GUI
Business
Data Access
Xử lý nghiệp vụ
GUI Layer
33
Presentation/GUI
Business
Data Access
Input/Output
DEMO
34
Thank You!
Question & Answers
35