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