Chương 7 Lập Trình Web Form Với ADO.Net

1. Tổng quan về ADO.Net

2. Các ñối tượng trong ADO.Net

3. Xây dựng lớp xử lý dữ liệu

11

http://www.thayphet.net

Written by: Dương Thành Phết

4. Xử lý giỏ hàng cho website thương mại ñiện tử

1. Tổng Quan Về ADO.Net

1.1 Giới thiệu

1.2 Kiến trúc ADO .Net

22

http://www.thayphet.net

Written by: Dương Thành Phết

1.3 Minh họa tạo kết nối CSDL

1.1 Giới Thiệu

Hầu hết ứng dụng windows hay website ñều cần

có CSDL, ñể lưu trữ, xử lý, tìm kiếm và báo cáo…

Khi dữ liệu trở thành trung tâm của ứng dụng thì việc cung cấp các chức năng tới người dùng phụ thuộc vào khả năng thao tác dữ liệu, vấn ñề cần quan tâm là:

33

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:1)Lưu dữ liệu tập trung. (cid:1)ðảm bảo toàn vẹn dữ liệu. (cid:1)ðảm bảo khả năng truy xuất ñồng thời. (cid:1)ðảm bảo thời gian hồi ñáp ngắn. (cid:1)Bảo mật dữ liệu. (cid:1)Trao ñổi dữ liệu giữa các hệ thống khác nhau

Vấn ñề này ñược giải quyết dựa vào khả năng

của các Hệ QTCSDL.

.Net truy xuất DL qua ADO.NET, ñặc ñiểm chính

của ADO.NET là:

44

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:1) Khả năng làm việc với DL không kết nối: DL ñược lưu trữ trong bộ nhớ như một CSDL thu nhỏ (dataset), nhằm tăng tốc ñộ xử lý tính toán và hạn chế sử dụng tài nguyên. (cid:1) Khả năng xử lý dữ iệu chuẩn XML (Có thể trao ñổi giữa bất kỳ hệ thống nào)

1.2 Kiến Trúc ADO.Net

55

http://www.thayphet.net

Written by: Dương Thành Phết

Kiến trúc ADO.NET có thể chia làm 2 phần chính:

66

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:1)Managed Provider Component: Bao gồm các ñối tượng như DataAdapter, DataReader,… giữ nhiệm vụ làm việc trực tiếp với dữ liệu như database, file,… (cid:1)Content Component: Bao gồm các ñối tượng như DataSet, DataTable,… ñại diện cho dữ liệu thực sự cần làm việc.

77

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:1) DataReader: Là ñối tượng giúp truy cập dữ liệu nhanh chóng. (cid:1) DataSet: Là một bản sao thu nhỏ của CSDL trong bộ nhớ với nhiều bảng và các mối quan hệ. (cid:1) DataAdapter: Là ñối tượng kết nối giữa DataSet và CSDL, nó bao gồm 2 ñối tượng Connection và Command ñể cung cấp dữ liệu cho DataSet cũng như cập nhật dữ liệu từ DataSet xuống CSDL.

1.3 Minh họa tạo kết nối CSDL

88

http://www.thayphet.net

Written by: Dương Thành Phết

Cơ bản các bước thực hiện với database (cid:1)Bước 1: Tạo kết nối (cid:1)Bước 2: Mở kết nối dữ liệu (cid:1)Bước 3: Tạo lệnh ñiều khiển truy vấn SQL (cid:1)Bước 4: Thực thi lệnh (cid:1)Bước 5: ðóng kết nối (cid:1)Bước 6: in kết quả

using System; using System.Data; using System.Data.SqlClient; public partial class vd1 : System.Web.UI.Page{

protected void Page_Load(object sender, EventArgs e) { //Khai báo và khởi tạo biến Connection

SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Catalog=QLbansach;User ID=sa;Password=");

cnn.Open(); //Mở kết nối

//Command ñiều khiển truy vấn sql

SqlCommand cmd = cnn.CreateCommand(); cmd.CommandText="select TenKH from Khachhang where MaKH=5";

//lấy về chuỗi giá trị trong cơ sở dữ liệu

string result = (string)cmd.ExecuteScalar();

cnn.Close(); //ñóng kết nối

Response.Write(result); //in giá trị ra màn hình }

}

99

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ:

2. Các ñối tượng trong ADO.Net

1010

http://www.thayphet.net

Written by: Dương Thành Phết

2.1 Connection 2.2 Command

2.1 Connection

Vai trò của Connection trong ADO.net là tạo kết

nối giữa ứng dụng với CSDL Data Provider

1111

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:1)System.Data.Oledb : Sử dụng với Access (cid:1)System.Data.SqlCient : Sử dụng với SQLServer Ứng với mỗi tên miền: (cid:1)System.Data.Oledb.OledbConnection (cid:1)System.Data.SqlClient.SqlConnection Và các Data Provider khác: (cid:1)System.data.OcracleClient(Ocracle) (cid:1)MicroSoft.data.Odbc(Thông qua ODBC của HðH) (cid:1)Microsoft.Data.Sqlxml (XML trên Sqlserver)

Connection String:

Khi thực hiện kết nối cần khai báo các thông tin cho Connection thông qua thuộc tính Connection String. Tùy thuộc vào Data Provider:

Nếu kết nối với CSDL Access

1212

http://www.thayphet.net

Written by: Dương Thành Phết

Provider: Khai báo Data Provider của Access Data Source: Tên tập tin CSDL (.mdb) User ID: Tên người dùng Password : Mật khẩu

protected void Page_Load(object sender, EventArgs e) {

String StrCnn="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("~/App_Data/QLBansach.mdb"); OleDbConnection cnn = new OleDbConnection (StrCnn); cnn.Open(); //Truy xuất, xử lý dữ liệu cnn.Close();

}

}

1313

http://www.thayphet.net

Written by: Dương Thành Phết

Ví d(cid:4): T(cid:8)o k(cid:11)t n(cid:14)i v(cid:17)i CSDL Access using System; using System.Data; using System.Data.OleDb; public partial class VD2 : System.Web.UI.Page {

Nếu kết nối với CSDL SQLServer

Provider: Khai báo Data Provider của SQLServer

Data Source/Server: Tên Server

Initial Catalog/DataBase: Tên CSDL

User ID/UID: Tên người dùng

Password/ PWD: Mật khẩu

Integrated Security: Cơ chế chứng thực ñăng nhập

true: tài khoản Windows;

1414

http://www.thayphet.net

Written by: Dương Thành Phết

false: Tài khoản SqlServer (ví dụ: sa)

protected void Page_Load(object sender, EventArgs e) {

String StrCnn="Data Source=.; Initial Catalog=QLbansach;

User ID=sa;Password=“;

SqlConnection cnn = new SqlConnection(StrCnn); cnn.Open(); //Truy xuất, xử lý dữ liệu cnn.Close();

}

}

1515

http://www.thayphet.net

Written by: Dương Thành Phết

Ví d(cid:4): T(cid:8)o k(cid:11)t n(cid:14)i v(cid:17)i CSDL SQLServer using System; using System.Data; using System.Data.sqlClient; public partial class KetnoiCSDL : System.Web.UI.Page {

Các thuộc tính Của Connection

DataBase: Tên CSDL

DataSource: Tên Server

Provider:Tương ứng với Provider của HQTCSDL

State: Tình trạng kết nối của Connection:

Broken: Kết nối ñã bị ngắt khi ñã kết nối

Closed: Kết nối ñã ñóng

Connecting: ðang kết nối

Executing: Kết nối ñang thực hiện một lệnh

Fetching: Kết nối ñang truy xuất dữ liệu

1616

http://www.thayphet.net

Written by: Dương Thành Phết

Open: Kết nối ñang mở

Các phương thức

Change Databse: Thay ñổi DataBase làm việc

Close : ðóng kết nối

Dispose: Giải phóng bộ nhớ

1717

http://www.thayphet.net

Written by: Dương Thành Phết

Open: Thực hiện kết nối

2.2 Command

Sau khi tạo kết nối CSDL, mọi thao tác với nguồn

dữ liệu có thể ñược thực hiện thông qua Command.

Tùy theo loại Connection ñối tượng Command

thuộc tên miền:

System.Data.OleDb.OleDbCommand

1818

http://www.thayphet.net

Written by: Dương Thành Phết

System.Data.SqlClient.SqlCommand

Tạo Command

As New ;

.Connection=;

.CommandText=Lệnh SQL>;

Cú pháp:

As New ();

.Connection=;

1919

http://www.thayphet.net

Written by: Dương Thành Phết

Hoặc

Các thuộc tính Của Command

CommandText: Lệnh SQL hay tên Procedure

CommandType: Loại Command

Text: (Mặc ñịnh): Là câu lệnh SQL

StoredProcedure: Tên thủ tục

TableDirect: Tên Connectionủa table

SqlCommand cmd As SqlCommand = New SqlCommand();

cmd.Connection = cnn;

cmd.CommandType = CommandType.Text;

cmd.CommandText = "Select * From Khachhang"

2020

http://www.thayphet.net

Written by: Dương Thành Phết

VD:

Parameters (cid:2) Lệnh SQL trong commandText có thể sử dụng

(cid:3) ? (khi sử dụng Access) (cid:3) @Tênbiến (khi sử dụng SQLServer) thay cho trị chưa xác ñịnh và khi thực hiện sẽ dùng ñối tượng Parameters ñể truyền giá trị vào dấu ?/ @Tênbiến.

2121

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:2) Tùy theo Command Parameter sẽ khai báo khác nhau

OleDbParameter

As New OleDbParameter();

OleDbParameter

As New OleDbparameter();

OleDbParameter

As New OleDbParameter (,);

Access

SqlParameter

As New SqlParameter();

SqlParameter

As New SqlParameter();

SqlParameter

As New SqlParamter(,);

2222

http://www.thayphet.net

Written by: Dương Thành Phết

SQLServer

Các thuộc tính cần chú ý:

Direction: Giá trị cho biết lọai tham số

Input: (mặc ñịnh) Loại tham số ñầu vào

InputOutput: Loại tham số ñầu vào và ra

Output: Loại tham số ñầu ra

ReturnValue: Loại tham số nhận trị trả về

OleDbType / SqlDbType: Kiểu dữ liệu của tham số.

ParameterName: Tên tham số

2323

http://www.thayphet.net

Written by: Dương Thành Phết

Value: Giá trị tham số

Where MaKH=?”;

OleDbParameter Par As

OleDbParameter= cmd.CreateParameter();

VD: Khi sử dụng OleDbCommand cmd.CommandText=”Select * From KhachHang

Par.Value=”KH01”; cmd.Parameters.Add(Par); VD: Khi sử dụng SqlDbCommand cmd.CommandText=”Select * From KhachHang

Where MaKH=@MaKH”;

SqlParameter Par As

SqlParameter = cmd.CreateParameter();

Par.ParameterName=”@MaKH”; Par.Value=”KH01”; cmd.Parameters.Add(Par);

2424

http://www.thayphet.net

Written by: Dương Thành Phết

cmd.CommandText=”Select * From BangDiem

Where Masv=? And MaMH=?”;

OleDbParameter Par1 As OleDbParameter= cmd.CreateParameters.Add(“Sinhvien”,OleDbType.Char,4); Par1.Value=”SV01” OleDbParameter Par2 As OleDbParameter= cmd.CreateParameters.Add(“Monhoc”,OleDbType.Char,4); Par2.Value=”MH01”

2525

http://www.thayphet.net

Written by: Dương Thành Phết

ðưa tham số vào tập hợp Parameters VD: Khi sử dụng OleDbCommand

cmd.CommandText=”Select * From BangDiem

Where Masv=@MaSV and MaMH = @MaMH ”;

SqlDbParameter Par1 As SqlDbParameter=

cmd.CreateParameters.Add(“@MaSV”,SqlType.Char,4);

Par1.Value=”SV01”

SqlDbParameter Par2 As SqlDbParameter=

cmd.CreateParameters.Add(“@MaMH”,SqlType.Char,4);

Par2.Value=”MH01”;

2626

http://www.thayphet.net

Written by: Dương Thành Phết

VD: Khi sử dụng SqlDbCommand

Tạo tham số và ñưa vào tập hợp Parameters

2727

http://www.thayphet.net

Written by: Dương Thành Phết

VD: Procedure SpKetQuaThi cần 2 tham số ñầu vào: @MaSV , @MaMH và trả về ðiểm thi của Môn học của sinh viên ñó.

cmd.CommandText=”spKetQuaThi”; cmd.CommandType=CommandType.StoredProcedure; OleDbParameter ts3 As New OleDbParameter(); ts3.Direction=ParameterDirection.ReturnValue; ts3.OleDbType=OleDn.OleDbType.Int; cmd.parameters.Add(ts3); OleDbParameter ts1 as OleDbParameter= cmd.Parameters.Add(“@MaSV”,OleDbType.Char,4); Ts1.Value=”Sv01”; OleDbParameter ts2 as OleDbParameter= cmd.Parameters.Add(“@MAMH”,OleDbType.Char,4);

Ts1.Value=”MH01”;

2828

http://www.thayphet.net

Written by: Dương Thành Phết

Thực hiện Command:

SqlDataReader As SqlDataReader; = .ExecuteReader;

(cid:2) Phương thức ExecuteReader: Trả về ñối tượng DataReader ñể ñọc dữ liệu mỗi lần một dòng với phương thức Read.(DataReader ñọc dữ liệu trực tiếp từ nguồn nên phải duy trì kết nối ñến khi ñọc xong)

VD: SqlDataReader rd As SqlDataReader;

rd = cmd.ExecuteReader;

2929

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:2) Phương thức ExcuteNoneQuery: Dùng thực thi các phát biểu T-Sql như: Insert, Update, Delete, Create,… (cid:2) Phương thức ExcuteScalar: Trả về từ phát biểu SQL dạng Select chỉ có một cột một hàng.

try

{

SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Catalog=QLbansach;User ID=sa;Password=");

SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; //Loại command là câu lệnh SQL cmd.CommandText = "Select Count(*) From Chude"; cmd.CommandType = CommandType.Text; //Mở kết nối và lấy dữ liệu cnn.Open(); int count = (int)cmd.ExecuteScalar(); response.write(count.ToString()); cnn.Close();

} catch (Exception) {

response.write("Không thành công!“);

}

3030

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ 1: Sử dụng Command với câu lệnh Select

try

{

SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Catalog=QLbansach;User ID=sa;Password=");

SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; //Biến Commnad thao tác Insert, Update, Delete cmd.CommandText = "Insert Into Chude(tencd) Values(n'văn hóa')"; cmd.CommandType = CommandType.Text; cnn.Open(); cmd.ExecuteNonQuery(); response.write("Thành công!“); cnn.Close();

} catch (Exception) {

response.write(“Thất bại!“);

}

3131

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ 2: Sử dụng Command với lệnh Insert,Update,Delete

try

{

SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Catalog=QLbansach;User ID=sa;Password=");

SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; SqlParameter parTenLinhVuc =

new SqlParameter("@TENCHUDE", SqlDbType.NVarChar, 50);

cmd.CommandText =

"INSERT INTO CHUDE VALUES(@TENCHUDE)";

cmd.CommandType = CommandType.Text; cmd.Parameters.Add(parTenchude); parTenLinhVuc.Value = TextBox1.Text; cnn.Open(); cmd.ExecuteNonQuery(); cnn.Close(); response.write("Thành công!“);

} catch (Exception) {

response.write(“Thất bại!“);

}

3232

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ 3: Command với lệnh Insert,Update,Delete + Tham số

2.3 DataReader

(cid:2)Là ñối tượng truy cập dữ liệu trực tiếp, sử dụng con trỏ phía Server và duy trì kết nối với Server trong suốt quá trình ñọc dữ liệu, (cid:2)Tùy theo loại Connection mà DataReader thuộc tên miền:

System.Data.OleDb.OleDbDataReader

3333

http://www.thayphet.net

Written by: Dương Thành Phết

System.Data.SqlClient.SqlDataReader

Các thuộc tính

3434

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:2) FieldCout: Số cột trên dòng hiện hành của DataReader (cid:2) IsClosed : Cho biết dataReader ñã ñóng (cid:2) Item:Trị của cột truyền vào. Tham số truyền vào là tên cột hoặc số thứ tự tính từ 0.

Các phương thức

(cid:2) Close: ðóng DataReader (cid:2) GetFieldType: Trả về kiểu dữ liệu của tham số truyền vào. (cid:2) GetName: Trả về tên của cột truyền vào (cid:2) GetValue: Trả về trị của cột truyền vào (cid:2) Read: Di chuyển ñến dòng kế tiếp và trả về true nếu còn dòng ñể di chuyển, ngược lại trả về False.

3535

http://www.thayphet.net

Written by: Dương Thành Phết

Trong khi dataReader ñang mở các thao tác dữ liệu trên nguồn dữ liệu ñều không thể cho ñến khi dataReader ñóng lại bằng lệnh Close

try {

SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Catalog=QLbansach;User ID=sa;Password=");

SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = "SELECT * FROM Nhaxuatban"; cmd.CommandType = CommandType.Text; cnn.Open(); IDataReader dr = cmd.ExecuteReader(); String list = ""; while (dr.Read()) {

list = list + dr["TenNXB"].ToString().Trim() + " ";

} dr.Close(); response.write(list.ToString()); cnn.Close();

}

catch (Exception)

{

response.write(“Thất bại!“);

}

3636

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ 1:DataReader với lệnh Insert,Update,Delete +Tham số

try {

SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Catalog=QLbansach;User ID=sa;Password=");

SqlCommand cmd = new SqlCommand("Getnhaxuatban", cnn); cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; cnn.Open(); IDataReader dr = cmd.ExecuteReader(); String list = ""; while (dr.Read()) {

list = list + dr["TenNXB"].ToString();

} dr.Close(); response.write(list.ToString()); cnn.Close();

} catch (Exception)

{

response.write(“Thất bại!“);

}

3737

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ 2: DataReader + gọi procedure (VD: Getnhaxuatban)

Create Procedure GetchudeByMaCD @Machude char(15) AS Begin

Select * From Chude Where MaCD=@Machude

End

3838

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ 2: DataReader + gọi procedure có tham số

try {

SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Ctalog=QLbansach;User ID=sa;Password=");

SqlCommand cmd = new SqlCommand("GetchudeByMaCD", cnn); cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; SqlParameter parMALINHVUC =

new SqlParameter("@Machude", SqlDbType.NChar, 10);

parMAVHUDE.Value = TextBox1.Text; cmd.Parameters.Add(parMACHUDE); cnn.Open(); IDataReader dr = cmd.ExecuteReader(); String list = ""; while (dr.Read()) {

list = list + dr["Tenchude"].ToString();

} dr.Close(); response.write(list.ToString()); cnn.Close();

} catch (Exception)

{

response.write(“Thất bại!“);

3939

}

http://www.thayphet.net

Written by: Dương Thành Phết

2.4 DataAdapter

(cid:2) ðể lấy dữ liệu từ nguồn dữ liệu về cho ứng dụng, chúng ta sử dụng ñối tượng DataAdapter. ðối tượng này cho phép ta lấy cấu trúc và dữ liệu của các bảng. (cid:2) DataAdapter là một bộ gồm 4 ñối tượng:

4040

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:3) SelectCommand: Cho phép lấy thông tin từ nguồn. (cid:3) InsertCommand: Cho phép thêm dữ liệu vào bảng trong nguồn. (cid:3) UpdateCommand: Cho phép ñiều chỉnh dữ liệu của bảng trong nguồn. (cid:3) DeleteCommand: Cho phép xóa dữ liệu của bảng trong nguồn.

(cid:2) Tạo DataAdapter Cú pháp: DataAdapter =

New DataAdapter(,)

4141

http://www.thayphet.net

Written by: Dương Thành Phết

DataAdapter chỉ thao tác với nguồn dữ liệu qua ñối tượng connection ñang kết nối, khi Connection chưa mở thì DataAdapter sẽ tự ñộng mở kết nối khi cần và ñóng lại

(cid:2) Các thuộc tính của DataAdapter

4242

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:3) DeleteCommand: ðối tượng Command chứa nội dung lệnh hủy các mẫu tin trên nguồn dữ liệu. (cid:3) InsertCommand: ðối tượng Command chứa nội dung lệnh thêm các mẫu tin trên nguồn dữ liệu. (cid:3) SelectCommand: ðối tượng Command chứa nội dung lệnh truy xuất các mẫu tin trên nguồn dữ liệu. (cid:3) UpdateCommand: ðối tượng Command chứa nội dung lệnh sửa các mẫu tin trên nguồn dữ liệu.

(cid:2) Các chức năng của DataAdapter

(cid:3) Lấy dữ liệu từ nguồn:

- DataTable: Fill()

- DataSet: Fill()

Dữ liệu lấy về DataSet dưới dạng các dataTable với tên là: Table0,Table1, Table2. . .

- ðổ dữ liệu vào Datset cho bảng DataTable nếu chưa có sẽ tạo mới:

4343

http://www.thayphet.net

Written by: Dương Thành Phết

Fill(,)

(cid:3) Phương thức trả về mẫu tin lấy ñược

Dim DS as New Dataset() Dim so As Integer so= DA.Fill(DS,”Sinhvien”) (cid:3) ðể cập nhật dữ liệu về nguồn

4444

http://www.thayphet.net

Written by: Dương Thành Phết

Update(): Cập nhật các dòng (Các ñối tượng DataRow) vào nguồn dữ liệu. Update(): Cập nhật các thay ñổi trên tất cả các bảng của Dataset vào nguồn dữ liệu. Update(): Cập nhật tất cả các thay ñổi trên DataTable vào nguồn dữ liệu. Update(,) Cập nhật các thay ñổi trên bảng trong Dataset vào nguồn.

2.5 Dataset

(cid:2) Dataset là một mô hình CSDL quan hệ thu nhỏ ñáp ứng nhu cầu của ứng dụng. (cid:2) Dataset chứa các bảng (DataTable), các quanhệ (DataRelation) và các ràng buộc (constraint) (cid:2) Dataset thuộc tên miền: System.Data.Dataset. (cid:2) Khai báo

New System.Data.Dataset()

Hoặc

4545

http://www.thayphet.net

Written by: Dương Thành Phết

New System.Data.Dataset()

(cid:2) Các phương thức

Thêm một bảng vào Dataset

Tables.Add()

Một bảng mới tự ñộng ñược tạo ra với tên mặc ñịnh Table1, Table2 . . .

Tables.Addd()

Một bảng mới tạo ra theo ñúng Ghi chú: Tên bảng có phân biệt chữ in, thường Xóa bảng ra khỏi Dataset

Tables.Remove()

4646

http://www.thayphet.net

Written by: Dương Thành Phết

Xóa bảng ra khỏi tập hợp Table.

Kiểm tra bảng có thuộc về Dataset

Tables.Contains()

Lấy chỉ số của bảng

Tables.IndexOf()

Lấy số bảng trong Dataset Tables.Count

Lấy ra một bảng trong Dataset Tables()

ðể cập nhật các thay ñổi trên Dataset

4747

http://www.thayphet.net

Written by: Dương Thành Phết

AcceptChanges()

ðể hủy các thay ñổi trên Dataset RejectChanges()

ðể xóa bỏ mọi dữ liệu trên dataSet

Clear()

ðể tạo một bản sau của Dataset

Clone()

ðể xóa bỏ Dataset

Dispone() Giải phóng mọi tài nguyên trên vùng nhớ

Dataset ñang sử dụng. Tạo quan hệ giữa hai bảng trong Dataset.

Relations.Add(, )

Xóa quan hệ giữa hai bảng trong Dataset.

4848

http://www.thayphet.net

Written by: Dương Thành Phết

Relations.Remove()

2.6 DataTable

Dữ liệu các bảng trong nguồn dữ liệu ñược lấy về và ñưa vào các DataTable. DataTable thuộc tên miền : System.Data.dataTable. Cú pháp:

New DataTable(); New DataTable();

4949

http://www.thayphet.net

Written by: Dương Thành Phết

DataTable ñược hình thành từ DataColumn và DataRow.

try {

SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Catalog=QLbansach;User ID=sa;Password="); SqlDataAdapter da=new SqlDataAdapter("select * from CHUDE", cnn); SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da); DataSet ds = new DataSet(); da.Fill(ds); foreach (DataRow row in ds.Tables[0].Rows) if (row["MaCD"]=="1") {

row["TENCHUDE"] = "BBB";

} response.write(ds.Tables[0].Rows[2].ItemArray[1].ToString()); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind(); //Không sử dụng SqlCommandBuilder thì không thể update dữ liệu. da.Update(ds);

} catch (Exception)

{

response.write(“Thất bại!“);

}

5050

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ 1: DataAdapter + update dữ liệu

try {

SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Catalog=QLbansach;User ID=sa;Password=");

SqlDataAdapter da = new SqlDataAdapter("GETNXB", cnn); DataSet ds = new DataSet(); da.Fill(ds); response.write(ds.Tables[0].Rows[2].ItemArray[1].ToString()); GridView2.DataSource = ds.Tables[0]; GridView2.DataBind();}

catch (Exception)

{

response.write(“Thất bại!“);

}

5151

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ 2: DataAdapter + Procedure(GetNXB)

try {

SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Catalog=QLbansach;User ID=sa;Password=");

SqlCommand cmd = new SqlCommand("Getchude", cnn); cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; SqlParameter parMACD =

new SqlParameter("@MACD", SqlDbType.NChar, 10);

parMACD.Value = "1"; cmd.Parameters.Add(parMACD); cnn.Open(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind(); cnn.Close();

} catch (Exception)

{

response.write(“Thất bại!“);

5252

}

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ 3: DataAdapter + Procedure tham số (Getchude)

try { SqlConnection cnn = new SqlConnection("Data Source=(local);

Initial Catalog=QLbansach;User ID=sa;Password="); SqlCommand cmd = new SqlCommand("GETNXB", cnn); cmd.Connection = cnn; cmd.CommandType = CommandType.StoredProcedure; cnn.Open(); SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = cmd; //da.InsertCommand = cmd; //da.DeleteCommand = cmd; //da.UpdateCommand = cmd; DataSet ds = new DataSet(); da.Fill(ds); GridView1.DataSource = ds.Tables[0]; GridView1.DataBind(); cnn.Close();

} catch (Exception)

{

response.write(“Thất bại!“);

5353

}

http://www.thayphet.net

Written by: Dương Thành Phết

Ví dụ 4: DataAdapter + ðối số là command

2.7 ðối Tượng Transaction

Dữ liệu các bảng trong nguồn dữ liệu ñược lấy về và ñưa vào các DataTable. DataTable thuộc tên miền : System.Data.dataTable. Cú pháp:

New DataTable(); New DataTable();

5454

http://www.thayphet.net

Written by: Dương Thành Phết

DataTable ñược hình thành từ DataColumn và DataRow.

3. Xây Dựng Lớp Xử Lý Dữ Liệu

(cid:2) ðể các thao tác với CSDL thuận lợi. Ta nên xây dựng lớp xử lý dữ liệu ñảm nhận việc kết nối CSDL và các thủ tục xử lý.

(cid:3) Docbang(string LenhSQL): Nhằm thực hiện câu lệnh truy vấn SQL ñể trả về dữ liệu là 1 DataTable (cid:3) Thuchienlenh(string LenhSQL): Nhằm thực hiện câu lệnh Insert, Update, Delete ñể cập nhật dữ liệu cho CSDL. (cid:2) Thực hiện:

5555

http://www.thayphet.net

Written by: Dương Thành Phết

(cid:3) Tạo cấu hình chuỗi kết nối CSDL trong tập tin Webconfig. (Có thể dùng SQLDatasource ñể sinh mã)

Tên lớp: XLDL.cs

(cid:3) Tạo mới lớp XLDL.cs: Thêm mới 1 Item

5656

http://www.thayphet.net

Written by: Dương Thành Phết

Sẽ lưu lớp này trong thư mục App_Code

Thực hiện mã code cho lớp XLDL.cs . . . using System.Data.SqlClient; public class XLDL { static string StrCnn = ConfigurationManager.ConnectionStrings["KetnoiCSDL"]. ConnectionString.ToString();

public static DataTable Docbang(string LenhSQL) {

using (SqlConnection cnn = new SqlConnection(StrCnn)) {

SqlDataAdapter bodocghi = new SqlDataAdapter(LenhSQL, cnn); DataTable bang = new DataTable(); bodocghi.Fill(bang); return bang;

}

} . . .

5757

http://www.thayphet.net

Written by: Dương Thành Phết

. . . public static void thuchienlenh(string LenhSQL)

{

using (SqlConnection cnn = new SqlConnection(StrCnn)) {

cnn.Open(); SqlCommand bolenh = new SqlCommand(LenhSQL, cnn); bolenh.ExecuteNonQuery(); cnn.Close();

}

}

}

5858

http://www.thayphet.net

Written by: Dương Thành Phết