Chào các bạn! Vì nhiều lý do từ nay Truyen2U chính thức đổi tên là Truyen247.Pro. Mong các bạn tiếp tục ủng hộ truy cập tên miền mới này nhé! Mãi yêu... ♥

giao trinh asp

 

 

 

KI

*N TRÚC ADO.NET VÀ

MÔ HÌNH 3 T*NG TRONG PHÁT TRI*N

*

NG D*NG WEB

Ð* Ng*c Cu*ng - ITDLU

Email: [email protected]

M*C L*C

Ki*n trúc ADO.NET ......................................................................................................... 2

Trình cung c*p d* li*u ADO.NET ................................................................................... 2

Các l*p thu*c SQL Server provider ................................................................................ 3

L*p SqlConnection .......................................................................................................... 3

T*o d*i tu*ng SqlConnection ...................................................................................... 3

L*p SqlCommand ........................................................................................................... 4

T*o d*i tu*ng SqlCommand ....................................................................................... 4

Các phuong th*c SqlCommand .................................................................................. 4

L*p SqlDataReader ........................................................................................................ 5

Các phuong th*c SqlDataReader ............................................................................... 5

Các bu*c th*c hi*n m*t truy v*n trong ADO.NET .......................................................... 5

Các ví d* ......................................................................................................................... 5

Chèn thêm m*t hàng vào vào b*ng Employees .......................................................... 6

C*p nh*t m*t hàng trong b*ng Employees ................................................................. 7

Xóa m*t hàng trong b*ng Employees .......................................................................... 8

Ð*m t*t c* hàng trong b*ng Employees ...................................................................... 8

L*y t*t c* hàng trong b*ng Employees ....................................................................... 9

Ð*c nhi*u t*p d* li*u ................................................................................................. 10

Mô hình 3 t*ng (three tier) ............................................................................................. 11

M*c dích .................................................................................................................... 11

Ví d* .............................................................................................................................. 12

1

Ki

*n trúc ADO.NET

ADO.NET s* d*ng ki*n trúc da t*ng xoay quanh m*t vài khái ni*m chính nhu là

Connection, Command, và các d*i tu*ng DataSet

M*t trong nh*ng di*m khác bi*t nh*t gi*a ADO.NET v*i m*t vài công ngh* CSDL khác

là cách mà ADO.NET tuong tác v*i các lo*i ngu*n d* li*u (data source) khác: t*p tin

van b*n, excel, XML, c* s* d* li*u (CSDL)

Trình cung c

*p d* li*u ADO.NET

Trình cung c*p d* li*u (data provider) là m*t t*p các l*p ADO.NET cho phép truy c*p

vào m*t ngu*n d* li*u c* th*, th*c thi các câu l*nh truy v*n, và l*y d* li*u. V* co b*n,

m*t trình cung c*p d* li*u là c*u n*i gi*a *ng d*ng và m*t ngu*n d* li*u

Các l*p t*o nên m*t trình cung c*p d* li*u bao g*m:

Connection: s* d*ng d*i tu*ng này d* thi*t l*p k*t n*i v*i m*t ngu*n d* li*u

Command: s* d*ng d*i tu*ng này d* th*c thi các câu l*nh truy v*n và các th*

t*c (stored procedure)

DataReader: cung c*p cách d*c d* li*u nhanh và tu*n t*

DataAdapter: có 2 cách dùng. Cách th* nh*t là dùng d* d* d* li*u t* CSDL vào

DataSet. Cách còn l*i là dùng d* c*p nh*t d* li*u t* DataSet và d*ng b* hóa

các thay d*i dó v*i CSDL

ADO.NET không ch*a các d*i tu*ng data provider chung. Thay vào dó, nó bao g*m

các data provider du*c thi*t k* riêng bi*t cho các lo*i ngu*n d* li*u khác

nhau. M*i lo*i data provider d*u có các l*p Connect, Command, DataReader,

DataAdapter và du*c c* th* hóa (implement) d* t*i uu cho h* qu*n tr* co s* d* li*u

dó. Ví d*, n*u b*n c*n t*o ra m*t k*t n*i d*n m*t co s* d* li*u SQL Server, b*n s* s*

d*ng m*t l*p connection tên là SqlConnection.

ADO.NET bao g*m 4 lo*i data provider:

SQL Server provider: du*c dùng d* truy c*p vào CSDL SQL Server (phiên b*n

7.0 tr* v* sau)

OLE DB provider: du*c dùng d* truy c*p t*i b*t k* ngu*n d* li*u h* tr* chu*n

OLE DB (Object Linking and Embedding for Databases) nhu Access, Excel,

Oracle, SQL Server phiên b*n tru*c 7.0

Oracle provider: du*c dùng d* truy c*p vào CSDL Oracle (phiên b*n 8i tr* v*

sau)

ODBC provider: du*c dùng d* k*t n*i t*i các co s* d* li*u có h* tr* chu*n

ODBC (Open Database Connectivity)

2

 

 

 

 

 

 

 

 

 

SQL Server .NET

Provider

SQL Server

Database

Các l

*p thu*c SQL Server provider

SqlConnection

SqlCommand

SqlDataReader

SqlDataAdapter

L

*p SqlConnection

3

.NET

Application

OLE DB .NET

Provider

OLE DB

Provider

Oracle .NET

Provider

Data Source

Oracle

Hình 1. Ki*n trúc ADO.NET

Ð*i tu*ng SqlConnection du*c s* d*ng d* k*t n*i t*i m*t CSDL SQL Server.

T

*o d*i tu*ng SqlConnection

SqlConnection

cnn =

new

SqlConnection("server=localhost;database=Northwind;uid=sa;pwd=sa"

);

Trong dó:

server: là tên c*a máy tính dang ch*y SQL Server.

database: là tên co s* d* li*u mu*n k*t n*i.

Database

uid: là tên ngu*i dùng co s* d* li*u.

pwd: là m*t kh*u tuong *ng c*a ngu*i dùng.

L

*p SqlCommand

Ð*i tu*ng SqlCommand du*c s* d*ng d* th*c thi m*t câu l*nh truy v*n t*i CSDL SQL

Server

T

*o d*i tu*ng SqlCommand

T*o d*i tu*ng SqlCommand d*i di*n cho m*t câu truy v*n

SqlCommand

cmd = new SqlCommand

();

cmd.Connection = cnn;

cmd.CommandType =

CommandType

.Text;

cmd.CommandText =

"SELECT * FROM Employees"

;

T*o d*i tu*ng SqlCommand d*i di*n cho m*t th* t*c

SqlCommand

cmd = new SqlCommand("GetEmployees"

, cnn);

cmd.CommandType =

CommandType

.StoredProcedure;

ho*c

SqlCommand

cmd = cnn.CreateCommand();

cmd.CommandType =

CommandType

.StoredProcedure;

cmd.CommandText =

"GetEmployees";

Các ph

uong th*c SqlCommand

Phuong th*c Mô t*

ExecuteNonQuery() Th*c thi m*t câu l*nh SQL không tr* v* t*p k*t qu* nhu

INSERT, UPDATE, DELETE, CREATE, ALTER, DROP. Giá

tr* tr* v* c*a hàm này chính là s* dòng b* *nh hu*ng khi

th*c thi truy v*n.

ExecuteScalar() Th*c thi l*nh câu l*nh SQL và tr* v* giá tr* c*t d*u tiên c*a

hàng d*u tiên, nh*ng giá tr* th*a b* lo*i b*. Phuong th*c này

thu*ng du*c s* d*ng khi th*c thi m*t l*nh SELECT có s*

d*ng các hàm k*t h*p nhu COUNT (), SUM () ...

ExecuteReader() Th*c hi*n m*t truy v*n SELECT và tr* v* m*t d*i tu*ng

DataReader.

4

SqlCommand

cmd = cnn.CreateCommand();

L

*p SqlDataReader

Ð*i tu*ng SqlDataReader cho phép d*c d* li*u tr* v* t* câu l*nh SELECT m*t cách

tu*n t*, m*i l*n d*c m*t hàng

Các ph

uong th*c SqlDataReader

Phuong th*c Mô t*

Read() Chuy*n DataReader d*n dòng ti*p theo trong t*p k*t qu* và

GetInt32(), GetChar(),

GetDateTime(), Get...()

d*c d* li*u trên dòng dó. Tr* v* giá tr* False khi không còn

dòng d* d*c

L*y giá tr* c*a m*t c*t (theo ch* s*) c*a hàng hi*n t*i, tr* v*

ki*u d* li*u du*c quy d*nh nhu tên các phuong th*c

NextResult() N*u d* li*u tr* v* t* câu l*nh SQL có nhi*u hon 2 t*p k*t

qu* thì phuong th*c này s* chuy*n DataReader d*n t*p k*t

qu* ti*p theo

Close() Ðóng DataReader

Các b

u*c th*c hi*n m*t truy v*n trong ADO.NET

1. T*o d*i tu*ng SqlConnection

2. T*o d*i tu*ng SqlCommand d*i di*n cho m*t l*nh truy v*n

3. Truy*n các tham s* vào d*i tu*ng SqlCommand (n*u có)

4. M* k*t n*i

5. G*i phuong th*c Execute tuong *ng

6. X* lý k*t qu* tr* v* c*a bu*c 5

7. Ðóng k*t n*i

Chú ý: Bu*c 6 & 7 có th* hoán d*i nhau tùy cách x* lý k*t qu* tr* v* t* câu truy v*n

Các ví d

*

Các ví d* du*i dây th*c hi*n trên b*ng Employees c*a CSDL Northwind

Employees

Coumn Name Data Type

EmployeeID int

TitleOfCourtesy nvarchar(25)

LastName nvarchar(20)

FirstName nvarchar(10)

HireDate datetime

5

Chèn thêm m

*t hàng vào vào b*ng Employees

Câu l*nh SQL d* t*o th* t*c Employees_Add

CREATE

PROCEDURE

Employees_Add

@EmployeeID

int OUTPUT,

@TitleOfCourtesy

varchar(25),

@LastName

varchar(20),

@FirstName

varchar(10

)

AS

INSERT

INTO

Employees

(

TitleOfCourtesy, LastName, FirstName, HireDate)

VALUES

(@TitleOfCourtesy, @LastName, @FirstName, GETDATE());

SET

@EmployeeID =

@@IDENTITY

C#

private

static int Add(string title, string lastName, string

firstName)

{

// 1. Tao doi tuong SqlConnection

// 1.1 Tao chuoi noi

string connectionString =

@"server=.\sqlexpress;database=northwind;integrated

security=true"

;

// 1.2 Tao doi tuong SqlConnection voi chuoi ket noi o tren

using (SqlConnection cnn = new SqlConnection

(connectionString))

{

// 2. Tao doi tuong SqlCommand

SqlCommand

cmd = cnn.CreateCommand();

// 2.1 Dai dien cho mot thu tuc

cmd.CommandType =

CommandType

.StoredProcedure;

// 2.2 Truyen ten thu tuc ma doi tuong SqlCommand se goi

cmd.CommandText =

"Employees_Add"

;

// 3. Truyen cac tham so

cmd.Parameters.Add(

"@EmployeeID", SqlDbType

.Int).Direction =

ParameterDirection

.Output;

cmd.Parameters.Add(

"@TitleOfCourtesy", SqlDbType

.VarChar, 25).Value = title;

cmd.Parameters.Add(

"@LastName", SqlDbType

.VarChar, 20).Value = lastName;

cmd.Parameters.Add(

"@FirstName", SqlDbType

.VarChar, 20).Value = firstName;

// 4. Mo ket noi

cnn.Open();

// 5. Goi ExecuteNonQuery() de thu hien cau truy van

// rs chinh la so hang duoc chen them vao bang

int

rs = cmd.ExecuteNonQuery();

// 6. Xy ly ket qua tra ve

if

(rs > 0)

{

// 6.1 Lay gia tri EmployeeID cua hang vua duoc them vao

int empID = (int)cmd.Parameters["@EmployeeID"

].Value;

return

empID;

}

else

{

Console.WriteLine("Insert fail"

);

}

// 7. Dong ket noi

6

cnn.Close();

return

0;

}

}

C

*p nh*t m*t hàng trong b*ng Employees

Câu l*nh SQL d* t*o th* t*c Employees_Update

CREATE

PROCEDURE

[Employees_Update]

@EmployeeID

int,

@TitleOfCourtesy

varchar(25),

@LastName

varchar(20),

@FirstName

varchar(10

)

AS

UPDATE

Employees

SET

TitleOfCourtesy = @TitleOfCourtesy,

LastName

= @LastName,

FirstName

=

@FirstName

WHERE

EmployeeID =

@EmployeeID

C#

private

static int Update(int empID, string title, string lastName, string

firstName)

{

// 1. Tao doi tuong SqlConnection

// 1.1 Tao chuoi noi

string connectionString =

@"server=.\sqlexpress;database=northwind;integrated

security=true"

;

// 1.2 Tao doi tuong SqlConnection voi chuoi ket noi o tren

using (SqlConnection cnn = new SqlConnection

(connectionString))

{

// 2. Tao doi tuong SqlCommand

SqlCommand

cmd = cnn.CreateCommand();

// 2.1 Dai dien cho mot thu tuc

cmd.CommandType =

CommandType

.StoredProcedure;

// 2.2 Truyen ten thu tuc ma doi tuong SqlCommand se goi

cmd.CommandText =

"Employees_Update"

;

// 3. Truyen cac tham so

cmd.Parameters.Add(

"@EmployeeID", SqlDbType

.Int).Value = empID;

cmd.Parameters.Add(

"@TitleOfCourtesy", SqlDbType

.VarChar, 25).Value = title;

cmd.Parameters.Add(

"@LastName", SqlDbType

.VarChar, 20).Value = lastName;

cmd.Parameters.Add(

"@FirstName", SqlDbType

.VarChar, 20).Value = firstName;

// 4. Mo ket noi

cnn.Open();

// 5. Goi ExecuteNonQuery() de thuc hien cau truy van

// rs chinh la so hang duoc cap nhat

int

rs = cmd.ExecuteNonQuery();

// 6. Dong ket noi

cnn.Close();

7

// 7. Tra ve ket qua

return

rs;

}

}

Xóa

m*t hàng trong b*ng Employees

Câu l*nh SQL d* t*o th* t*c Employees_Delete

CREATE

PROCEDURE

[Employees_Delete]

@EmployeeID

int

AS

DELETE

Employees WHERE EmployeeID =

@EmployeeID

C#

private

static int Delete(int

empID)

{

// 1. Tao doi tuong SqlConnection

// 1.1 Tao chuoi noi

string

connectionString =

@"server=.\sqlexpress;database=northwind;integrated security=true"

;

// 1.2 Tao doi tuong SqlConnection voi chuoi ket noi o tren

using (SqlConnection cnn = new SqlConnection

(connectionString))

{

// 2. Tao doi tuong SqlCommand

SqlCommand

cmd = cnn.CreateCommand();

// 2.1 Dai dien cho mot thu tuc

cmd.CommandType =

CommandType

.StoredProcedure;

// 2.2 Truyen ten thu tuc ma doi tuong SqlCommand se goi

cmd.CommandText =

"Employees_Delete"

;

// 3. Truyen cac tham so

cmd.Parameters.Add(

"@EmployeeID", SqlDbType

.Int).Value = empID;

// 4. Mo ket noi

cnn.Open();

// 5. Goi ExecuteNonQuery() de goi thu hien cau truy van

// rs chinh la so hang bi xoa khoi bang

int

rs = cmd.ExecuteNonQuery();

// 6. Dong ket noi

cnn.Close();

// 7. Tra ve ket qua

return

rs;

}

}

Ð

*m t*t c* hàng trong b*ng Employees

Câu l*nh SQL d* t*o th* t*c Employees_Count

8

CREATE

PROCEDURE

[Employees_Count]

AS

SELECT

COUNT(EmployeeID) FROM Employees

C#

public

static int

Count()

{

// 1. Tao doi tuong SqlConnection

// 1.1 Tao chuoi noi

string

connectionString =

@"server=.\sqlexpress;database=northwind;integrated security=true"

;

// 1.2 Tao doi tuong SqlConnection voi chuoi ket noi o tren

using (SqlConnection cnn = new SqlConnection

(connectionString))

{

// 2. Tao doi tuong SqlCommand

SqlCommand

cmd = cnn.CreateCommand();

// 2.1 Dai dien cho mot thu tuc

cmd.CommandType =

CommandType

.StoredProcedure;

// 2.2 Truyen ten thu tuc ma doi tuong SqlCommand se goi

cmd.CommandText =

"Employees_Count"

;

// 3. Truyen cac tham so

// 4. Mo ket noi

cnn.Open();

// 5. Goi ExecuteScalar() lay ket qua (cot 1 hang 1)

int rs = Convert

.ToInt32(cmd.ExecuteScalar());

// 6. Dong ket noi

cnn.Close();

// 7. Tra ve ket qua

return

rs;

}

}

L

*y t*t c* hàng trong b*ng Employees

Câu l*nh SQL d* t*o th* t*c Employees_All

CREATE

PROCEDURE

[Employees_All]

AS

SELECT

* FROM

Employees

C#

private

static void

All()

{

// 1. Tao doi tuong SqlConnection

// 1.1 Tao chuoi noi

string connectionString =

@"server=.\sqlexpress;database=northwind;integrated

security=true"

;

// 1.2 Tao doi tuong SqlConnection voi chuoi ket noi o tren

9

using (SqlConnection cnn = new SqlConnection

(connectionString))

{

// 2. Tao doi tuong SqlCommand

SqlCommand

cmd = cnn.CreateCommand();

// 2.1 Dai dien cho mot thu tuc

cmd.CommandType =

CommandType

.StoredProcedure;

// 2.2 Truyen ten thu tuc ma doi tuong SqlCommand se goi

cmd.CommandText =

"Employees_All"

;

// 3. Truyen cac tham so

// 4. Mo ket noi

cnn.Open();

// 5 + 6. Goi ExecuteReader() va doc qua tung hang cua bang ket qua

using (IDataReader dr = cmd.ExecuteReader(CommandBehavior

.CloseConnection))

{

// 6.1 Doc tuan tu tung hang

while

(dr.Read())

{

// 6.2 Xuat du lieu cua hang hien tai

Console.WriteLine(String.Format("{0} {1} {2}"

,

dr[

"EmployeeID"],

// lay du lieu cot EmpID

dr[

"LastName"],

// lay du lieu cot LastName

dr[

"FirstName"]));

// lay du lieu cot FirstName

}

}

// 7. Dong ket noi

cnn.Close();

}

}

Ð

*c nhi*u t*p d* li*u

Câu l*nh SQL d* t*o th* t*c Employees_Multi

CREATE

PROCEDURE

[Employees_Multi]

AS

SELECT

TOP 5 * FROM

Employees

SELECT

TOP 5 * FROM

Customers

C#

public

static void

ReadMultipleResultSets()

{

// 1. Tao doi tuong SqlConnection

// 1.1 Tao chuoi noi

string connectionString =

@"server=.\sqlexpress;database=northwind;integrated

security=true"

;

// 1.2 Tao doi tuong SqlConnection voi chuoi ket noi o tren

using (SqlConnection cnn = new SqlConnection

(connectionString))

{

// 2. Tao doi tuong SqlCommand

SqlCommand

cmd = cnn.CreateCommand();

10

// 2.1 Dai dien cho mot thu tuc

cmd.CommandType =

CommandType

.StoredProcedure;

// 2.2 Truyen ten thu tuc ma doi tuong SqlCommand se goi

cmd.CommandText =

"Employees_Multi"

;

// 3. Truyen cac tham so

// 4. Mo ket noi

cnn.Open();

// 5 + 6. Goi ExecuteReader() va doc qua tung hang cua bang ket qua

using (IDataReader dr = cmd.ExecuteReader(CommandBehavior

.CloseConnection))

{

// 6.1 Doc tap du lieu dau tien (Employees)

while

(dr.Read())

{

// 6.1 Xuat du lieu cua hang hien tai

Console.WriteLine(String.Format("{0} {1} {2}"

,

dr[

"EmployeeID"],

// lay du lieu cot EmpID

dr[

"LastName"],

// lay du lieu cot LastName

dr[

"FirstName"]));

// lay du lieu cot FirstName

}

// 6.2 Doc tap du lieu tiep theo (Customers)

dr.NextResult();

while

(dr.Read())

{

// 6.3 Xuat du lieu cua hang hien tai

Console.WriteLine(String.Format("{0} {1} {2}"

,

dr[

"CustomerID"],

// lay du lieu cot CusID

dr[

"CompanyName"],

// lay du lieu cot CompanyName

dr[

"ContactName"]));

// lay du lieu cot ContactName

}

}

// 7. Dong ket noi

cnn.Close();

}

}

Mô hình 3 t

*ng (three tier)

Chia nh* ch*c nang c*a *ng d*ng thành các thành ph*n d*a trên công vi*c mà thành

ph*n dó th*c hi*n và nhóm m*i thành ph*n dó thành m*t t*ng.

M

*c dích

Phát tri*n ph*n m*m d*a trên mô hình 3 t*ng cho phép các l*p trình viên có th* c*p

nh*t, thay d*i ch*c nang c*a m*i t*ng riêng bi*t mà không phá v* code c*a các t*ng

khác.

11

Ví d

*

Presentation Tier

ASP.NET Master Pages

ASP.NET Web Forms

ASP.NET Web User Controls

SQL Server

Tên và ch*c nang c*a m*i t*ng trong mô hình 3 t*ng

Gi* s* ngu*i dùng s* d*ng trình duy*t và vào trang web bán hàng tr*c tuy*n nhu hình

du*i

12

Business Tier

C# Class

ASP.NET Master Pages

Data Tier

SQL Server Stored Procedures

ASP.NET Master Pages

ASP.NET Master Pages

Data

SQL Server Data Store

Presentation Tier

Ð* thêm m*t s*n ph*m vào gi* hàng thi ngu*i dùng s* b*m vào nút Add To Cart. Hình

du*i cho th*y lu*ng thông tin ch*y qua các t*ng c*a *ng d*ng

Ngu*i dùng s* d*ng trình duy*t

*

*

*

*ng d*ng Web 3 t*ng du*c

host trên Web Server

Business Tier

S* tuong tác c*a ngu*i dùng v*i 3 t*ng c*a *ng d*ng

1. Ngu*i dùng b*m vào nút Add To Cart d* thêm s*n ph*m vào gi* h*ng

2. T*ng Presentation chuy*n yêu c*u d*n t*ng Business là "Tôi mu*n th*m s*n

ph*m này vào gi* hàng"

3. T*ng Business nh*n yêu c*u và nói t*ng Data "C*p nh*t gi* hàng c*a ngu*i

dùng b*ng cách thêm vào s*n ph*m dã ch*n"

4. T*ng Data c*p nh*t vào CSDL và tr* k*t qu* cho t*ng Business

5. T*ng Business s* x* lý k*t qu* và t*t c* l*i x*y ra trong quá trình c*p nh*t gi*

hàng. Sau dó, t*ng Business s* tr* k*t qu* mà nó dã x* lý du*c cho t*ng

Presentation

13

Internet

Data Tier

*

*

*

*

6. T*ng Presentation s* t*o ra giao di*n gi* hàng * tr*ng thái dã c*p nh*t

7. Ph*n giao di*n s* du*c chuy*n thành HTML và tr* v* trình duy*t c*a ngu*i

dùng

14

Bạn đang đọc truyện trên: Truyen247.Pro