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