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
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
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
.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
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;
– 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
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
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
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
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
;
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: http://www.connectionstrings.com/
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
–
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
© 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
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
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
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
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
CommandPhngPhng
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
( 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
();
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
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
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
CommandTe
x
t
=
“SELECT * FROM HocSinh WHERE tenhocsinh =
@ten”;
cmd.CommandText =
“
INSERT INTO
HocSinh
(
id hocsinh
,
tenhocsinh
,
dtb
)
”
+
INSERT
INTO
HocSinh
(
id
_
hocsinh
,
© 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
(
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
––
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
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
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
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
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
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
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
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
đ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
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;
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
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
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
hin
giao
tác
vi
ng
dng
CSDLThc
hin
giao
tác
vi
ng
dng
CSDL
Cách 2Cách 2
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-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
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();
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