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: AzTruyen.Top