34
LÀM VIỆC VỚI ADO.NET Lập trình Web Lập trình Web 1 Lập trình Web

Working with ado.net

Embed Size (px)

Citation preview

Page 1: Working with ado.net

LÀM VIỆC VỚI ADO.NET

Lập trình Web Lập trình Web

1 Lập trình Web

Page 2: Working with ado.net

Giới thiệu chungGiới thiệu chung

ADO.NET là một tập các lớp nằm trong bộ thư viện lớp cơ sở của .NET Framework, cho phép các ứng dụng windows (như C#, VB.NET) hay ứng dụng web (như ASP.NET) thao tác dễ dàng với các nguồn dữ liệu

Lập trình Web 2

Page 3: Working with ado.net

Giới thiệu chung(2)Giới thiệu chung(2)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.

Lập trình Web 3

Page 4: Working with ado.net

Giới thiệu chung (3)Giới thiệu chung (3)ADO.NET bao gồm 2 Provider (2 bộ thư viện thường dùng)

để thao tác với các CSDL là:

OLEDB Provider (nằm trong System.Data.OleDb) dùng để truy xuất đến bất kỳ CSDL nào có hỗ trợ OLEDB (Ví dụ như Access).

SQL Provider (nằm trong System.Data.SQLClient) chuyên dùng để truy xuất đến CSDL SQL Server.

Hiện nay, các hãng thứ ba còn cung cấp các Provider khác như : MySQL, Oracle… provider để cho phép ứng dụng .NET truy xuất đến các cơ sở dữ liệu khác không phải của Microsoft.

Lập trình Web 4

Page 5: Working with ado.net

Vị trí của ADO.NET Vị trí của ADO.NET

Lập trình Web 5

ADO.NET là một thành phần nội tại (Instrict) của .NET framework, do vậy nó có thể được sử dụng trong tất cả các ngôn ngữ hỗ trợ .NET như C#, VB.NET… mà không có sự khác biệt nào

Page 6: Working with ado.net

Kiến trúc của ADO.NETKiến trúc của ADO.NETADO.NET cho phép làm việc ở cả hai chế độ, chế độ Kết

nối (Connected) và phi kết nối(Disconnected).

Trong chế độ Connected thì mỗi khi thao tác (như sửa, xóa, thêm) thì đều đòi hỏi ứng dụng phải kết nối và thao tác trực tiếp với cơ sở dữ liệu (CSDL).

Còn trong chế độ Disconnected thì vẫn có thể thêm, sửa, xóa dữ liệu trên đối tượng cục bộ; không nhất thiết phải kết nối ngay đến CSDL

Lập trình Web 6

Page 7: Working with ado.net

Kiến trúc của ADO.NETKiến trúc của ADO.NET

Bộ ba Connection, Command và DataReader: cho phép làm việc ở chế độ Connected.

Còn DataAdapter, Connection, Command và Dataset làm việc ở chế độ Disconnected.

Slide sau cho thấy cơ chế làm việc của ADO.NET

Lập trình Web 7

Page 8: Working with ado.net

Lập trình Web 8

Page 9: Working with ado.net

Lập trình Web 9

Page 10: Working with ado.net

Lập trình Web 10

Page 11: Working with ado.net

Các lớp thao tác với CSDLCác lớp thao tác với CSDLConnectionCommandDataReader

Lập trình Web 11

Page 12: Working with ado.net

Lớp ConnectionLớp ConnectionChức năng: Là đối tượng có nhiệm vụ thực hiện kết nối

đến Cơ sở dữ liệu để các đối tượng như Command thao tác với CSDL thông qua Connection này.

Khai báo (có nhiều cách):public OleDbConnection Cn1;public OleDbConnection Cn2 = new OleDbConnection ();public OleDbConnection Cn3 = new OleDbConnection

("Provider=Microsoft.jet.....");

Lập trình Web 12

Page 13: Working with ado.net

Lớp Connection (2)Lớp Connection (2)Một số phương thức:Open: Dùng để mở kết nối:

Cnn.Open(): Mở kết nối đến CSDL do ta chỉ định trong ConnectionString

Lưu ý: sau khi gọi phương thức Open, có thể xem đã kết nối thanh công hay không thông qua thuộc tính State của Connection: if (Cnn.State == 1) “Kết nối thành công !”

Close(): Dùng để đóng kết nối: Cnn.Close();Thường thì nên viết như sau để tránh lỗi :

if (Cnn.State == 1) Cnn.Close();GetSchema: Lấy thông tin về CSDL (Vd: tên các bảng, các

trường trong bảng…)Lập trình Web 13

Page 14: Working with ado.net

Lớp Connection (3)Lớp Connection (3)Một số thuộc tính:State: Cho biết trạng thái kết nối.

(ConnectionState.Open => kết nối đã được mở)

ConnectionString: Chứa các thông tin để kết nối.

Ví dụ: về một trang thực hiện kết nối đến CSDL C:\Nwind.mdb

Lập trình Web 14

Page 15: Working with ado.net

Lớp CommandLớp CommandChức năng:

Thực hiện các thao tác đối với CSDL, như Insert, Update, delete, Select.

Tuy nhiên, để thực hiện được các lệnh này thì cần phải thông qua một Connection nào đó đang được mở.

Lập trình Web 15

Page 16: Working with ado.net

Lớp Command(2)Lớp Command(2)Cách tạo (chính tắc):

OleDbCommand Cmd;Cmd = new OleDbCommand (); Cmd.CommandText = "Câu lệnh SQL"; Cmd.Connection= OleDbConnection_Obj;

Hoặc viết gọn hơn:OleDbCommand Cmd=new OleDbCommand("Lệnh

SQL",OleDbConnection_Obj);Trong đó:

OleDbConnection_Obj là một OleDbConnection mà trước đó đã Open rồi.

Câu lệnh SQL: là một xâu chứa câu lệnh SQL bất kỳ.Lập trình Web 16

Page 17: Working with ado.net

Lớp Command(3)Lớp Command(3)Một số phương thức dùng để thực thi câu lệnh SQL:

int ExecuteNonQuery(): Sử dụng khi CommandText ở trên thuộc dạng Insert,Delete, Updat. Hàm này trả về số bản ghi bị tác động (affected).

Object ExecuteScalar(): Sử dụng khi CommandText là câu lệnh SQL chỉ trả về một kết quả đơn, ví dụ câu lệnh đếm tổng số bản ghi : Select Count(*) … Hàm này trả về hàng và cột đầu tiên của kết quả thực thi truy vấn. Các hàng và cột khác bị bỏ qua

Lập trình Web 17

Page 18: Working with ado.net

Lớp Command(4)Lớp Command(4)Một số phương thức dùng để thực thi câu lệnh SQL:

OleDbDataReader ExecuteReader(): Dùng khi CommandText là một câu lệnh Select. Hàm trả về là một đối tượng OleDbDataReader chứa kết quả thực thi câu lệnh (thường là câu lệnh Select).

XMLReader ExecuteXMLReader(): Dùng để đọc dữ liệu là một tệp XML. Phương thức này chỉ áp dụng cho một số Provider (ví dụ SqlClient)

Lập trình Web 18

Page 19: Working with ado.net

Lớp Command(5)Lớp Command(5)Một số thuộc tính dùng để thực thi câu lệnh SQL:CommandText: Chứa câu lệnh SQL cần thực thi

ví dụ: "Select * from Employees","Insert into Employees (….) values (….)“"Delete from Employees where …“

Connection: Để cho biết là đối tượng Command sử dụng kết nối nào.

CommandType: Cho biết CommandText chứa StoreProcedure, tên bảng hay là câu lệnh SQL. Mặc định thuộc tính này có giá trị là Text.

Lập trình Web 19

Page 20: Working with ado.net

Lớp Command(6)Lớp Command(6)Ví dụ:

Xây dựng một trang web hiển thị tổng số bản ghi của bảng Products trong cơ sở dữ liệu nwind.mdb.

Lập trình Web 20

Page 21: Working with ado.net

Lớp DataReaderLớp DataReaderChức năng:

Dùng để đón nhận kết quả trả về từ phương thức ExecuteReader của đối tượng Command. Dữ liệu nhận về là Readonly và chỉ đọc theo chiều tiến.

Một số phương thức:Bool Read(): Thực hiện việc đọc một bản ghi (một hàng)

trong kết quả, sau đó chuyển tới bản ghi tiếp theo. Hàm này trả về true nếu vẫn còn dữ liệu, false nếu đã đọc hết.

String GetName(int i) : Trả về tên của cột iGetInt(int i), GetString(int i),…, GetXXX(int i) : Trả về giá

trị của cột i và chuyển về dạng tương ứng.

Lập trình Web 21

Page 22: Working with ado.net

Lớp DataReader (2)Lớp DataReader (2)Một số thuộc tính:

Boolean HasRows: cho biết là DataReader có chứa dữ liệu hay không ?

int FieldCount : Cho biết số trường (Cột) của DataReader.Biến DataReader –ví dụ Dr – cho phép đọc dữ liệu của từng

ô (cột/ trường) của hàng hiện hành như sau: Dr["Tên trường"/ hoặc chỉ số].

Lập trình Web 22

Page 23: Working with ado.net

Ví dụVí dụ

Nạp Tên của tất cả sản phẩm trong bảng Products và đưa vào một ListBox.

Lập trình Web 23

Page 24: Working with ado.net

Lớp DataColumnLớp DataColumnChức năng:

Là một thành phần tạo nên DataTableKhai báo:

DataColumn Dc;Dc = new DataColumn (Tên_Cột);

Hoặc, tạo cột và chỉ định kiểu dữ liệu cho cột: DataColumn Dc;Dc = new DataColumn ("Hello", System.Type.GetType(Tên_Kiểu));

Lập trình Web 24

Page 25: Working with ado.net

Lớp DataColumnLớp DataColumn Một số thuộc tính:

Caption: Tiêu đề của cộtColumnName: Tên của cột.

Lập trình Web 25

Ví dụ :Tạo một cột có tên là Họ tên, kiểu String, Tuổi kiểu Int:DataColumn Dc_HVT;Dc_HVT = new DataColumn ("HoVaTen", System.Type.GetType ("String"));Dc_HVT.Caption = "Họ và tên";DataColumn Dc_Tuoi;Dc_HVT = new DataColumn ("Tuoi", System.Type.GetType ("Int32")); Dc_HVT.Caption = "Tuổi";

Page 26: Working with ado.net

Lớp DataTableLớp DataTableChức năng:

Quản lý dữ liệu dạng bảng 2 chiều (Các hàng và các cột).

Khai báo:DataTable Dt ;Dt=new DataTable(); Hoặc Dt = new DataTable("Tên_Bảng");

Lập trình Web 26

Page 27: Working with ado.net

Lớp DataTableLớp DataTableMột số phương thức:

DataRow NewRow() : Trả về một đối tượng DataRow;Clear(): Xóa tất cả các dữ liệu trong DataTable

Một số thuộc tính:Columns: Là một tập hợp, quản lý toàn bộ các cột

(Thêm, xóa, sửa…) của DataTable. Columns còn có các phương thức để thêm/xóa cột.

Rows: Là một tập hợp, quản lý toàn bộ các hàng trong DataTable. Rows cũng có các phương thức để thêm/xóa hàng.

Lập trình Web 27

Page 28: Working with ado.net

Lớp DataTableLớp DataTableTruy xuất đến ô [i,j] của bảng: Tên_Bảng.Rows[i][j].

Lập trình Web 28

Có thể dùng vòng lặp kiểu như for (i=0; i < Dt.Rows.Count; i++)

for (j=0; j < Dt.Columns.Count; j++){

… Dt.Rows[i][j] …

}để duyệt toàn bộ các ô trong Table.

Page 29: Working with ado.net

Ví dụ:Ví dụ:Tạo một bảng có 2 cột là Họ tên (Kiểu String) và Tuổi

(Kiểu Int32)

Lập trình Web 29

DataColumn Dc_HVT;Dc_HVT = new DataColumn ("HoVaTen", Type.GetType ("String")); Dc_HVT.Caption = "Họ và tên";DataColumn Dc_Tuoi;Dc_Tuoi = new DataColumn ("Tuoi", Type.GetType ("Int32")); Dc_Tuoi.Caption = "Tuổi";DataTable Dt ; Dt=new DataTable();Dt.Columns.Add (Dc_HVT); // Tạo cột họ tên nhờ vào Column ở trênDt.Columns.Add(Dc_Tuoi); // Tạo cột tuổi.

Hoặc có thể thêm ngắn gọn hơn: Dt.Columns.Add("HoVaTen",Type.GetType("String"));

Page 30: Working with ado.net

Lớp DataRowLớp DataRow

Lập trình Web 30

Page 31: Working with ado.net

Lớp DataSetLớp DataSetChức năng: Là một đối tượng chứa các DataTable. Nó là

nơi lưu trữ dữ liệu tạm thời cho ứng dụng trong quá trình xử lý. Lớp DataSet này nằm trong System.Data.

Lập trình Web 31

Page 32: Working with ado.net

Lớp DataSetLớp DataSetKhai báo:

DataSet Ds;DataSet Ds = new DataSet();

Một số phương thức:Một số thuộc tính:

Tables: Chứa tất cả các bảng chứa trong Dataset.

Tables[i] hoặc Tables[Tên_Bảng] : Tham chiếu đến một bảng cụ thể trong Dataset.

Lập trình Web 32

Page 33: Working with ado.net

Lớp DataAdapterLớp DataAdapterChức năng: Đóng vai trò cầu nối / Chuyển đổi dữ liệu giữa

Nguồn dữ liệu (DataSource)và các đối tượng thao tác dữ liệu (như DataSet chẳng hạn).

Một số phương thức:Fill (DataSet, Tên_Cho_DataSet): Điền dữ liệu lấy được vào

DataSet.Update(DataSet/DataTable…) : Cập nhật dữ liệu trong DataSet,

DataTable ngược trở về Cơ sở dữ liệu.Một số thuộc tính:

SelectCommand, UpdateCommand, DeleteCommand, InsertCommand: trả về hoặccho phép thiết lập các câu lệnh SQL để Chọn (Select), Cập nhật (Update), Delete,Insert vào Cơ sở dữ liệu.

Lập trình Web 33

Page 34: Working with ado.net

Ví dụVí dụ

Lập trình Web 34

OleDbDataAdapter Da; Da=new OleDbDataAdapter();

Da.SelectCommand=Cmd;DataSet DsNCC = new DataSet (); Da.Fill (DsNCC, "DS_NCC");// Hiển thị trên một bảngdgrNCC.DataSource = DsNCC.Tables ["DS_NCC"];dgrNCC.DataBind ();