Tải bản đầy đủ (.pdf) (15 trang)

Bài 7: Thiết kê và lập trình web với ASP.NET - Thao tác CSDL với ADO.NET

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (820.23 KB, 15 trang )

Lp trình và Thit k Web 2
Bài 7
ThaoThao táctác CSDL CSDL vivi ADO .NETADO .NET
Ths. TrnTh Bích Hnh
Khoa CNTT Khoa CNTT –– H.KHTNH.KHTN
© 2009 Khoa Công ngh thông tin
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NiNi
dungdung
NiNi
dungdung
 GiithiuADO .NET
 KintrúcADO .NET
 Mô hình s dng ADO .NET
 .NET Data Provider
© 2009 Khoa CNTT - HKHTN
2
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Ni dungNi dung
Ni

dungNi

dung
 GiithiuADO .NET
 Kin trúc ADO.NET
 Mô hình s dng ADO .NET
 .NET Data Provider
© 2009 Khoa CNTT - HKHTN
3
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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 caMicrosoft
Phát
ti
t
ADO

Phát
t
r
i
n
t
ADO
– Cung cpcácđitng và hàm th vin dùng đ kt
nivàx l
ý
trên CSDL
ý
© 2009 Khoa CNTT - HKHTN
4
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
SS
lclc
lchlch
ss
phátphát
trintrin

SS
lclc
lchlch
ss
phátphát
trintrin
 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
SS
lclc
lchlch
ss
phátphát
trintrin
((
tttt
))
SS
lclc
lchlch
ss
phátphát
trintrin
((
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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
SS
lclc
lchlch
ss
phátphát
trintrin
((
tttt
))
SS
lclc
lchlch
ss
phátphát
trintrin
((
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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Ni dungNi dung
Ni

dungNi

dung
 Giithiu ADO.NET
 KintrúcADO .NET
 Mô hình s dng ADO .NET
 .NET Data Provider
© 2009 Khoa CNTT - HKHTN
8
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET

Kintrúcca ADO NETKintrúcca ADO NET
Kin

trúc

ca

ADO
.
NETKin

trúc

ca

ADO
.
NET
© 2009 Khoa CNTT - HKHTN
9
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NamespacesNamespaces
NamespacesNamespaces
 Nu ng dng .NET cntruyxutd liu  Phi khai báo
namespace ADO NET
tng
ng
vi
d
liu

cho
ng
dng
namespace

ADO
.
NET

tng
ng
vi
d
liu
cho
ng
dng

i
vi
d
liu
OLE

i
vi
d
liu
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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Ni dungNi dung
Ni

dungNi

dung
 Giithiu ADO.NET
 KintrúcADO .NET
 Mô hình s dng ADO .NET
 .NET Data Provider
© 2009 Khoa CNTT - HKHTN
11
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Mô hình s dng ADO NET viPhnmmMô hình s dng ADO NET viPhnmm


hình

s

dng

ADO
.
NET


vi

Phn

mmMô

hình

s

dng

ADO
.
NET

vi

Phn

mm
SqlDataReader
DataSet
SqlConnection
S
q
lDataAda
p
te
r

SqlCommand
SQL
qp
© 2009 Khoa CNTT - HKHTN
12
12
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Mô hình s dng ADO NET viPhnmmMô hình s dng ADO NET viPhnmm


hình

s

dng

ADO
.
NET

vi

Phn

mmMô

hình

s


dng

ADO
.
NET

vi

Phn

mm
3
SqlDataReader
Select
1
3
SqlConnectionSqlCommand
2
1
2
SQL
1
Insert
Delete Update
StoreProcedure
Functions
© 2009 Khoa CNTT - HKHTN
13
13
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET

Mô hình s dng ADO NET viPhnmmMô hình s dng ADO NET viPhnmm


hình

s

dng

ADO
.
NET

vi

Phn

mmMô

hình

s

dng

ADO
.
NET

vi


Phn

mm
4
DataSet
5
SqlConnectionSqlDataAdapter
3
5
6
SQL
Select
Insert
1
2
1
Delete Update
SqlCommand
© 2009 Khoa CNTT - HKHTN
14
14
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Ni dungNi dung
Ni

dungNi

dung
 Giithiu ADO.NET

 KintrúcADO .NET
 Mô hình s dng ADO .NET
.NET Data Provider
© 2009 Khoa CNTT - HKHTN
15
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NET Data ProviderNET Data Provider

ConnectionConnection

.
NET

Data

Provider
.
NET

Data

Provider

ConnectionConnection
Data Source
Connection
Application
SQL
 Thitlpktni đn Data Source
Data

Source
Application
 Thuctính
ConnectionString: Luchuiktni đn Data Source
State: cho bittìnhtr

n
g
caktni

 g
 Phng thc
Open(): thitlpktni đn Data Source.




© 2009 Khoa CNTT - HKHTN
Close(): ng

tk

tn

i đ

n Data Source.
17
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
VíVí
dd
 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET

Connection string (Access, SQL Server,…)Connection string (Access, SQL Server,…)

To connection string

To

connection

string
Database ODBC/OLEDB Connection String
Microsoft Access
Provider=Microsoft.Jet.OLEDB.4.0; Data Source=ngDnnFileAccess
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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ng dntitp tin Accessng dntitp tin Access
ng

dn

ti

tp


tin

Accessng

dn

ti

tp

tin

Access
 HttpContext.Current.Server.MapPath(StringPath)
– ánh xđng dntng đi StringPath thành đng dn
đnth mcvtlýtrênServer


d
:
Gi
s
tp
tin
aspx
s
dng
hàm
Server MapPath



d
:

Gi
s
tp
tin

aspx
s
dng
hàm
Server
.
MapPath
đcluti D:\MyWebsite
Kt 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
CuCu
hìnhhình
lulu
ConnectionStringConnectionString
trongtrong
Web ConfigWeb Config
CuCu
hìnhhình
lulu
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();
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
 Thcthicâutruyvn

Functions
© 2009 Khoa CNTT - HKHTN
 H tr tham s vào, tham s ra, và giá tr tr v
24
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
CommandCommand

HàmHàm
khikhi
toto
vàvà
ThucThuc
tínhtính
Command

Command


HàmHàm
khikhi
toto
vàvà
ThucThuc
tínhtính
Các hàm khito
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
)
Thuc tính Ý ngha
Connection
Tr
đn đitng ktni
.
Connection
Tr
đn


đi

tng

kt

ni
.CommandType CommandType.Text (mc đnh)
CommandType.StoreProcedure
CommandT
yp
e.TableDirect
yp
.CommandText Câu truy vn SQL hoc tên Store, tên Bng
.CommandTimeOut Thi gian ch đi thc thi 1 câu sql
Parameters
Danh sách
các tham s truyn vào
© 2009 Khoa CNTT - HKHTN
.
Parameters
Danh

sách
các

tham

s


truyn

vào
25
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
CommandCommand

PhngPhng
thcthc
Command

Command


PhngPhng
thcthc
Phng
thc
Ý
ngha
Phng
thc
Ý
ngha
.ExecuteReader()
Tr v mt DataReader
.ExecuteNonQuery()
Tr v s lng dòng b nh hng 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd

OleDbCommandOleDbCommand
VíVí
dd
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, 'Nguyn Vn A', 8.5)";
cmd.CommandType = CommandType.Text;
 cnn.Open();
cmd
ExecuteNonQuery
();
© 2009 Khoa CNTT - HKHTN

cmd
.
ExecuteNonQuery
();
cnn.Close();
27
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd

SqlCommandSqlCommand
VíVí
dd
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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
NET Data ProviderNET Data Provider


ParameterParameter
.
NET

Data

Provider
.
NET

Data

Provider


ParameterParameter
nh
ngha
tham
s
tr n
ào
cho
đi
t ng
Command

nh
ngha

tham
s
tr
uy
n
v
ào
cho
đi
t

ng
Command
 Có các thuc tính sau :
Thuc tính Ý ngha
ParameterName
Tên tham s
SqlDbType
Kiud liuca tham s tng ng vikiud liuca SqlServer
Direction
Input, Output, InputOutput, ReturenValue, …
Size
Kích thc ti đa ca d li

u

Value
Giá tr ca tham s (input / Output)
© 2009 Khoa CNTT - HKHTN
29

Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ParameterParameter
––
CáchCách
ss
dngdng
Parameter

Parameter

––
CáchCách
ss
dngdng
 Mc đích s dng:


Mt vài giá tr trong câu lnh ch

bi

tkhithchincâulnh.
Cnthchincâulnh nhiulnvi các giá tr khác nhau.
 Các bcthchin:

Tham
s
hóa
câu
truy

vn
:
?
hoc
@[
tên
tham
s
]

Tham
s
hóa
câu
truy
vn
:

?
hoc
@[
tên
tham
s
]
.
To các parameters tng ng cho command.
tgiátr cho các parameter mi khi dùng command thchin
câu
lnh

câu
lnh
.
© 2009 Khoa CNTT - HKHTN
30
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ParameterParameter
––
ThamTham
ss
hóahóa
câucâu
truytruy
vnvn
Parameter

Parameter

––
ThamTham
ss
hóahóa
câucâu
truytruy
vnvn
 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ParameterParameter
––
ToTo
cáccác
thamtham
ss
chocho
CommandCommand
Parameter

Parameter

––
ToTo
cáccác
thamtham
ss
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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ParameterParameter
––
tt
giágiá
trtr
chocho
cáccác
thamtham
ss
vàvà
thcthc
thithi
Parameter

Parameter

––
tt

giágiá
trtr
chocho
cáccác
thamtham
ss
vàvà
thcthc
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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd


GiGi
StoredProcedureStoredProcedure
VíVí
dd

GiGi
StoredProcedureStoredProcedure
© 2009 Khoa CNTT - HKHTN
34
34
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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 cpnhtd liu





© 2009 Khoa CNTT - HKHTN
 Ch luli 1 record k

tqu trong b nh vim

il

ntruyxu

t
36
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
DataReaderDataReader
DataReaderDataReader
Mt
s
th c
tính
&
ph ng
thc

Mt
s
th
u

c
tính
&

ph

ng
thc
:
Thuc tính Ý ngha
HasRows
Tr v xem DataReader có đc đc d liu nào không.
FieldCount
Tr v s lng thuc tính trong dòng hin ti (đang đc)
[
int
/string]
Tr
v
giá
tr
ca
thuc
tính
đang
yêu
cu
[
int
/string]

Tr
v
giá
tr
ca
thuc
tính
đang
yêu
cu
Phng thc Ý ngha
R d()

dd li k ti
R
ea
d()

c recor
d

d

li
u
k

ti
p
IsDBNull(i)

Kim tra xem giá tr ct i có b null không
Close()
óng DataReader
© 2009 Khoa CNTT - HKHTN
37
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
: Load: Load
dd
liuliu
vàovào
ListList
VíVí
dd
:

Load

:

Load

dd
liuliu
vàovào
ListList
© 2009 Khoa CNTT - HKHTN
38
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ii
tngtng
DataSetDataSet
vàvà
DataAdapterDataAdapter
ii
tngtng
DataSetDataSet
vàvà

DataAdapterDataAdapter
DataSet
Data source
DataAdapter
DataTable
Fill
Fill
Update
DataTable
DataAdapter
Fill
Update
Fill
© 2009 Khoa CNTT - HKHTN
40
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
ii
tngtng
DataSetDataSet
vàvà
DataAdapterDataAdapter
ii
tngtng
DataSetDataSet
vàvà
DataAdapterDataAdapter
 DataSet

c
s

d
liu
đc
lu
tr
trong
b
nh
chính
(
in
memory


c
s
d
liu
đc
lu
tr
trong
b
nh
chính
(
in
-
memory


database)
– Mi thao tác thay đid liu đcthchintrênDataSet,
khô

 h
h 
đ
CSDL
khô
ng

m

n
h
h


ng
đ
n
CSDL
 DataAdapte
r
– Fill: Lyd liut CSDL đ vào DataSet



Update: Theo v


t các thay đ

itrênd liu trên DataSet và
cpnhtd liungc vào CSDL
© 2009 Khoa CNTT - HKHTN
41
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
MôMô
hìnhhình
điđi
tngtng
DataAdapterDataAdapter
MôMô
hìnhhình
điđi
tngtng
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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
itng SqlDataAdapteritng SqlDataAdapter
i

tng

SqlDataAdapteri

tng

SqlDataAdapter
 Mt s thuc tính và phng thc
Thuc tính Ý ngha
SelectCommand

UpdateCommand
InsertCommand
DltC d
D
e
l
e
t
e
C
omman
d
Phng thc Ý ngha


Fill(Dataset)
L

yd liut CSDL và đ

vào Dataset
FillSchema()
Update(…)
Tin hành cpnhtd liu trên DataSet viCSDL
© 2009 Khoa CNTT - HKHTN
43
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
itng DataSetitng DataSet
i


tng

DataSeti

tng

DataSet
 Mt s thuc tính và phng thc
Thuc tính Ý ngha
DataSetName
Relations
Tables
Danh sách các table có trong Dataset
Phng thc Ý ngha
GetChange()
Tr v DataSet cha các thay đi trên DataSet đang xét
RejectChanges()
AcceptChanges()
GetXML(), ReadXML(), WriteXML()
© 2009 Khoa CNTT - HKHTN
44
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd
VíVí
dd
© 2009 Khoa CNTT - HKHTN
45
45
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
MtMt
ss
vnvn
đđ
truytruy
xutxut
dd
liuliu
đngđng

thithi
MtMt
ss
vnvn
đđ
truytruy
xutxut
dd
liuliu
đngđng
thithi
 Lost Update
 Dirty Reads
 Non-repeatable Reads
 Phantoms
Accounts
N
umber int
Name nvarchar(50)
Balance double
© 2009 Khoa CNTT - HKHTN
47
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi 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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET

McMc
đđ
côcô
lplp

IsolationLevelIsolationLevel
McMc
đđ
côcô
lplp

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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Thchingiaotácvi ng dng CSDLThchingiaotácvi ng dng CSDL
Thc


hin

giao

tác

vi

ng

dng

CSDLThc

hin

giao

tác

vi

ng

dng

CSDL
 Có 2 cách đ thc hin 1 giao tác (nhiu lnh T-SQL) cho
ng dng

ng

dng
.
– Cách 1 : Vit storeproc  HQTSQL + Gi thc hin store
thông qua đitng
SqlCommand
+
SqlParamenter
thông

qua

đi

tng

SqlCommand
+

SqlParamenter
– Cách 2 : Qun lý Giao tác  phía ng dng, ch gi thc hin
tn
g
câu tru
y
vn T-SQL
gy
© 2009 Khoa CNTT - HKHTN
53

Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Thchingiaotácvi ng dng CSDLThchingiaotácvi ng dng CSDL
Thc

hin

giao

tác

vi

ng

dng

CSDLThc

hin

giao

tác

vi

ng

dng


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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Thchingiaotácvi ng dng CSDLThchingiaotácvi ng dng CSDL
Thc


hin

giao

tác

vi

ng

dng

CSDLThc

hin

giao

tác

vi

ng

dng

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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
Thchingiaotácvi ng dng CSDLThchingiaotácvi ng dng CSDL
Thc

hin

giao

tác

vi

ng

dng

CSDLThc

hin

giao

tác


vi

ng

dng

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
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
itng SqlTransactionitng SqlTransaction
i

tng

SqlTransactioni

tng

SqlTransaction
 Mt s thuc tính và phng thc
Thuc tính Ý ngha
Connection
Trđn đi tng SqlConnection cn to transaction
IsolationLevel
Enum Thitlpmccôlp cho Transaction
Phng thc Ý ngha
ConnObj.BeginTransaction()

Khito i tng SqlTransaction bng i tng
SqlConnection
Commit(…)
RollBack(…)
Save
(
SavePointName
)
To
save point
đ

th
Rollback
© 2009 Khoa CNTT - HKHTN
()
To
save

point

đ

th
Rollback

57
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd

VíVí
dd
// 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();
}
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
VíVí
dd

ThitThit
lplp

IsolationLevelIsolationLevel
VíVí
dd

ThitThit
lplp
IsolationLevelIsolationLevel
© 2009 Khoa CNTT - HKHTN
59
Lp trình và Thitk Web 2 – Bài 7: Thao tác CSDL vi ADO .NET
TngTng
ktkt
TngTng
ktkt
 Phân bit ODBC, OLEDB, ADO, ADO.NET
 Mô hình s dng ADO .NET
– Connection
– Command & Parameter
– DataReader

DataAdapte
r
& DataSet
– Transaction


đ
t
t
d

li
đ
thi


cv

n
đ
t
ruy xu
t
d
li
u
đ
ng
thi
• Các mc đ cô lp - IsolationLevel
© 2009 Khoa CNTT - HKHTN
60

×