Lp trình và Thit k Web 2
Bài 7
ThaoThao táctác CSDL CSDL vivi ADO .NETADO .NET
Ths. TrnTh Bích Hnh
Khoa CNTT Khoa CNTT –– H.KHTNH.KHTN
© 2009 Khoa Công ngh thông tin
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NiNi
dungdung
NiNi
dungdung
GiithiuADO .NET
KintrúcADO .NET
Mô hình s dng ADO .NET
.NET Data Provider
© 2009 Khoa CNTT - HKHTN
2
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Ni dungNi dung
Ni
dungNi
dung
GiithiuADO .NET
Kin trúc ADO.NET
Mô hình s dng ADO .NET
.NET Data Provider
© 2009 Khoa CNTT - HKHTN
3
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ADO NETADO NET
làlà
gìgì
??
ADO
.
NET
ADO
.
NET
làlà
gìgì
??
ADO.NET
AtiXDtObjtNET
–
A
c
ti
ve
X
D
a
t
a
Obj
ec
t
.
NET
– Công ngh caMicrosoft
Phát
ti
t
ADO
–
Phát
t
r
i
n
t
ADO
– Cung cpcácđitng và hàm th vin dùng đ kt
nivàx l
ý
trên CSDL
ý
© 2009 Khoa CNTT - HKHTN
4
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
SS
lclc
lchlch
ss
phátphát
trintrin
SS
lclc
lchlch
ss
phátphát
trintrin
Native API
DB API
DB API
DB API
Application
Database
Di
DB API
OOpen pen DDataataBBase ase CConnectivityonnectivity
ODBC
Driver
Driver
D
r
i
ve
r
ODBC API
DB API
DB API
© 2009 Khoa CNTT - HKHTN
A
pplication
Database
5
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
SS
lclc
lchlch
ss
phátphát
trintrin
((
tttt
))
SS
lclc
lchlch
ss
phátphát
trintrin
((
tttt
))
OLEDB và ADO
Provider
Provider
ADO
OLE DB
Non-Relational Data
Pr
o
vi
de
r
Provider
Provider
Application
ODBC Driver
Driver
ode
Relational Data
Driver
© 2009 Khoa CNTT - HKHTN
6
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
SS
lclc
lchlch
ss
phátphát
trintrin
((
tttt
))
SS
lclc
lchlch
ss
phátphát
trintrin
((
tttt
))
.NET Data Provider
ADO.NET
Oracle
SQL Server
Relational Data
OLE DB
Oracle
OLE DB
A
DO.NET
Application
ODBC
Non-Relational Data
ODBC
© 2009 Khoa CNTT - HKHTN
7
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Ni dungNi dung
Ni
dungNi
dung
Giithiu ADO.NET
KintrúcADO .NET
Mô hình s dng ADO .NET
.NET Data Provider
© 2009 Khoa CNTT - HKHTN
8
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Kintrúcca ADO NETKintrúcca ADO NET
Kin
trúc
ca
ADO
.
NETKin
trúc
ca
ADO
.
NET
© 2009 Khoa CNTT - HKHTN
9
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NamespacesNamespaces
NamespacesNamespaces
Nu ng dng .NET cntruyxutd liu Phi khai báo
namespace ADO NET
tng
ng
vi
d
liu
cho
ng
dng
namespace
ADO
.
NET
tng
ng
vi
d
liu
cho
ng
dng
i
vi
d
liu
OLE
i
vi
d
liu
OLE
– using System.Data;
–
usin
g
S
y
stem.Data.OleDB
;
g
y
;
iv
i
d
li
u
SQ
L
Se
rv
e
r
d
u
SQ Se e
– using System.Data;
– using System.Data.SqlClient;
© 2009 Khoa CNTT - HKHTN
10
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Ni dungNi dung
Ni
dungNi
dung
Giithiu ADO.NET
KintrúcADO .NET
Mô hình s dng ADO .NET
.NET Data Provider
© 2009 Khoa CNTT - HKHTN
11
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Mô hình s dng ADO NET viPhnmmMô hình s dng ADO NET viPhnmm
Mô
hình
s
dng
ADO
.
NET
vi
Phn
mmMô
hình
s
dng
ADO
.
NET
vi
Phn
mm
SqlDataReader
DataSet
SqlConnection
S
q
lDataAda
p
te
r
SqlCommand
SQL
qp
© 2009 Khoa CNTT - HKHTN
12
12
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Mô hình s dng ADO NET viPhnmmMô hình s dng ADO NET viPhnmm
Mô
hình
s
dng
ADO
.
NET
vi
Phn
mmMô
hình
s
dng
ADO
.
NET
vi
Phn
mm
3
SqlDataReader
Select
1
3
SqlConnectionSqlCommand
2
1
2
SQL
1
Insert
Delete Update
StoreProcedure
Functions
© 2009 Khoa CNTT - HKHTN
13
13
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Mô hình s dng ADO NET viPhnmmMô hình s dng ADO NET viPhnmm
Mô
hình
s
dng
ADO
.
NET
vi
Phn
mmMô
hình
s
dng
ADO
.
NET
vi
Phn
mm
4
DataSet
5
SqlConnectionSqlDataAdapter
3
5
6
SQL
Select
Insert
1
2
1
Delete Update
SqlCommand
© 2009 Khoa CNTT - HKHTN
14
14
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Ni dungNi dung
Ni
dungNi
dung
Giithiu ADO.NET
KintrúcADO .NET
Mô hình s dng ADO .NET
.NET Data Provider
© 2009 Khoa CNTT - HKHTN
15
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NET Data ProviderNET Data Provider
.
NET
Data
Provider
.
NET
Data
Provider
Connection
Command & Parameter
DataReader
DataSet & DataAdapter
Transaction
© 2009 Khoa CNTT - HKHTN
16
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NET Data ProviderNET Data Provider
ConnectionConnection
.
NET
Data
Provider
.
NET
Data
Provider
ConnectionConnection
Data Source
Connection
Application
SQL
Thitlpktni đn Data Source
Data
Source
Application
Thuctính
ConnectionString: Luchuiktni đn Data Source
State: cho bittìnhtr
n
g
caktni
g
Phng thc
Open(): thitlpktni đn Data Source.
© 2009 Khoa CNTT - HKHTN
Close(): ng
tk
tn
i đ
n Data Source.
17
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
VíVí
dd
using System.Data.SqlClient;
string sConnectionString =
"
Initial Catalog=Northwind;
Data Source=localhost;
user=sa
;
;
password=sa;”;
SqlConnection
cnn
=
new
SqlConnection
();
SqlConnection
cnn
=
new
SqlConnection
();
cnn.ConnectionString = sConnectionString;
cnn.Open();
// do somethings
Cl
()
© 2009 Khoa CNTT - HKHTN
cnn.
Cl
ose
()
;
18
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Connection string (Access, SQL Server,…)Connection string (Access, SQL Server,…)
To connection string
To
connection
string
Database ODBC/OLEDB Connection String
Microsoft Access
Provider=Microsoft.Jet.OLEDB.4.0; Data Source=ngDnnFileAccess
Microsoft SQL
Provider=SQLOLEDB;Data Source=ServerName; Initial Catalog=DatabaseName;
UserId=
Username; Password=Password;
String strConn = string.Format(“Provider=Microsoft.Jet.OLEDB.4.0; Data
Source={0}”, HttpContext.Current.Server.MapPath(“database/mydb.mdb”));
© 2009 Khoa CNTT - HKHTN
REF: />19
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ng dntitp tin Accessng dntitp tin Access
ng
dn
ti
tp
tin
Accessng
dn
ti
tp
tin
Access
HttpContext.Current.Server.MapPath(StringPath)
– ánh xđng dntng đi StringPath thành đng dn
đnth mcvtlýtrênServer
–
Ví
d
:
Gi
s
tp
tin
aspx
s
dng
hàm
Server MapPath
–
Ví
d
:
Gi
s
tp
tin
aspx
s
dng
hàm
Server
.
MapPath
đcluti D:\MyWebsite
Kt qu
S M P th(
“
DB db
”
)
D
\
MWbit
\
DB db
S
erver.
M
ap
P
a
th(
my
DB
.m
db
)
;
D
:
\
M
y
W
e
b
s
it
e
\
my
DB
.m
db
Server.MapPath(“Database/myDB.mdb”); D:\MyWebsite\Database\myDB.mdb
Server.MapPath(“ /myDB.mdb”); D:\myDB.mdb
© 2009 Khoa CNTT - HKHTN
20
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
CuCu
hìnhhình
lulu
ConnectionStringConnectionString
trongtrong
Web ConfigWeb Config
CuCu
hìnhhình
lulu
ConnectionStringConnectionString
trongtrong
Web
.
ConfigWeb
.
Config
// Web.Config
<configuration>
<connectionStrings>
<add name=“
OleDbConnectionString"
connectionString=“
Provider=Microsoft.Jet.OLEDB.4.0; Data
Source=
|DataDirectory|\DatabasePath" />
dd
lii
<a
dd
name=“
S
q
l
Connect
i
onStr
i
ng"
connectionString="
SQLOLEDB;Data Source=ServerName; Initial
Catalog=
DatabaseName; UserId=Username; Password=Password" />
</connectionStrings>
b
<system.we
b
>
…
</system.web>
</configuration>
// WebForm.aspx.cs
using System.Configuration;
string
strConn
© 2009 Khoa CNTT - HKHTN
21
string
strConn
=
ConfigurationManager.ConnectionStrings[“SqlConnectionString"].ToString();
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Connection PoolingConnection Pooling
Connection
PoolingConnection
Pooling
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"Integrated Security=SSPI;Initial Catalog=northwind";
conn.Open(); // Pool A is created.
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"Integrated Security=SSPI;Initial Catalog=pubs";
conn.Open();
// Pool B is created because the connection strings differ.
SqlConnection conn = new SqlConnection();
conn.ConnectionString =
"Integrated Security=SSPI;Initial Catalog=northwind";
()
// h ti t i t h l
© 2009 Khoa CNTT - HKHTN
conn.Open
()
;
//
T
h
e connec
ti
on s
t
r
i
ng ma
t
c
h
es poo
l
A.
22
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NET Data ProviderNET Data Provider
.
NET
Data
Provider
.
NET
Data
Provider
Connection
Command & Parameter
DataReader
DataSet & DataAdapter
Transaction
© 2009 Khoa CNTT - HKHTN
23
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
.NET Data Provider .NET Data Provider
––
Command & Paramete
r
Command & Paramete
r
SqlDataReader
3
SqlConnectionSqlCommand
Select
2
1
2
SQL
1
2
2
Insert
SqlParameter
SQL
Delete Update
StoreProcedure
Functions
Thcthicâutruyvn
Functions
© 2009 Khoa CNTT - HKHTN
H tr tham s vào, tham s ra, và giá tr tr v
24
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
CommandCommand
HàmHàm
khikhi
toto
vàvà
ThucThuc
tínhtính
Command
Command
HàmHàm
khikhi
toto
vàvà
ThucThuc
tínhtính
Các hàm khito
new ???Command()
new
???Command()
new ???Command(cmdText)
new ???Command(cmdText, connection)
???C d(
dT t
ti t ti )
new
???C
omman
d(
c
m
dT
ex
t
, connec
ti
on,
t
ransac
ti
on
)
Thuc tính Ý ngha
Connection
Tr
đn đitng ktni
.
Connection
Tr
đn
đi
tng
kt
ni
.CommandType CommandType.Text (mc đnh)
CommandType.StoreProcedure
CommandT
yp
e.TableDirect
yp
.CommandText Câu truy vn SQL hoc tên Store, tên Bng
.CommandTimeOut Thi gian ch đi thc thi 1 câu sql
Parameters
Danh sách
các tham s truyn vào
© 2009 Khoa CNTT - HKHTN
.
Parameters
Danh
sách
các
tham
s
truyn
vào
25
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
CommandCommand
PhngPhng
thcthc
Command
Command
PhngPhng
thcthc
Phng
thc
Ý
ngha
Phng
thc
Ý
ngha
.ExecuteReader()
Tr v mt DataReader
.ExecuteNonQuery()
Tr v s lng dòng b nh hng trên CSDL
.ExecuteScaler()
Tr v 1 giá tr đu tiên (VD: giá tr tính t
ng)
.ExecuteXMLReader()
Tr v 1 XMLReader
© 2009 Khoa CNTT - HKHTN
26
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
OleDbCommandOleDbCommand
VíVí
dd
OleDbCommandOleDbCommand
using System.Data.OleDb;
OleDbConnection cnn = new OleDbConnection();
cnn.ConnectionString =
string.Format
(
"
Provider
=
Microsoft.Jet.OLEDB.
4
.
0
; Data
string.Format
( Provider Microsoft.Jet.OLEDB.
4
.
0
;
Data
Source={0}",
Server.MapPath("~/App_Data/QLHS.mdb"));
OleDbCommand cmd = new OleDbCommand();
d
Cti
c
m
d
.
C
onnec
ti
on
=
cnn;
cmd.CommandText = "INSERT INTO HocSinh(id_hocsinh,
tenhocsinh, dtb)VALUES(5, 'Nguyn Vn A', 8.5)";
cmd.CommandType = CommandType.Text;
cnn.Open();
cmd
ExecuteNonQuery
();
© 2009 Khoa CNTT - HKHTN
cmd
.
ExecuteNonQuery
();
cnn.Close();
27
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
SqlCommandSqlCommand
VíVí
dd
SqlCommandSqlCommand
using System.Data.SqlClient;
SqlConnection cnn = new SqlConnection();
cnn.
ConnectionString
="
Initial
Catalog
=
Northwind
;
cnn.
ConnectionString
Initial
Catalog
Northwind
;
Data Source=localhost; user=sa; password=sa;”;
SqlCommand cmd = new SqlCommand();
d
Cti
cm
d
.
C
onnec
ti
on = cnn;
cmd.
CommandText = "SELECT COUNT(*) FROM Orders";
cmd.CommandT
yp
e = CommandT
yp
e.Text;
yp
yp
cnn.Open();
int count = (int)cmd.ExecuteScalar();
© 2009 Khoa CNTT - HKHTN
cnn.Close();
28
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NET Data ProviderNET Data Provider
ParameterParameter
.
NET
Data
Provider
.
NET
Data
Provider
ParameterParameter
nh
ngha
tham
s
tr n
ào
cho
đi
t ng
Command
nh
ngha
tham
s
tr
uy
n
v
ào
cho
đi
t
ng
Command
Có các thuc tính sau :
Thuc tính Ý ngha
ParameterName
Tên tham s
SqlDbType
Kiud liuca tham s tng ng vikiud liuca SqlServer
Direction
Input, Output, InputOutput, ReturenValue, …
Size
Kích thc ti đa ca d li
u
Value
Giá tr ca tham s (input / Output)
© 2009 Khoa CNTT - HKHTN
29
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ParameterParameter
––
CáchCách
ss
dngdng
Parameter
Parameter
––
CáchCách
ss
dngdng
Mc đích s dng:
Mt vài giá tr trong câu lnh ch
bi
tkhithchincâulnh.
Cnthchincâulnh nhiulnvi các giá tr khác nhau.
Các bcthchin:
Tham
s
hóa
câu
truy
vn
:
?
hoc
@[
tên
tham
s
]
Tham
s
hóa
câu
truy
vn
:
?
hoc
@[
tên
tham
s
]
.
To các parameters tng ng cho command.
tgiátr cho các parameter mi khi dùng command thchin
câu
lnh
câu
lnh
.
© 2009 Khoa CNTT - HKHTN
30
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ParameterParameter
––
ThamTham
ss
hóahóa
câucâu
truytruy
vnvn
Parameter
Parameter
––
ThamTham
ss
hóahóa
câucâu
truytruy
vnvn
SQL Data Provider:
cmd CommandTe t
cmd
.
CommandTe
x
t
=
“SELECT * FROM HocSinh WHERE tenhocsinh =
@ten”;
cmd.CommandText =
“
INSERT INTO
HocSinh
(
id hocsinh
,
tenhocsinh
,
dtb
)
”
+
INSERT
INTO
HocSinh
(
id
_
hocsinh
,
tenhocsinh
,
dtb
)
+
“VALUES(@id, @ten, @dtb)”;
Các
provider
khác
:
Các
provider
khác
:
cmd.CommandText =
“SELECT * FROM HocSinh WHERE tenhocsinh =
?”;
dd
cm
d
.Comman
d
Text =
“INSERT INTO HocSinh(id_hocsinh, tenhocsinh, dtb)” +
“VALUES(?, ?, ?)”;
© 2009 Khoa CNTT - HKHTN
31
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ParameterParameter
––
ToTo
cáccác
thamtham
ss
chocho
CommandCommand
Parameter
Parameter
––
ToTo
cáccác
thamtham
ss
chocho
CommandCommand
Sql Data Provider:
ddd
(“
id
”
lb
)
cm
d
.Parameters.A
dd
(“
id
”
, Sq
l
D
b
Type.Int
)
;
cmd.Parameters.Add(“
ten”, SqlDbType.NVarChar);
cmd.Parameters.Add(“
dtb”, SqlDbType.Float);
OleDb Data Provider:
cmd Parameters Add
(
“
id
”
OleDbType Integer
);
cmd
.
Parameters
.
Add
(
id
,
OleDbType
.
Integer
);
cmd.Parameters.Add(“ten”, OleDbType.VarWChar);
cmd.Parameters.Add(“
dtb”, OleDbType.Numeric);
© 2009 Khoa CNTT - HKHTN
32
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ParameterParameter
––
tt
giágiá
trtr
chocho
cáccác
thamtham
ss
vàvà
thcthc
thithi
Parameter
Parameter
––
tt
giágiá
trtr
chocho
cáccác
thamtham
ss
vàvà
thcthc
thithi
foreach (Student s in studentList)
{
{
cmd.Parameters[“id”].Value = i;
cmd.Parameters
[
“ten”
]
.Value = s.studentName
;
[
]
;
cmd.Parameters[“dtb”].Value = s.studentMarks;
cmd.ExecuteNonQuery();
}
© 2009 Khoa CNTT - HKHTN
33
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
GiGi
StoredProcedureStoredProcedure
VíVí
dd
GiGi
StoredProcedureStoredProcedure
© 2009 Khoa CNTT - HKHTN
34
34
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NET Data ProviderNET Data Provider
.
NET
Data
Provider
.
NET
Data
Provider
Connection
Command & Parameter
DataReader
DataSet & DataAdapter
Transaction
© 2009 Khoa CNTT - HKHTN
35
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NET Data ProviderNET Data Provider
DataReaderDataReader
.
NET
Data
Provider
.
NET
Data
Provider
DataReaderDataReader
SqlDataReader
3
ExecuteReader
()
SqlConnectionSqlCommand
2
ExecuteReader
()
SQ
L
Select
1
2
SQ
T
t
t
t
à
khô
li
Select
BookIDBookID BookNameBookName AuthorAuthor
ii Book iBook i Author Author ii
T
ruy xu
t
t
u
n
t
v
à
khô
ng quay
l
u
i
Chđc, Không cpnhtd liu
© 2009 Khoa CNTT - HKHTN
Ch luli 1 record k
tqu trong b nh vim
il
ntruyxu
t
36
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
DataReaderDataReader
DataReaderDataReader
Mt
s
th c
tính
&
ph ng
thc
Mt
s
th
u
c
tính
&
ph
ng
thc
:
Thuc tính Ý ngha
HasRows
Tr v xem DataReader có đc đc d liu nào không.
FieldCount
Tr v s lng thuc tính trong dòng hin ti (đang đc)
[
int
/string]
Tr
v
giá
tr
ca
thuc
tính
đang
yêu
cu
[
int
/string]
Tr
v
giá
tr
ca
thuc
tính
đang
yêu
cu
Phng thc Ý ngha
R d()
dd li k ti
R
ea
d()
c recor
d
d
li
u
k
ti
p
IsDBNull(i)
Kim tra xem giá tr ct i có b null không
Close()
óng DataReader
© 2009 Khoa CNTT - HKHTN
37
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
: Load: Load
dd
liuliu
vàovào
ListList
VíVí
dd
:
Load
:
Load
dd
liuliu
vàovào
ListList
© 2009 Khoa CNTT - HKHTN
38
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NET Data ProviderNET Data Provider
.
NET
Data
Provider
.
NET
Data
Provider
Connection
Command & Parameter
DataReader
DataSet & DataAdapter
Transaction
© 2009 Khoa CNTT - HKHTN
39
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ii
tngtng
DataSetDataSet
vàvà
DataAdapterDataAdapter
ii
tngtng
DataSetDataSet
vàvà
DataAdapterDataAdapter
DataSet
Data source
DataAdapter
DataTable
Fill
Fill
Update
DataTable
DataAdapter
Fill
Update
Fill
© 2009 Khoa CNTT - HKHTN
40
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ii
tngtng
DataSetDataSet
vàvà
DataAdapterDataAdapter
ii
tngtng
DataSetDataSet
vàvà
DataAdapterDataAdapter
DataSet
Là
c
s
d
liu
đc
lu
tr
trong
b
nh
chính
(
in
memory
–
Là
c
s
d
liu
đc
lu
tr
trong
b
nh
chính
(
in
-
memory
database)
– Mi thao tác thay đid liu đcthchintrênDataSet,
khô
là
h
h
đ
CSDL
khô
ng
là
m
n
h
h
ng
đ
n
CSDL
DataAdapte
r
– Fill: Lyd liut CSDL đ vào DataSet
–
Update: Theo v
t các thay đ
itrênd liu trên DataSet và
cpnhtd liungc vào CSDL
© 2009 Khoa CNTT - HKHTN
41
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
MôMô
hìnhhình
điđi
tngtng
DataAdapterDataAdapter
MôMô
hìnhhình
điđi
tngtng
DataAdapterDataAdapter
SlDtAd t
SelectCommand UpdateCommand InsertCommand DeleteCommand
S
q
lD
a
t
a
Ad
ap
t
er
SqlDataReader
SqlCommand SqlCommand SqlCommand SqlCommand
SELECT
SqlConnection
UPDATE
INSERT
DELETE
© 2009 Khoa CNTT - HKHTN
sp_
SELECT
sp_
UPDATE
sp_
INSERT
sp_
DELETE
42
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
itng SqlDataAdapteritng SqlDataAdapter
i
tng
SqlDataAdapteri
tng
SqlDataAdapter
Mt s thuc tính và phng thc
Thuc tính Ý ngha
SelectCommand
UpdateCommand
InsertCommand
DltC d
D
e
l
e
t
e
C
omman
d
Phng thc Ý ngha
Fill(Dataset)
L
yd liut CSDL và đ
vào Dataset
FillSchema()
Update(…)
Tin hành cpnhtd liu trên DataSet viCSDL
© 2009 Khoa CNTT - HKHTN
43
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
itng DataSetitng DataSet
i
tng
DataSeti
tng
DataSet
Mt s thuc tính và phng thc
Thuc tính Ý ngha
DataSetName
Relations
Tables
Danh sách các table có trong Dataset
Phng thc Ý ngha
GetChange()
Tr v DataSet cha các thay đi trên DataSet đang xét
RejectChanges()
AcceptChanges()
GetXML(), ReadXML(), WriteXML()
© 2009 Khoa CNTT - HKHTN
44
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
VíVí
dd
© 2009 Khoa CNTT - HKHTN
45
45
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NET Data ProviderNET Data Provider
.
NET
Data
Provider
.
NET
Data
Provider
Connection
Command & Parameter
DataReader
DataSet & DataAdapter
Transaction
© 2009 Khoa CNTT - HKHTN
46
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
MtMt
ss
vnvn
đđ
truytruy
xutxut
dd
liuliu
đngđng
thithi
MtMt
ss
vnvn
đđ
truytruy
xutxut
dd
liuliu
đngđng
thithi
Lost Update
Dirty Reads
Non-repeatable Reads
Phantoms
Accounts
N
umber int
Name nvarchar(50)
Balance double
© 2009 Khoa CNTT - HKHTN
47
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Lost UpdateLost Update
Lost
UpdateLost
Update
Transaction 1 Transaction 2
SELECT balance
FROM Accounts
SELECT balance
FROM Accounts
WHERE number = 123;
UPDATE
Accounts
WHERE number = 123;
UPDATE
Accounts
SET balance = balance - 100
WHERE number = 123;
UPDATE Accounts
SET balance = balance - 500
© 2009 Khoa CNTT - HKHTN
WHERE number = 123;
48
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Dirty ReadsDirty Reads
Dirty
ReadsDirty
Reads
Transaction 1 Transaction 2
SELECT balance
FROM Accounts
UPDATE Accounts
SET balance = balance - 100
WHERE number = 123;
WHERE number = 123;
SELECT balance
ROLLBACK
FROM Accounts
WHERE number = 123
© 2009 Khoa CNTT - HKHTN
ROLLBACK
49
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NonNon
repeatable Readsrepeatable Reads
NonNon
repeatable
Readsrepeatable
Reads
Transaction 1 Transaction 2
SELECT balance
FROM Accounts
UPDATE Accounts
SET balance=balance - 100
WHERE number = 123;
WHERE number = 123;
COMMIT
SELECT balance
FROM Accounts
123
© 2009 Khoa CNTT - HKHTN
WHERE number =
123
50
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
PhantomsPhantoms
PhantomsPhantoms
Transaction 1 Transaction 2
INSERT INTO
At
SELECT balance
FROM Accounts
INSERT
INTO
A
ccoun
t
s
VALUES(456, ‘ABC’, 5000);
COMMIT
SELECT balance
FROM Accounts
© 2009 Khoa CNTT - HKHTN
51
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
McMc
đđ
côcô
lplp
IsolationLevelIsolationLevel
McMc
đđ
côcô
lplp
IsolationLevelIsolationLevel
IltiL l
Di t R d
N
RtblRd
Ph t
I
so
l
a
ti
on
L
eve
l
Di
r
t
y
R
ea
d
N
on-
R
epea
t
a
bl
e
R
ea
d
Ph
an
t
oms
ReadUncommitted
xx x
ReadCommitted
xx
RepeatableRead
x
Serializable
© 2009 Khoa CNTT - HKHTN
52
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Thchingiaotácvi ng dng CSDLThchingiaotácvi ng dng CSDL
Thc
hin
giao
tác
vi
ng
dng
CSDLThc
hin
giao
tác
vi
ng
dng
CSDL
Có 2 cách đ thc hin 1 giao tác (nhiu lnh T-SQL) cho
ng dng
ng
dng
.
– Cách 1 : Vit storeproc HQTSQL + Gi thc hin store
thông qua đitng
SqlCommand
+
SqlParamenter
thông
qua
đi
tng
SqlCommand
+
SqlParamenter
– Cách 2 : Qun lý Giao tác phía ng dng, ch gi thc hin
tn
g
câu tru
y
vn T-SQL
gy
© 2009 Khoa CNTT - HKHTN
53
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Thchingiaotácvi ng dng CSDLThchingiaotácvi ng dng CSDL
Thc
hin
giao
tác
vi
ng
dng
CSDLThc
hin
giao
tác
vi
ng
dng
CSDL
Cách 1Cách 1
Cách
1
:
Cách
1
:
Calling
SqlDataReader
StoredProcedure
sp_AAA
Calling
sp_AAA
SqlConnectionSqlCommand
SqlParameter
SQL
T-SQL : Select 1
T-SQL : Insert 1
T-SQL : Update2
T-SQL : Select 2
© 2009 Khoa CNTT - HKHTN
54
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Thchingiaotácvi ng dng CSDLThchingiaotácvi ng dng CSDL
Thc
hin
giao
tác
vi
ng
dng
CSDLThc
hin
giao
tác
vi
ng
dng
CSDL
Cách 2Cách 2
Cách
2
:
Cách
2
:
Calling
SqlDataReader
StoredProcedure
sp_AAA
Calling
sp_AAA
SqlConnectionSqlCommand
SqlParameter
SQL
T-SQL : Select 1
T-SQL : Insert 1
T-SQL : Update2
T-SQL : Select 2
T-SQL : Select 1
T-SQL : Insert 1
T
-
SQL : Update
2
© 2009 Khoa CNTT - HKHTN
T
-
SQL
:
Update
2
T-SQL : Select 2
55
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Thchingiaotácvi ng dng CSDLThchingiaotácvi ng dng CSDL
Thc
hin
giao
tác
vi
ng
dng
CSDLThc
hin
giao
tác
vi
ng
dng
CSDL
Cách 2Cách 2
Cách
2
:
Cách
2
:
SqlDataReader
SqlConnectionSqlCommand
SqlParameter
SQL
SqlTransaction
T-SQL : Select 1
T-SQL : Insert 1
T
-
SQL : Update
2
T-SQL : Select 1T-SQL : Insert 1T-SQL : Update2T-SQL : Select 2
© 2009 Khoa CNTT - HKHTN
T
-
SQL
:
Update
2
T-SQL : Select 2
56
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
itng SqlTransactionitng SqlTransaction
i
tng
SqlTransactioni
tng
SqlTransaction
Mt s thuc tính và phng thc
Thuc tính Ý ngha
Connection
Trđn đi tng SqlConnection cn to transaction
IsolationLevel
Enum Thitlpmccôlp cho Transaction
Phng thc Ý ngha
ConnObj.BeginTransaction()
Khito i tng SqlTransaction bng i tng
SqlConnection
Commit(…)
RollBack(…)
Save
(
SavePointName
)
To
save point
đ
có
th
Rollback
© 2009 Khoa CNTT - HKHTN
()
To
save
point
đ
có
th
Rollback
57
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
VíVí
dd
// Create the connection and transaction objects.
SqlConnection cnn = new SqlConnection( strConnectString );
SqlTransaction
trans = null;
SqlTransaction
trans
=
null;
try {
cnn.Open();
trans = cnn.BeginTransaction();
// Do some stuff here
SqlCommand cmd = new SqlCommand( strQuery, cnn, trans );
cmd.ExecuteNonQuery();
// Commit the transaction.
//
Commit
the
transaction.
trans.Commit();
} catch {
if( trans != null )
llb k
()
trans.Ro
llb
ac
k
()
;
} finally {
// Close the connection.
if
(
cnn.State == ConnectionState.O
p
en
)
© 2009 Khoa CNTT - HKHTN
58
(
p
)
cnn.Close();
}
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
ThitThit
lplp
IsolationLevelIsolationLevel
VíVí
dd
ThitThit
lplp
IsolationLevelIsolationLevel
© 2009 Khoa CNTT - HKHTN
59
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
TngTng
ktkt
TngTng
ktkt
Phân bit ODBC, OLEDB, ADO, ADO.NET
Mô hình s dng ADO .NET
– Connection
– Command & Parameter
– DataReader
–
DataAdapte
r
& DataSet
– Transaction
Cá
đ
t
t
d
li
đ
thi
•
Cá
cv
n
đ
t
ruy xu
t
d
li
u
đ
ng
thi
• Các mc đ cô lp - IsolationLevel
© 2009 Khoa CNTT - HKHTN
60