30
Bài 5: ADO.NET 5.1. Khái niệm 5.2. Các lớp và không gian tên cơ bản của ADO.NET 5.3. Thao tác với dữ liệu kết nối – Connected 5.4. Thao tác với dữ liệu không kết nối - Disconnected

Bài 5: ADO.NET

  • Upload
    pillan

  • View
    23

  • Download
    1

Embed Size (px)

DESCRIPTION

Bài 5: ADO.NET . 5.1. Khái niệm 5.2. Các lớp và không gian tên cơ bản của ADO.NET 5.3. Thao tác với dữ liệu kết nối – Connected 5.4. Thao tác với dữ liệu không kết nối - Disconnected. 5.1 Khái niệm ADO.NET. - PowerPoint PPT Presentation

Citation preview

Page 1: Bài 5: ADO.NET

Bài 5: ADO.NET 5.1. Khái niệm5.2. Các lớp và không gian tên cơ bản của ADO.NET 5.3. Thao tác với dữ liệu kết nối – Connected5.4. Thao tác với dữ liệu không kết nối - Disconnected

Page 2: Bài 5: ADO.NET

5.1 Khái niệm ADO.NET

• Khi phát triển các ứng dụng trên nền web thì công việc chủ yếu phải giải quyết là xử lý Cơ sở dữ liệu

• ADO.NET (Active Data Object) cho phép thao tác Cơ sở dữ liệu :– Các ứng dụng webform – Các ứng dụng winform

Page 3: Bài 5: ADO.NET
Page 4: Bài 5: ADO.NET

Mục tiêu chính của ADO.NET là

• Cung cấp các lớp để thao tác CSDL trong cả hai môi trường là phi kết nối (Disconected data) và kết nối (Connected data)

• Tích hợp chặt chẽ với XML (Extensible Markup Language)

• Tương tác với nhiều nguồn dữ liệu thông qua mô tả dữ liệu chung

• Tối ưu truy cập nguồn dữ liệu (OLE DB & SQL server)• Làm việc trên môi trường Internet

Page 5: Bài 5: ADO.NET

ADO vs. ADO.NET

Page 6: Bài 5: ADO.NET

5.2 Các lớp và không gian tên cơ bản của ADO.NET

• Lớp ADO.NET được tìm thấy trong namespace System.Data, và được tích hợp với lớp XML được tìm thấy trong namespace System.Xml Connection

• Không gian tên sử dụng trong ADO.NET gồm:– System.Data– System.Data.Common:

• ADO.NET Dataset: Là thành phần chính của kiến trúc kết nối gián đoạn của ADO.NET. Dataset bao gồm tập hợp một hoặc nhiều đối tượng DataTable

• .NET Data Provider: Một tập hợp các thành phần bao gồm các đối tượng– System.Data.SqlClient: Dùng cho cơ sở dữ liệu SQL– System.Data.OleDb: Dùng cho cơ sở dữ liệu access– System.Data.OracleClient: Dùng cho cơ sở dữ liệu Oracle

Page 7: Bài 5: ADO.NET

Cấu trúc

ADO.NET cho phép làm việc ở cả hai chế độ:• Chế độ Kết nối (Connected)• Phi kết nối (Disconnected)

Thực hiện nhiệm vụ kết nối đến CSDL

Thực hiện các câu lệnh SQL thao tác với

CSDL

Đón nhận kết quả trả về từ

đối tượng Command

Cầu nối giữa nguồn dữ liệu và các bảng được

cached trong bộ nhớ

Kho chứa các bảng

Page 8: Bài 5: ADO.NET

Connection

• Ý nghĩa: Kết nối đến CSDL• Thuộc tính:

• ConnectionString: chuỗi kết nối DataSource• Phương thức:

• Open(): thiết lập kết nối đến DataSource• Close(): đóng kết nối với DataSource

Application Database

Connection

Page 9: Bài 5: ADO.NET

Command

• Ý nghĩa: Thực hiện các câu lệnh SQL để thao tác với CSDL• Thuộc tính:

• Connection: kết nối để thực hiện lệnh• CommandText: câu lệnh cần thực hiện• CommandType: loại câu lệnh (Text, TableDirect, StoredProc)

• Phương thức:• ExecuteScalar(): thực hiện câu lệnh và trả về giá trị đơn• ExecuteNonQuery(): gọi các lệnh SQL, store, trả về số row bị tác động

(Insert, Update, Delete…)• ExecuteReader(): thực hiện lệnh và trả về DataReader

Application Database

Connection

Command

Page 10: Bài 5: ADO.NET

Command với Parameter

• Khái niệm: Câu lệnh truy vấn SQL nhận giá trị thông qua các tham số tại thời điểm thực thi

• Cách sử dụng:– Tạo tham số trong câu lệnh SQL– Khai báo Parameter với những thông tin chính:

• tên tham số• kiểu dữ liệu• loại tham số vào/ra• giá trị

– Liên kết Parameter với Command

Page 11: Bài 5: ADO.NET

Command với Parameter

• Tạo tham số trong câu lệnh SQL

• Khai báo Parameter với những thông tin chính: – tên tham số– kiểu dữ liệu– loại tham số vào/ra– giá trị

• Liên kết Parameter với Command

SqlCommand dc = new SqlCommand("select * from sinhvien where phai=@phai", ketnoi);

SqlParameter thamso = new SqlParameter();thamso.ParameterName = "tham_so";thamso.SqlDbType = SqlDbType.NChar;thamso.Direction = ParameterDirection.Input;thamso.SqlValue = "nu";

dc.Parameters.Add("tham_so");

?

string gtthamso = "nu"; dc.Parameters.AddWithValue("@phai", gtthamso);

Page 12: Bài 5: ADO.NET

DataReader

• Ý nghĩa: Nhận kết quả trả về từ Command• Thuộc tính:

• HasRow: cho biết câu truy vấn có trả về dữ liệu• Phương thức:

• Read(): đọc một mẫu tin• [i]: truy xuất đến cột i của mẫu tin được đọc• Close(): đóng

Application Database

Connection

CommandDataReader

Page 13: Bài 5: ADO.NET

Data Provider

• Tạo kết nối đến nguồn dữ liệu.• Thực hiện các lệnh truy vấn SQL trên nguồn dữ liệu.• Cung cấp thư viện xử lý cho 3 loại nguồn dữ liệu khác nhau (3

provider): SQL Server, OLE DB và ODBC.• Mỗi provider được quản lý bởi một namespace, nằm trong

namespace System.Data.• Có 4 thành phần chính trong một provider:

– Connection– Command– DataReader– DataAdapter

Page 14: Bài 5: ADO.NET

14

DataAdapter

• Ý nghĩa: Cầu nối giữa CSDL và DataSet• Thuộc tính và phương thức:

• Fill(DataSet): Sử dụng SelectCommand lấy dữ liệu từ Data Source đổ vào DataSet

• Update(DataSet): Cập nhật dữ liệu trong DataSet vào DataSource • Các thành phần: InsertCommand, UpdateCommand,

DeleteCommand• *.AcceptChanges();

Page 15: Bài 5: ADO.NET

15

DataSetDataSet

.Tables[...]

.Relations[...]

...

DataTable

.Columns[..]

.Rows[..]

DataTable

.Columns[...]

.Rows[...]

.DefaultView

...

DataRow

DataRowdata

DataColumn

schema

DataColumn

DataView

DataRelationDataRelation

Page 16: Bài 5: ADO.NET

DataSet

• Là thành phần lưu trữ dữ liệu• Đặc điểm:

– Không kết nối với nguồn dữ liệu.– Không phân biệt dữ liệu thuộc nguồn nào (SQL Server, OLE DB,

ODBC, …).– Có thể lưu trữ dữ liệu từ nhiều bảng (Table), nhiều nguồn (Data

Source) khác nhau.– Dữ liệu trong DataSet được quản lý bởi các DataTable.

• Dữ liệu được đưa vào bởi DataSet thành phần DataAdapter của .Net data provider

Page 17: Bài 5: ADO.NET

17

DataSet - DataTable

• Ý nghĩa: Thể hiện một bảng trong CSDL• Thuộc tính:

• TableName: tên của bảng dữ liệu• Columns: danh sách các cột• Rows: danh sách các mẫu tin• PrimaryKey: danh sách các cột là khóa chính

• Phương thức:• NewRow(): tạo một mẫu tin mới

Page 18: Bài 5: ADO.NET

DataSet - DataColumn

• Ý nghĩa: Đại diện cho một cột trong bảng• Thuộc tính và phương thức:

– ColumnName: tên cột– DataType: kiểu dữ liệu– .Columns.Count: Số cột– .Columns.[chỉ số]: Truy xuất một DataColumn– .Columns.[“Tên cột”]: Truy xuất một DataColumn

Page 19: Bài 5: ADO.NET

19

DataSet - DataRow

• Ý nghĩa: Đại diện cho mẫu tin trong bảng• Thuộc tính và :

– RowState: trạng thái Added, Modified, Deleted,…• Phương thức:

– .Rows.Count:– .Rows[chỉ số dòng][chỉ số cột]: truy xuất đến cột I– .Rows[chỉ số dòng][tên cột] : truy xuất đến cột I– Delete(): đánh dấu xóa mẫu tin

DataTable Column1 Column2 … Column n

abc xyz omt

… … …

… … …

Row

Page 20: Bài 5: ADO.NET

5.3 Kết nối để thao tác với dữ liệu

• Khái niệm• Lấy dữ liệu về• Thao tác với dữ liệu

Page 21: Bài 5: ADO.NET

Khái niệm

• Mỗi user có một kết nối cố định tới data source• Ưu điểm:

– Môi trường được bảo vệ tốt– Kiểm soát được sự đồng bộ– Dữ liệu luôn được mới

• Nhược:– Phải có một kết nối mạng cố định

Page 22: Bài 5: ADO.NET

Lấy dữ liệu về

• b1. Tạo Connection đến CSDL• b2. Tạo một biến DataCommand gắn với biến

DataConnection đã mở• b3. Tạo biến DataReader:

– Thi hành phương thức ExcuteReader() – Đọc và trình bày dữ liệu

• b.4 Đóng và giải phóng các biến đối tượng

Page 23: Bài 5: ADO.NET

Thao tác với dữ liệu

• b1. Khai báo một biến đối tượng DataConnection, và mở kết nối đến cơ sở dữ liệu

• b2. Tạo một biến DataCommand gắn với biến DataConnection đã mở

• b3. Gán giá trị cho thuộc tính CommandType của biến đối tượng DataCommand

• b4. Gán câu lệnh truy vấn (insert, update, delete, gọi store procedure…) cho thuộc tính CommandText của biến đối tượng DataCommand

• b5. Thi hành phương thức ExcuteNonquery() của biến đối tượng DataCommand

• b6. Đóng và giải phóng các biến đối tượng nếu không cần thiết

Page 24: Bài 5: ADO.NET

Demo 1

Thực hiện các công việc:• Kết nối CSDL• Đọc dữ liệu trên CSDL rồi đưa lên web thông qua

ListBox• Đọc dữ liệu trên CSDL với tham số rồi đưa lên web

thông qua ListBox• Chèn vào CSDL 1 bản ghi• Sửa 1 bản ghi trong CSDL• Xóa 1 bản ghi trong CSDL

Page 25: Bài 5: ADO.NET

5.3 Thao tác với dữ liệu (phi kết nối)

• Khái niệm• Các bước• Lấy dữ liệu về để thao tác• Thực hiện thao tác trên CSDL

Page 26: Bài 5: ADO.NET

Khái niệm

• Một tập con của dữ liệu trung tâm được sao chép và bổ sung độc lập, sau đó sẽ được merge lại vào dữ liệu trung tâm.

• Ưu điểm– Có thể làm việc bất cứ lúc nào, cũng như có thể kết nối bất kỳ vào

Data Source– Cho phép user khác có thể kết nối– Nâng cao hiệu suất thực hiện của ứng dụng

• Khuyết– Dữ liệu không được cập nhật một cách nhanh nhất– Sự tranh chấp có thể xuất hiện và phải giải quyết

Page 27: Bài 5: ADO.NET

Các bước

1. DataConnection: Dùng để mở kết nối đến cơ sở dữ liệu (Có thể có hoặc không)

2. DataAdapter3. DataSet4. Ngoài ra chúng ta còn sử dụng một số các đối tượng khác

như DataTable, DataRow…

Page 28: Bài 5: ADO.NET

Lấy dữ liệu về để thao tác

• b1. Cần khai báo một biến đối tượng DataConnection, và mở kết nối đến cơ sở dữ liệu. (Bước này có thể không cần thiết)

• b2. Tạo biến DataAdapter, Chỉ rõ nguồn dữ liệu cần lấy gắn với một đối tượng DataConnection đã mở hoặc một xâu kết nối đến cơ sở dữ liệu.

• b3. Tạo DataSet và thi hành phương thức Fill để điền dữ liệu lấy về vào DataSet.

• b4. Sử dụng tập hợp Tables của đối tượng DataSet để làm việc với dữ liệu đã lấy về.

• b5. Đóng hoặc giải phóng các đối tượng nếu không cần thiết.

Page 29: Bài 5: ADO.NET

Thực hiện các thao tác trên cơ sở dữ liệu

• b1. Khai báo một biến đối tượng DataConnection, và mở kết nối đến cơ sở dữ liệu. (Bước này có thể không cần thiết).

• b2. Khai báo và tạo đối tượng DataAdapter • b3. Tạo đối tượng CommandBuilder gắn với biến đối tượng

DataAdapter.• b4. Tạo DataSet và thi hành phương thức Fill để điền dữ liệu

lấy về vào DataSet.• b5. Thi hành phương thức Update để cập nhật sự thay đổi dữ

liệu trong bảng lên cơ sở dữ liệu. • b6. Đóng và giải phóng các biến đối tượng nếu không cần thiết.

Page 30: Bài 5: ADO.NET

Demo2

• Yêu cầu 1: Lấy dữ liệu từ 1 bảng trong CSDL, cho hiển thị lên web

• Yêu cầu 2: Cập nhật 1 trường của CSDL