Professional Documents
Culture Documents
I HC KHOA HC
KHOA CNG NGH THNG TIN
HU - 2008
v cc kiu cha trong IL. V d, c cc bng nh ngha kiu, phng thc, trng d
liu, tham s, v thuc tnh. Bng tham chiu cha cc thng tin v tt c cc tham chiu
v kiu v cc assembly khc. Trnh bin dch JIT ph thuc vo cc bng ny chuyn
IL sang m my.
IL: Vai tr ca IL c cp trc y. Trc khi CLS c th s dng IL, n phi
c ng gi vo trong mt assembly dng DLL hoc EXE. Assembly dng EXE phi
c mt im nhp (entry point) n c th thc thi. Ngc li, Assembly dng DLL,
c thit k hot ng nh l mt th vin m lnh nm gi cc nh ngha kiu.
10
11
12
13
thnh
float thuong = x / y;
14
V d:
int i;
Cu lnh ny khai bo mt s int tn l i. Trnh bin dch thc s cha cho php s dng
bin ny cho n khi chng ta khi to n bng mt gi tr. Lnh khai bo ny ch lm
nhim v cp pht mt vng nh (4 bytes) cho bin i.
Sau khi khai bo, chng ta c th gn mt gi tr cho bin bng ton t gn =, nh sau:
i = 10;
15
ushort
System.UInt16
uint
System.UInt32
M t
S nguyn c du 8-bit
S nguyn c du 16-bit
S nguyn c du 32-bit
S nguyn c du 64-bit
S nguyn khng du 8bit
S nguyn khng du 16bit
S nguyn khng du 32bit
ulong
System.UInt64
0:264-1
S ch s c ngha
float
double
System.Single
System.Double
7
15/16
S ch s c ngha
28
Gi tr
Biu din 1 k t 16-bit (Unicode)
K t tng ng
Du nhy on
Du nhy i
K t \
Null
K t Alert
K t Backspace
K t Form feed
K t xung dng
K t Carriage return
17
\t
\v
K t Tab
K t Vertical tab
Kiu CTS
System.Object
string
System.String
M t
Kiu d liu gc, mi kiu d liu khc trong CTS u k tha
t y (k c cc kiu d liu gi tr)
Chui k t Unicode
18
Console.WriteLine("s1 is
Console.WriteLine("s2 is
s1 = "another string";
Console.WriteLine("s1 is
Console.WriteLine("s2 is
return 0;
" + s1);
" + s2);
now " + s1);
now " + s2);
}
}
is
is
is
is
a string
a string
now another string
now a string
C php ny cn cho php chng ta ngt dng trong hng chui, nh sau:
string st = @"'Day la dong thu nhat
Day la dong thu hai.";
Khi , gi tr ca chui st s l:
'Day la dong thu nhat
Day la dong thu hai.
19
2.4.1.1 Cu lnh if
Cu lnh if ca C# c k tha t cu trc if ca C v C++. C php ca n l:
if (condition)
statement1(s)
[else
statement2(s)]
20
=1");
=2");
=3");
is not 1,2, or 3");
2.4.2 Cu lnh lp
C# cung cp bn loi lnh lp (for, while, do...while, v foreach) cho php lp trnh vin
c th thc thi mt khi lnh lin tip cho n khi mt iu kin xc nh no c
tha mn.
2.4.2.1 Cu lnh lp for
C php ca cu lnh lp for c c php nh sau:
for (initializer; condition; iterator)
statement(s)
trong :
Initializer:biu thc c c lng trc khi ln lp u tin c thc thi (y
Gio trnh Visual Studio .NET
21
V d: on chng trnh sau minh ha vic kim tra nhp vo mt chui t dng lnh,
s dng khi chui nhp vo l abc:
string correctPwd = abc, st = ;
while (st != correctPwd)
{
Console.Write(Password = );
st = Console.ReadLine();
}
22
statements;
}
while(condition)
V d: on chng trnh minh ha vic kim tra nhp vo mt chui t dng lnh, s
dng khi chui nhp vo l abc, c vit li theo kiu cu lnh lp do...while nh sau:
string correctPwd = abc, st; // rng st khng cn khi to l
do {
Console.Write(Password = );
st = Console.ReadLine();
}
while (st != correctPwd)
23
s in ra kt qu nh th ny trong ca s Console:
----i = 1
----i = 3
24
kiu d liu c th, lnh return phi tng ng khng tr v kiu d liu g, hoc l tr v
mt gi tr c kiu d liu thch hp.
2.5 Cu trc chng trnh
Trong phn u ca chng ny, chng ta vit mt chng trnh C# n gin u tin.
Ti thi im , chng ta ch quan tm n cch thc qun l, bin dch solution, project
ca Visual Studio. Sau khi nm vng c cu trc iu khin cng nh mt s c
im c th ca ngn ng, gi l lc chng ta xem xt cu trc ca mt chng trnh vit
bng C#.
2.5.1 Lp i tng
Lp i tng ng vai tr rt ln trong cc chng trnh C#. Ni mt cch nm na, lp
i tng l khun c ra cc i tng c th (gi l instance), nh ngha cc thnh
phn d liu v chc nng c th c cho mi i tng c th.
Thnh vin ca lp i tng l cc d liu v cc hm bn trong lp i tng n,
gi l d liu thnh phn v hm thnh phn. Cc thnh vin ca lp i tng c th
c khai bo l public (c th c truy xut trc tip t bn ngoi lp i tng), hoc
private (ch c nhn thy trong chnh khai bo lp i tng), protected (ch c
truy xut t bn trong chnh lp i tng hoc cc lp i tng khc k tha t n).
D liu thnh phn l cc thnh phn bn trong lp cha d liu cho class c th
l cc trng d liu (field), hng s (constant) hoc l cc s kin (event).
Trng d liu l cc bin c khai bo mc lp i tng. V d di y nh
ngha mt lp i tng c tn l PhoneCustomer vi 3 trng d liu CustomerID,
FirstName v LastName. Lp ny cng nh ngha mt hng mc lp l
DayOfSendingBill.
class PhoneCustomer{
public const int DayOfSendingBill = 1;
public int CustomerID;
public string FirstName;
public string LastName;
}
25
Customer1.FirstName = "Burton";
M t
n phng thc c cng khai bo c k tha t lp cha
Phng thc c th c truy cp t mi ni
Phng thc c th c truy cp bn trong lp khai bo n hoc t mt kiu d liu
khc c dn xut t lp khai bo n.
internal
private
static
virtual
abstract
override
Phng thc ghi phng thc c nh ngha l virtual hoc abstract lp cha.
sealed
extern
26
27
28
V khi thc hin li gi phng thc, t kha ref cng phi c thm vo trc bin
truyn cho phng thc:
SomeFunction(ints, ref i);
29
type[] arrayName;
V d:
int[] daySo; //khai bao daySo la mot array (co the chua cac so int)
Lu rng, chng ta c th s dng gi tr ca bin khi nh ngha kch thc cho array.
V, mt khi khi to xong array vi kch thc c th, chng ta khng th thay i
kch thc ca array . lm c iu ny, chng ta cn mt kiu d liu khc
ArrayList.
Chng ta cng c th khai bo v nh ngha mt array theo cch ch ra cc phn t c
th ca n nh sau:
string[] myArray = {"first element", "second element", "third element"};
30
Console.WriteLine(hoTen[i]);
Array.Sort(hoTen);
Array.Reverse(hoTen);
// in danh sach cac phan tu trong array su dung cu phap foreach
foreach (string stHoTen in hoTen)
Console.WriteLine(stHoTen);
Lu rng chng ta s dng du phy phn cch cc chiu trong khai bo array, ngay
c khi chng ta cha thc s xc nh kch thc ca mi chiu. khai bo mt array 3
chiu gm cc string, chng ta lm nh sau:
string[,,] my3DArray;
Array, sau khi khai bo c th tin hnh khi to gi tr cho cc phn t bn trong, nh
sau:
double [, ] matrix = new double[5, 10];
for (int i = 0; i < 5; i++)
{
for (int j=0; j < 10; j++)
matrix[i, j] = i*j;
}
Sau khi khi to array, chng ta c th xc nh kch thc ca tng chiu bng phng
thc GetLength(). Chng hn,
double [, ] matrix = new double[5, 10];
Console.WriteLine(Kich thuoc chieu thu nhat: {0}, matrix.GetLength(0)); // 5
Console.WriteLine(Kich thuoc chieu thu nhat: {0}, matrix.GetLength(1)); // 10
Kiu array nhiu chiu th hai l array kiu rng ca, trong kch thc ca mi chiu
l c th khc nhau. Chnh xc, y l kiu d liu array ca cc array. on code di
Gio trnh Visual Studio .NET
31
1
2
3
1
3
32
1
1
4
5
6
10
4
10
1
5
2.8 Cc ton t
C# h tr cc kiu ton t sau y:
Loi ton t
S hc
Logic
Cng chui
Tng v gim
Dch bit
So snh
Php gn
Truy xut thnh phn (cho object v struct)
Indexing (cho array v cc indexers)
p kiu
iu kin
To i tng
Thng tin v kiu
iu khin Overflow exception
Truy xut a ch v gin tip
K hiu
+ - * / %
& | ^ ~ && || !
+
++ -<< >>
== != < > <= >=
= += -= *= /= %= &= |= ^= <<= >>=
.
[]
()
?:
new
sizeof is typeof as
checked unchecked
* -> & []
2.8.1 Cc ton t tt
Di y l cc ton t vit tt ca C#
Ton t tt
x++, ++x
x--, --x
x += y
Gio trnh Visual Studio .NET
Tng ng vi
x=x+1
x=x-1
x=x+y
33
Ton t tt
x -= y
x *= y
x /= y
x %= y
x >>= y
x <<= y
x &= y
x |= y
x ^= y
Tng ng vi
x=xy
x=x*y
x=x/y
x=x%y
x = x >> y
x = x << y
x=x&y
x=x|y
x=x^y
34
byte b = 255;
unchecked
{
b++;
}
Console.WriteLine(b.ToString());
Vic s dng kiu d liu lit k s cho php vit cc on m lnh d c, d qun l li
logic hn
class EnumExample
{
35
Vic ly chui tng ng ca mt bin gi tr lit k c th tin hnh n gin bng cch
s dng phng thc ToString() ca bin. Trong khi , ly gi tr kiu lit k t mt
chui tng ng th phc tp hn, chng ta phi s dng phng thc tnh Parse ca lp
Enum. Cn c nhiu phng thc khc ca lp Enum; chi tit tham kho bn xem ti
liu MSDN.
2.10 Namespace
Namespace l n v gp nhm mang tnh logic. Khi nh ngha mt lp i tng trong
mt file C#, chng ta c th a n vo trong mt namespace no . Sau , khi nh
Gio trnh Visual Studio .NET
36
Nh v d trn, tn y ca lp Student s l
BusinessLayer.Student
37
{
class Student
{
// Ma lenh dinh nghia lop doi tuong Student...
}
}
39
40
41
2. Thm mt project vo solution ny bng menu lnh File Add New project .
Tng t nh cch to mi project bi thc hnh trc, chn th loi project l
Console Application. t tn cho project mi l modular.
Gio trnh Visual Studio .NET
42
43
44
45
46
commonUtils.dll to ra trc .
D thy rng th vin c tham kho n khng ch c dng DLL m
c th c cc dng khc, bao gm EXE, OCX,
3. Hon thin phn m ngun c s dng tham chiu n th vin va b sung nh
hnh di:
M rng
Hy t rt ra nhng ghi ch cn thit v vic:
- Khai bo phng thc C(int n, int k) trong commonUtils l
public static long C(int n, int k)
static, public y c ngha g, c th thay th hoc b i?
- Tng t cho phng thc giaiThua(int n);
Ti sao trong qu trnh s dng phng thc C() li phi ghi y l
Gio trnh Visual Studio .NET
48
49
50
M rng
C th dng array nhiu chiu trong trng hp ny khng? Nu c th c s khc nhau
no so vi dng jagged array?
51
Do l d liu kiu tham chiu, nn php gn hai bin tham chiu c ngha l cho hai
bin d liu tham chiu n cng mt i tng.
MyClass myObjectRef = myObject;
52
c myObjectRef v myObject.
3.1 n k tha trong C#
C# h tr n k tha cho tt c cc lp i tng, tc l mt lp ch c th dn xut trc
tip nhiu nht l t mt lp i tng khc. Lp c s nht trong C# l lp
System.Object
class MyDerivedClass : MyBaseClass
{
// functions and data members here
}
M t
Bin hoc phng thc c th c truy xut t bt c ni no
Bin hoc phng thc ch c th truy xut trong phm vi cng assembly
Bin hoc phng thc ch c th truy xut t bn trong kiu d liu m
n thuc v, hoc cc kiu d liu dn xut
Bin hoc phng thc c th c truy xut trong phm vi assembly
hin ti, hoc t cc kiu d liu dn xut t kiu d liu cha n
Bin hoc phng thc ch c th c truy xut t bn trong kiu d liu
m n thuc v
53
54
on m lnh trn, chng ta thy rng, vic quyt nh phin bn no ca phng thc
VirtualMethod ( lp MyBaseClass hay MyDerivedClass) c s dng l ty thuc vo
ni dung hin ti ca i tng m obj tham chiu n. Ni cch khc, vic quyt nh
phin bn phng thc triu gi c quyt nh trong thi gian thc thi chng trnh
ch khng phi l trong lc bin dch chng trnh! c tnh ny cn c gi l tnh
gn kt mun (late-binding) trong k thut lp trnh.
Trong lp i tng, cc trng d liu hoc cc hm tnh khng c khai bo l
virtual.
Nu mt phng thc vi ch k c khai bo trong c lp c s v lp dn xut,
nhng cc phng thc khng c khai bo tng ng l virtual v override, th phin
bn phng thc lp dn xut c gi l che du phin bn lp c s. Trong tnh
hung ny, phin bn ca phng thc c s dng hot ng s ty thuc vo kiu
d liu ca bin c s dng tham chiu n i tng th hin ch khng phi l
chnh i tng th hin. iu ny c th hin trong cch thc hot ng ca on m
lnh di y:
class MyBaseClass
{
public string VirtualMethod() // KHONG DUOC KHAI BAO LA virtual NUA!!!
{
return "Phuong thuc nay la virtual trong MyBaseClass";
}
}
class MyDerivedClass: MyBaseClass
{
public string VirtualMethod() // KHONG DUOC KHAI BAO LA override NUA!!!
{
return "Phuong thuc nay duoc dinh nghia de` trong MyDerivedClass";
}
}
MyBaseClass obj; // obj la bien kieu MyBaseClass phien ban VirtualMethod() duoc
// su dung DUOC QUYET DINH NGAY LUC BIEN DICH la cua MyBaseClass
obj = new MyBaseClass();
obj.VirtualMethod(); // in ra Phuong thuc nay l virtual trong MyBaseClass
55
Trn thc t, khi bin dch on m lnh tng t nh trn, trnh bin dch s a ra cnh
bo v vic phng thc b che giu. trnh khi cnh bo nh vy, bn khai bo
phng thc c nh ngha li trong lp dn xut thm vi t kha new.
3.4 Gi phng thc vi phin bn ca lp c s
C# c mt c php c bit cho php trong lp dn xut c th triu gi phng thc
vi phin bn c ci t lp c s: base.<MethodName>(). V d:
class Student
{
public virtual void Dispaly()
{
Console.WriteLine(Thong tin chung cua sinh vien...);
}
}
class ITStudent: Student
{
public override void Display()
{
base.Display();
Console.WriteLine(Thong tin rieng doi voi sinh vien CNTT....);
}
}
56
// field
// abstract method
57
// constructor
// constructor
// Ghi de phuong thuc ToString() de hien thi so ao theo dang thong thuong:
public override string ToString()
{
return(System.String.Format("{0} + {1}i", real, imaginary));
}
// Nap chong toan tu '+':
public static ComplexNumber operator+(ComplexNumber a, ComplexNumber b)
{
return new ComplexNumber(a.real + b.real, a.imaginary + b.imaginary);
}
// Nap chong toan tu '-':
public static ComplexNumber operator-(ComplexNumber a, ComplexNumber b)
{
return new ComplexNumber(a.real - b.real, a.imaginary - b.imaginary);
}
}
class TestComplexNumber
{
58
Nh chng trnh minh ha, sau khi np chng ton t + v -, bn c th s dng hai
php ton + v i vi d liu ComplexNumber mt cch trc tip. y, kt qu nhn
c s l:
a
b
c
d
=
=
=
=
10 + 12i
8 + 9i
a + b = 18 + 21i
a - b = 2 + 3i
59
K thut c trnh by
- Truy xut tp tin c nh dng cho trc
- S dng mt phng thc ca lp String
- Cc k thut hng i tng c s dng trong bi ton thc t
Trnh t thc hin
1. Trc khi tin hnh ci t, ta kho st qua s lp c s dng. Vi nhng m
t kh r rng trong yu cu bi ton, ta c c ci nhn tng quan v cc lp nh
sau:
60
61
62
6. Trong phn chng trnh (tp tin Program.cs) chng ta thc hin yu cu bi ton
nh sau:
63
Yu cu thm
- In ra 3 sinh vin c im trung bnh cao nht trng.
- Chnh sa ngi s dng c th nhp danh sch m khng bit trc s lng
sinh vin (s dng vng lp while, do, )
- Chnh sa c th nhp d liu cc sinh vin t file.
64
65
66
67
68
70
thnh bnh thng (mu ControlText) khi con tr chut r ra khi nt bm.
11. tm hiu k hn bn cht ca vic gn kt phng thc x l s kin, chng ta
nhp p chut vo FormMain.Designer.cs trong ca s Solution Explorer xem
phn ni dung c sinh ra bi Form Designer:
71
72
73
Thc ra khng nht thit phi c nhnh else if, ch cn else l , bi v y chng ta ch p dng phng thc
ny cho hai iu khin btnClose v btnAbout!.
2
Php chuyn kiu (sender as Button) trong cu lnh ny l thnh cng v c btnClose v btnAbout u l cc iu
khin kiu Button
74
}
b. Trong phn FormDesigner, chn tt c cc i tng trn b mt Form.
c. Trong ca s Properties, chn phng thc x l s kin MouseLeave cho
tt c cc i tng ang chn l btn_MouseLeave (xem hnh v)
75
76
77
M rng
- Hy tm hiu ngha ca vic ci t m lnh bc 15.a: (sender as Control). C
th s dng php p kiu no khc khng? Ti sao?
- iu chnh trong giao din chng trnh, trong c mt s iu khin (Label,
TextBox, RadioButton, CheckBox hoc Button) s dng mu khc vi mu mc
nh (l SystemColors.ControlText). Khi , hiu ng mouse hover hot ng
khng ng na. Hy chnh sa chng trnh khc phc pht sinh ny.
78
K thut c trnh by
-
Gi tr
Name
FormMain
Ghi ch
79
Text
Hello WinForms
Tiu ca ca s
FormBorderStyle FixedSingle
MaximizeBox
V hiu ha nt Maximize ca ca
s
False
Thuc tnh
Gi tr
80
Format
Custom
CustomFormat
dd/MM/yyyy
txtOther
Enable
False
lblInfo
Font
picImage
SizeMode
StretchImage
lblName
BackColor
Transparent (Web)
tmrScroll
Interval
120
dtpDOB
81
Khi ngi s dng nhn vo nt ny, mt hp thoi s hin ra cho php chn nh.
Ch cc tp tin c phn m rng l BMP, JPG, GIF mi c hin th la chn.
iu ny c thit lp thng qua thuc tnh Filter ca i tng dlgOpen (thuc
lp OpenFileDialog).
6. Khi ngi s dng g tn ca h vo txtName th ni dung ca lblName cng thay
i theo. Mun vy, ta ci t m lnh cho s kin TextChanged ca txtName nh
(1) xem minh ha code di
7. i tng txtOther ch c s dng (Enabled) khi m chkOther c check vo,
do ta cng ci t m lnh cho s kin CheckChanged ca chkOther nh (2)
8. Khi nhn nt Cp nht th ni dung ca lblInfo c cp nht theo nh phn m
lnh ci t cho s kin Click ca btnUpdate (3)
9. Ngi s dng c th bt tt ch cun ni dung dng ch lblInfo bng cch nhn
chut vo n. Ci t m lnh cho s kin Click ca lblInfo nh (5)
Gio trnh Visual Studio .NET
82
10. cun ni dung dng ch, ci t m lnh cho s kin Tick ca tmrScroll nh
(4)
83
84
SQL Server
Provider
SqlConnection
IDbConnection
IDbDataAdapter SqlDataAdapter
SqlCommand
IDbCommand
IDbDataReader SqlDataReader
Oracle Provider
OLEDB Provider
ODBC Provider
OracleConnection
OracleDataAdapter
OracleCommand
OracleDataReader
OledbConnection
OledbDataAdapter
OledbCommand
OledbDataReader
OdbcConnection
OdbcDataAdapter
OdbcCommand
OdbcDataReader
s dng data provider no, chng ta phi tin hnh khi bo using namspace tng
ng. Chng hn, using System.Data.SqlClient;
Ngoi nhng data provider m t bng trn, chng ta c th reference n cc data
provider khc khng c tch hp sn bi ADO.NET trong Visual Studio .NET, chng
hn nh data provider dng cho MySQL, Postgre,
Thnh phn th hai trong kin trc ADO.NET DataSet c xem nh l
container dng lu tr i tng lin quan n d liu nh DataTable, DataRelation,
DataView. Thnh phn ny cn c gi l lp khng kt ni (disconected layer).
Nh cung cp y c hiu theo ngha c v loi ngun d liu ln cch thc truy xut ngun d liu. V d,
ngoi data provider SqlClient do Microsoft cung cp, cng c th c mt t chc khc pht trin mt provider khc
truy xut loi ngun d liu ny.
85
87
88
89
Loi
Method
Tn
Open
Close
Method
Method
BeginTransaction
ChangeDatabase
Method
CreateCommand
M t
M mt Connection. Roll back mi thao tc ang lm
d.
ng Connection tr Connection cho Connection
Pool nu nh c s dng Connection Pool
Khi to mt database transaction
Thay i CSDL hin ti cho Connection ang m.
Chui m t tn CSDL mi c truyn cho phng
thc ny
To ra mt i tng Command ng vi Connection
90
hoc
Server=192.168.0.1;Database=qlnhanvien;Trusted_Connection
=yes
OleDbConnection s dng kt ni CSDL Access phin bn trc 2003:
Provider=Microsoft.Jet.OLEDB.4.0;DataSource=
V d:
o string stConnection =
string.Format(Provider=Microsoft.Jet.OLEDB.4.0;DataSou
rce={0}, @c:\program files\qlnhanvien.mdb);
o S dng trong ng dng Internet: string stConnection =
string.Format(Provider=Microsoft.Jet.OLEDB.4.0;DataSou
rce={0},
Server.MapPath(/data/qlnhanvien.mdb);
ODBC: DSN= vi
DSN=qlnhanvien
Data
Source
Name
(DSN),
91
92
M t
93
ExecuteNonQuery
ExecuteReader
ExecuteScalar
94
95
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(@pTrang", SqlDbType.Int);
cmd.Parameters.Add(@pTongSoTrang", SqlDbType.Int);
cmd.Parameters[0].Direction= ParameterDirection.Input;
cmd.Parameters[0].Value= 1;
// thit lp ly v trang u tin
cmd.Parameters[1].Direction=ParameterDirection.Output;
cmd.CommandTimeout=10; // Cho command ti a 10s thc thi
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
// x l tp d liu y
}
dr.Close(); // DataReader phi c ng trc khi c tham s u ra
int tongSoTrang = cmd.Parameters[1].Value;
V d ny s dng data provider SqlClient. C th chnh sa mt phn nh th n cng c
th hot ng vi OleDb. im khc bit mu cht gia SqlClient v OleDb l cch
qun l cc parameter. SqlClient yu cu tn parameter phi ng vi tn parameter ca
stored procedure; trong khi OleDb li truyn cc parameter cho stored procedure da
vo v tr, v vy tn parameter l khng quan trng. Nu procedure tr v gi tr kt qu,
OleDb phi thit k parameter u tin trong danh sch lm nhim v ny. Vi
SqlClient, chng ta ch cn thm mt parameter vi mt tn no v xc nh hng tr
v (direction) ca parameter ny l Return Value.
Phn code ca stored procedure l nh sau:
CREATE PROCEDURE spListSinhVien
@pTrang int,
@pTongSoTrang int output
AS
/*
Th tc tr v mt tp kt qu gm cc SinhVien xp theo HoTen.
Tp kt qu c phn thnh cc trang, mi trang 10 SinhVien.
*/
SET NOCOUNT ON
SELECT @pSoTrang = CEILING(COUNT(*)/10) FROM SinhVien
if @pTrang = 1 or @pTrang <1
begin
SELECT TOP MaSinhVien, HoTen FROM SinhVien ORDER BY HoTen
set @pTrang = 1
Gio trnh Visual Studio .NET
96
return 0
end
if @pTrang > @pTongSoTrang
begin
SET @pTrang = @pTongSoTrang
declare @RowCount int
set @RowCount = (@pTrang * 10)
exec (
'SELECT *
FROM (
SELECT TOP 10 a.*
FROM (
SELECT TOP ' + @RowCount + ' *
FROM SinhVien
ORDER BY HoTen
)a
ORDER BY HoTen desc
)b
ORDER BY HoTen'
)
return 0
end
4.3.2.4 S dng Parameter trong cc Command khng phi l Stored Procedures
Trong cc query c thnh lp trc tip (ch khng phi l stored procedure nh trn),
chng ta cng c th s dng cc Parameter. V d di y minh ha cch thc b sung
mt record vo bng SinhVien:
string sql =
"INSERT INTO SinhVien (MaSinhVien, HoTen) VALUES (@pMaSinhVien, @pHoTen)";
97
cmd.Parameters.AddWithValue("@pMaSinhVien", 12);
cmd.Parameters.AddWithValue("@pHoTen", "tnv spider");
Mt cch khc thc hin vic b sung record nh trn l s dng php ni chui4 nh
th ny:
int iMaSinhVien = 12;
string stHoTen = "tnv spider";
sql = string.Format(INSERT INTO SinhVien (MaSinhVien, HoTen) VALUES ({0},
{1}),
iMaSinhVien, stHoTen);
SqlCommand cmd = new SqlCommand(sql, conn);
4.3.3 i tng DataReader
Nh thy trong cc v d trc, mt DataReader cho php ly cc dng v ct d liu
ca d liu tr v khi thc thi mt query. Vic truy xut dng c nh ngha bi
interface IDataRecord. Di y l cc member quan trng ca interface ny.
4.3.3.1 Truy xut cc dng d liu vi DataReader
DataReader ly v tng dng n (single row) t mt tp d liu tr v mi khi phng
thc Read ca n c thc thi. Nu khng c dng d liu no th phng thc ny tr
v gi tr false. DataReader phi c ng sau khi cc thao tc x l cc dng c hon
tt gii phng ti nguyn h thng. Bn c th s dng thuc tnh DataReader.IsClosed
bit c DataReader c ng hay cha.
Mc d DataReader l ng vi mt Command n, nhng Command ny li c th
cha nhiu query trong , do c th tr v nhiu tp d liu kt qu. on code di
y minh ha cch x l cc dng d liu tr v bi 2 query trong mt Command.
string q1 = "SELECT * FROM SinhVien WHERE YEAR(NgaySinh) < 1981";
string q2 = "SELECT * FROM SinhVien WHERE YEAR(NgaySinh) > 1990";
Trong thc t, gii php ni chui t khi c s dng v l do an ton d liu. Hy hnh dung trong on code ny,
nu stHoTen c gn gi tr l tnv spider); DELETE * FROM SinhVien;--. Khi query c thc thi s l
INSERT INTO SinhVien (MaSinhVien, HoTen) VALUES (12, tnv spider); DELETE * FROM SinhVien;--)
98
99
stHoTen = (string)dr["HoTen"];
stHoTen = (string)dr[1];
// Ly d liu kiu DateTime ct th 4 (NgaySinh) c kim tra gi tr NULL
if (!dr.IsDbNull(3))
DateTime dtNgaySinh = dr.GetDateTime(3);
Phng thc GetString c im thun li trong vic nh x ni dung d liu t
CSDL sang kiu d liu ca .NET. Cc cch tip cn khc u tr v cc kiu i tng
c yu cu php chuyn kiu. V l do ny, bn nn s dng cc phng thc GetXXX
cho cc kiu d liu xc nh. Cng lu rng, phng thc GetString khng yu cu
php chuyn kiu, nhng bn thn n khng thc hin bt c php chuyn i no; chnh
v th, nu d liu l khng ng nh kiu d liu trng i s c Exception c tr ra.
Nhiu ng dng ph thuc vo tng x l d liu cung cp DataReader. Vi
nhng trng hp nh th, ng dng c th s dng metadata (siu d liu) xc nh
tn column, kiu d liu ca column, v cc thng tin khc v column. on code sau y
minh ha vic in ra danh sch cc tn v kiu d liu ca cc column m i tng
DataReader ang qun l:
// In ra danh sch cc tn column ca mt i tng DataReader c tn dr
for (int i = 0; i < dr.FieldCount; i++)
Console.WriteLine(Column {0} co kieu du lieu {1},
dr.GetName(i), dr.GetDataTypeName(i)); // Column name
C mt cch khc ton din hn qun l ton b thng tin v lc (schema) ca tp
d liu kt qu tr v, l s dng phng thc GetSchemaTable. Phng thc ny tr
v mt i tng DataTable m mi dng trong DataTable ny s biu din mt column
trong tp d liu kt qu. on code di y minh ha cch truy xut tt c cc thng tin
v cc column ca mt tp d liu tr v.
DataTable schemaTable = dr.GetSchemaTable();
int stt = 0;
foreach (DataRow r in schemaTable.Rows)
{
foreach (DataColumn c in schemaTable.Columns)
{
Console.WriteLine(stt.ToString() + " " + c.ColumnName + ": " + r[c]);
stt++;
}
Gio trnh Visual Studio .NET
100
}
Kt qu hin th:
0 ColumnName: movie_ID
1 ColumnOrdinal: 0
//khng lit k
12 DataType: System.Int32
//khng lit k
4.3.4 Bi thc hnh
Gi s ta c c s d liu quanlythuvien trong SQL Server c quan h nh sau:
101
ListView1
102
Cc iu khin
Tn iu khin
Thuc tnh
Form
Name: Frmtaomoitk
Text:To mi mt ti khon s dng chng trnh
listView
Name:listView1
Columns: Add thm 4 ct: H tn, a ch, Tn ng nhp v
Quyn hn
View: Details
GridLines:True
groupBox
Name:groupBox1
Text: Thng tin c bn
Label
To ra 5 label hin th: M nhn vin, H tn, a ch, Tn ng
nhp v quyn hn.
TextBox
To ra 4 TextBox ln lt vi cc tn: txtmanv, txthoten, txtdiachi,
txttendangnhap
Button
To 8 button ln lt vi cc tn butdau, butlui, buttien, butcuoi,
buttaomoi, buttimkiem, butxoabo,butthoat
Cc trng:
ngha
Tn trng
Cn
cmdSelect
cmdInsert
cmdXoa
Ti khon th i
Cc phng thc
+ Hm dng Frmtaomoitk to giao din
public Frmtaomoitk()
{
InitializeComponent(); }
+ Phng thc Moketnoi(): Kim tra ng kt ni, nu ang m th ng li, sau m
li ng kt ni
private void Moketnoi()
{
if (cn.State == ConnectionState.Open)
Gio trnh Visual Studio .NET
103
cn.Close();
cn.Open();
}
+ Phng thc LoadListView: Ly d liu ca bng nhanvien np d liu ln listView1.
Phng thc ny c gi khi thay i d liu trong bng nhn vin nh nhp thm hoc
xa i 1 nhn vin. S dng 2 i tng SqlCommand, SqlDataReader
private void LoadListView()
{
Moketnoi();
cmdSelect = new SqlCommand("select * from nhanvien", cn);
SqlDataReader r = cmdSelect.ExecuteReader();
listView1.Items.Clear(); // Xa tt c d liu trong listView1
while (r.Read())
{
string[] st = new string[5];
st[0] = r[0].ToString();
st[1] = r[1].ToString();
st[2] = r[2].ToString();// Khng hin th mt khu, nn khng c r[3]
st[3] = r[4].ToString();
st[4] = r[5].ToString();
ListViewItem lv = new ListViewItem(st);
listView1.Items.Add(lv);
}
cmdSelect.Dispose();
}
+ Phng thc LoadItem: Ly d liu t dng th i ca listView1 a vo txtmanv,
txthoten, txtdiachi, txttendangnhap v comboBox1. Phng thc ny c gi khi di
chuyn qua li thng tin ca cc nhn vin.
private void LoadItem(int i)
{
txtmanv.Text = listView1.Items[i].Text;
txthoten.Text = listView1.Items[i].SubItems[1].Text;
txtdiachi.Text = listView1.Items[i].SubItems[2].Text;
txttendangnhap.Text = listView1.Items[i].SubItems[3].Text;
comboBox1.Text = listView1.Items[i].SubItems[4].Text;
}
+ Phng thc LoadCombox: a d liu vo cho comboBox1. Gi s ch c 3 quyn
hn: admin, sinhvien v Thuthu. Phng thc ny c gi khi va np Form ln
Gio trnh Visual Studio .NET
104
105
106
107
Moketnoi();
string sql = "select * from nhanvien where manhanvien='" + txtmanv.Text + "'";
cmdSelect = new SqlCommand(sql,cn);
SqlDataReader dr = cmdSelect.ExecuteReader();
if (dr.Read())// tm thy
{
txtmanv.Text = dr[0].ToString();
txthoten.Text = dr[1].ToString();
txtdiachi.Text = dr[2].ToString();
txttendangnhap.Text = dr[4].ToString();
comboBox1.Text = dr[5].ToString();
}
else
MessageBox.Show("Khng tm thy");
}
+ S kin butXoabo_Click: Xa nhn vin c m nhn vin txtmanv
private void butXoabo_Click(object sender, EventArgs e)
{
DialogResult dr = MessageBox.Show("Chc chn xa hay khng ?",
"Thng bo", MessageBoxButtons.YesNo);
if (dr == DialogResult.Yes) // Nu ngi s dng chn nt yes
{
Moketnoi();
string Sql = "delete from nhanvien where manhanvien='" + txtmanv.Text + "'";
cmdXoa = new SqlCommand(Sql,cn);
if (cmdXoa.ExecuteNonQuery() == 1)
{
MessageBox.Show("Xa thnh cng");
LoadListView();
LoadItem(0);
}
else
MessageBox.Show("Khng tn ti m nhn vin " + txtmanv.Text);
cmdXoa.Dispose();
}
}
4.4 Lm vic vi m hnh Ngt kt ni: DataSet v DataTable
M hnh Ngt Kt ni ca ADO.NET da trn c s s dng i tng DataSet nh l
mt vng nh m. Mt i tng DataAdapter lm nhim v trung gian gia DataSet v
Gio trnh Visual Studio .NET
108
data source (ngun d liu) np d liu vo vng nh m. Sau khi DataAdapter hon
thnh nhim v np d liu, n s tr i tng Connection v pool, v th n ngt kt ni
khi ngun d liu.
4.4.1 Lp DataSet
DataSet ng vai tr ca mt CSDL in-memory (CSDL nm trong b nh). Thuc tnh
Tables ca DataSet l mt tp hp cc DataTable cha d liu v lc d liu (data
schema) m t d liu trong DataTable. Thuc tnh Relations cha tp hp cc i tng
DataRelation xc nh cch thc lin kt cc i tng DataTable ca DataSet. Lp
DataSet cng h tr vic sao chp, trn, v xa DataSet thng qua cc phng thc tng
ng l Copy, Merge, v Clear.
DataSet v DataTable l phn li ca ADO.NET v chng khng l c trng ca
mt data provider no (ging nh cc lp Connection, DataReader, DataAdapter). Mt
ng dng c th nh ngha v np d liu t ngun bt k (ch khng nht thit l t mt
CSDL) vo DataSet.
Bn cnh cc DataTable v cc DataRelation, mt DataSet cn c th cha cc
thng tin ty bin khc c nh ngha bi ng dng. Hnh di y m t c lp chnh
trong DataSet. Trong s cc thuc tnh ny, ch thuc tnh PropertyCollection; l cc
thuc tnh c lu tr di dng mt hash table (bng bm), thng cha mt gi tr
time stamp hay cc thng tin c t nh cc yu cu hp l ha (validation requirements)
cho column trong cc DataTable trong DataSet.
109
4.4.1.1 DataTable
Thuc tnh DataSet.Tables cha cc i tng DataTable. Mi i tng trong tp hp
ny c th c truy xut bng ch s hoc bng tn.
Cc DataTable trong tp hp DataSet.DataTables m phng cc Table trong CSDL
quan h (cc row, column, ). Cc thuc tnh quan trng nht ca lp DataTable l
Columns v Rows nh ngha cu trc v ni dung bng d liu.
4.4.1.2 DataColumn
Thuc tnh DataTable.Columns cha mt tp cc i tng DataColumn biu din cc
trng d liu trong DataTable. Bng di y tm tt cc thuc tnh quan trng ca lp
DataColumn.
Phng thc
ColumnName
DataType
MaxLength
ReadOnly
M t
Tn column
Kiu ca d liu cha trong column ny
V d: col1.DataType = System.Type.GetType("System.String")
di ti a ca mt text column. -1 nu khng xc nh di ti a
Cho bit gi tr ca column c c chnh sa hay khng
110
Phng thc
AllowDBNull
Unique
Expression
Caption
DataTable
M t
Gi tr Boolean cho bit column ny c c cha gi tr NULL hay
khng
Gi tr Boolean cho bit column ny c c cha cc gi tr trng nhau
hay khng
Biu thc nh ngha cch tnh gi tr ca mt column
V d: colTax.Expression = "colSales * .085";
Tiu hin th trong thnh phn iu khin giao din ha
Tn ca i tng DataTable cha column ny
111
112
Console.Write(tb.Rows[0].RowState); // Unchanged
DataRow myRow;
MyRow = tb.NewRow();
// Detached
Hai phng thc AcceptChanges v RejectChanges ca DataTable l tng ng vi
cc thao tc commit v rollback trong mt CSDL. Cc phng thc ny s cp nht mi
thay i xy ra k t khi table c np, hoc t khi phng thc AcceptChanges c
triu gi trc . v d trn, chng ta c th khi phc li dng b xa do thao tc xa
l cha c commit trc khi phng thc RejectChanges c gi. iu ng lu
nht l, nhng thay i c thc hin l trn table ch khng phi l data source.
ADO.NET qun l 2 gi tr - ng vi 2 phin bn hin ti v nguyn gc - cho mi
column trong mt dng d liu. Khi phng thc RejectChanges c gi, cc gi tr
hin ti s c t khi phc li t gi tr nguyn gc. iu ngc li c thc hin khi
gi phng thc AcceptChanges. Hai tp gi tr ny c th c truy xut ng thi
thng qua cc gi tr lit k DataRowVersion l: Current v Original:
DataRow r = tb.Rows[0];
r["DonGia"]= 14.95;
r.AcceptChanges();
r["DonGia"]= 16.95;
Console.WriteLine("Current: {0} Original: {1} ",
r["Price", DataRowVersion.Current],
r["Price", DataRowVersion.Original]);
Kt qu in ra:
Current: 16.95 Original: 14.95
4.4.1.4 DataView.
DataView ng vai tr nh tng hin th d liu lu tr trong DataTable. N cho php
ngi s dng sp xp, lc v tm kim d liu.
//Gi s c 1 dataset c tn l ds cha d liu ca bng DonHang
DataView dv = new DataView(ds.Tables["DonHang];
// Lc ra tt c cc hng c gi t 10 n 100
dv.RowFilter = "soluong>=10 and soluong<=100";
//Sp xp tng dn theo s lng nu s lng bng nhau th sp xp gim dn thm n
gi
dv.Sort = "soluong, dongia DESC";
113
114
dt.PrimaryKey = col;
DataRow r = dt.Rows[0]; // ly dng u tin
r["HoTen"] = "ten moi"; // thay i gi tr ca ct HoTen
// Do reader b ng sau khi np vo data table nn phi gi phi fill li
rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
// Trn d liu vi cc dng hin ti. Ghi cc gi tr hin ti
dt.Load(rdr, LoadOption.UpdateCurrentValues);
// Gi tr cp nht b ghi !!!
Console.Write(dt.Rows[0]["HoTen"]); // tnv spider
4.4.2.2 Np d liu vo DataSet bng DataAdapter
i tng DataAdapter c th c dng np mt table hin c vo mt table khc,
hoc to mi v np d liu cho table t kt qu ca mt query. Bc u tin l to ra
mt i tng DataAdapter tng ng vi data provider c th. Di y l cc v d
to ra i tng DataAdapter:
(1) To t Connection string v cu truy vn SELECT:
String sql = "SELECT * FROM nhanvien";
SqlDataAdapter da = new SqlDataAdapter(sql, connStr);
(2) To t i tng Connection v cu truy vn SELECT:
SqlConnection conn = new SqlConnection(connStr);
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
(3) Gn i tng Command cho thuc tnh SelectCommand
SqlDataAdapter da = new SqlDataAdapter();
SqlConnection conn = new SqlConnection(connStr);
da.SelectCommand = new SqlCommand(sql, conn);
Sau khi i tng DataAdapter c to ra, phng thc Fill ca n c thc thi
np d liu vo table (ang tn ti hoc to mi). v d di y, mt table mi c
to ra vi tn mc nh l Table:
DataSet ds = new DataSet();
// To ra mt DataTable, np d liu vo DataTable, v a DataTable vo DataSet
int nRecs = da.Fill(ds); // tr v s lng record c np vo DataTable
// Nu mun t tn cho DataTable trong DataSet thay v ly tn mc nh
// th s dng code nh th ny
Gio trnh Visual Studio .NET
115
DataGridView1
116
Cc iu khin
Tn iu khin
Thuc tnh
Form
Name: frmtimkiemsach
Text:Tm kim theo nhan hoc tn tc gi
Label
Text: Nhp tn sch hoc tn tc gi cn tm
TextBox
Name: txttimkiem
dataGridView
Name: dataGridView1
statusStrip
Name: thanhtrangthai
Items: Add thm 2 statusLabel: vi tn ketquatim v tngoluong
Cc trng:
ngha
Tn trng
Cn
cmd
da
ds
Cc phng thc
+ Hm dng frmtimkiemsach to giao din
Gio trnh Visual Studio .NET
117
public frmtimkiemsach()
{
InitializeComponent();
}
+ Phng thc Tongsoluong: c s dng tnh tng s lng sch ca cc sch lu
trong Dataset ds.
private int Tongsoluong()
{ int s=0;
foreach (DataRow r in ds.Tables["sach"].Rows)
{
s += (int)r["soluong"];
}
return s;
}
+ Phng thc Tongsoluongtk tnh tng s lng sch trong DataView dv, dv cha
thng tin cc sch tm kim c.
private int Tongsoluongtk(DataView dv)
{
int s = 0;
foreach (DataRow r in dv.ToTable("sach").Rows )
{
s += (int)r["soluong"];
}
return s;
}
+ S kin frmtimkiemsach_Load:Np thng tin ca 4 quyn sch u tin theo th t
gim dn ca ngaynhap vo DataSet ds vi tn bng trong DataSet l sach, sau hin th
thng tin ca bng sach trong DataSet vo dataGridView1, a tng s sch v tng s
lng sch trong DataSet vo thanh trng thi
private void frmtimkiemsach_Load(object sender, EventArgs e)
{
cn.Open(); // M kt ni
cmd.CommandText = "select top 4 * from sach order by ngaynhap desc" ;
cmd.Connection = cn;
da.SelectCommand = cmd;
da.Fill(ds, "sach"); // Np d liu vo DataSet
dataGridView1.DataSource = ds.Tables["sach"]; // Np d liu vo dataGridView1
// Np d liu vo thanh trng thi
thanhtrangthai.Items[0].Text = "Tng s sch:" +
ds.Tables["sach"].Rows.Count.ToString();
Gio trnh Visual Studio .NET
118
119
mt cch t ng.
4.4.4.1 CommandBuilder
Mt i tng CommandBuilder s sinh ra cc Command cn thit thc hin vic cp
nht ngun d liu to ra bi DataSet. Cch to i tng CommandBuilder l truyn i
tng DataAdapter cho phng thc khi dng ca n; sau , khi phng thc
DataAdapter.Update c gi, cc lnh SQL s c sinh ra v thc thi. on code di
y minh ha cch thc thay i d liu mt DataTable v cp nht ln CSDL tng
ng bng DataAdapter:
//Gi s c 1 DataSet ds cha d liu ca bng khoa
DataTable dt= ds.Tables["khoa"];
// (1) Dng commandBuilder sinh ra cc Command cn thit update
SqlCommandBuilder sb = new SqlCommandBuilder(da);
// (2) Thc hin thay i d liu: thm 1 khoa mi
DataRow drow = dt.NewRow();
drow["Makhoa"] = 12;
drow["tenkhoa"] = "abc";
dt.Rows.Add(drow);
// (3) Thc hin thay i d liu: xa 1 khoa
dt.Rows[4].Delete();
// (4) Thc hin thay i d liu: thay i gi tr 1 dng d liu
dt.Rows[5]["tenkhoa"] = "this must be changed";
// (5) Tin hnh cp nht ln CSDL
int nUpdate = da.Update(ds, "khoa");
MessageBox.Show("S dng c thay i: " + nUpdate.ToString()); // 3
C mt s hn ch khi s dng CommandBuilder: Command Select ng vi DataAdapter
ch c tham chiu n 1 table, v table ngun trong CSDL phi bao gm mt primary
key hoc mt column cha cc gi tr duy nht. Column ny (hay t hp cc columns)
phi c bao gm trong command Select ban u.
4.4.4.2 ng b ha d liu gia DataSet v CSDL
Nh minh ha trong v d ny, vic s dng DataAdapter lm n gin ha v t ng
ha qu trnh cp nht CSDL hoc bt k data source no. Tuy nhin, c mt vn
y: multi-user (nhiu ngi s dng). M hnh Ngt kt ni c da trn c ch
Optimistic Concurrency, mt cch tip cn m trong cc dng d liu data source
khng b kha (lock) gia thi gian m chng c c v thi gian m cc cp nht
c p dng cho data source. Trong khong thi gian ny, user khc c th cng cp
Gio trnh Visual Studio .NET
120
121
122
{
da.Fill(ds, "docgia");
DataTable dt = ds.Tables["docgia"];
SqlCommandBuilder sb = new SqlCommandBuilder(da);
// ... Cc thao tc cp nht
dt.Rows[29].Delete();
// Delete
dt.Rows[30]["HoTen"] = "try to change"; // Update
dt.Rows[30][Madocgia] = 1234;
// Update
dt.Rows[31]["HoTen"] = "XYZ";
// Update
DataRow drow = dt.NewRow();
drow["HoTen"] = "tnv spider";
drow["Madocgia"] = 25;
dt.Rows.Add(drow);
// insert
// Submit updates
int updates = da.Update(ds, "docgia");
if (ds.HasChanges())
{
// Load rows that failed into a DataSet
DataSet failures = ds.GetChanges();
int rowsFailed = failures.Rows.Count;
Console.WriteLine("S dng khng th cp nht: " + rowsFailed);
foreach (DataRow r in failures.Tables[0].Rows )
{
string state = r.RowState.ToString());
// Phi hy b thay i hin th dng b xa
if (r.RowState == DataRowState.Deleted)
r.RejectChanges();
string iMadocgia= ((int)r["Madocgia"]).ToString();
string msg = state + " Madocgia: " + iMadocgia;
Console.WriteLine(msg);
}
}
Lu rng ngay c khi thao tc xa xut hin trc, n cng khng c tc dng i vi
cc thao tc khc. Cu lnh SQL xa hay cp nht mt dng d liu c da theo gi tr
ca primary key ch khng lin quan n v tr ca n. Ngoi ra cc cp nht trn cng
mt dng c kt hp v m nh l 1 cp nht cho dng bi phng thc Update.
v d trn, cc cp nht cho dng 30 c tnh nh l 1 cp nht.
4.4.5 nh ngha Relationships gia cc Table trong DataSet
Gio trnh Visual Studio .NET
123
}
}
/*
V d kt qu:
Khoa Tin
Nguyn Vn Trung
Ng Anh Tun
L Thanh Hoa
Khoa Ton
Nguyn Th Hoa
Trn Vn Phc
*/
Khi mt relationship c nh ngha gia 2 tables, n cng s thm mt
ForeignKeyConstraint vo tp hp Constraints ca DataTable con. Constraint ny quyt
nh cch m DataTable con b nh hng khi cc dng d liu pha DataTable cha b
thay i hay b xa. Trong thc t, iu ny c ngha l khi bn xa 1 dng trong
DataTable cha, cc dng con c lin quan cng b xa hoc cng c th l cc key b t
li gi tr thnh NULL. Tng t nh th, nu mt gi tr key b thay i trong DataTable
cha, cc dng d liu c lin quan trong DataTable con cng c th b thay i theo hoc
b i gi tr thnh NULL.
Cc lut nh trn c xc nh bi cc thuc tnh DeleteRule v UpdateRule ca
constraint. Cc lut ny c nhn cc gi tr lit k sau y:
- Cascade. Xa/Cp nht cc dng d liu c lin quan trong DataTable con. y l
gi tr mc nh.
- None. Khng lm g.
- SetDefault. Thit lp cc gi tr kha trong cc dng d liu c lin quan ca
DataTable con thnh gi tr mc nh ca column tng ng.
- SetNull. Thit lp cc gi tr kha trong cc dng d liu c lin quan ca DataTable
con thnh null.
Xem xt v d di y:
// (1) Thm mt dng vi kha mi vo DataTable con
DataRow row = child.NewRow();
row["Makhoa"] = 999; // gi s trong bng khoa khng c record no c Makhoa = 999
child.Rows.Add(row); // Khng c do 999 khng tn ti trong DataTable cha
Gio trnh Visual Studio .NET
125
((ForeignKeyConstraint)child.Constraints[0]).DeleteRule = Rule.SetNull;
Lu rng thuc tnh EnforeceConstraint c t thnh false s lm v hiu ha tt c
cc constraint iu ny trong thut ng CSDL gi l b qua tnh ton vn tham chiu.
iu ny cho php mt khoa c b sung vo thm ch khi c column Makhoa khng
tng ng vi dng no trong bng khoa. N cng cho php mt dng khoa c xa
ngay c khi c nhiu dng tng ng vi n trong bng docgia.
4.5 S dng Data Binding
Chng ta cp n cc iu khin thit k giao din nh TextBox, ListBox,
RadioButton, ComBoBox v cc cc iu khin ca ADO.NET nh DataSet, DataTable
v DataView. Cc iu khin ny lm vic mt cch c lp vi nhau, tuy nhin trong
mt s tnh hung chng cn kt hp li vi nhau. V d ta cn hin th tn khoa t c s
d liu ra 1 TextBox, khi ta cn to ra 1 DataSet cha d liu ca bng khoa v 1
TextBox, sau lin kt d liu trong DataSet vo TextBox. S kt hp gia hai iu
khin ny c th s dng DataBinding.
4.5.1 Cc loi ca Binding
ADO.NET cung cp 2 loi Binding:
- DataBinding n gin (Simple DataBinding): Ti mt thi im, mt gi tr n trong
DataSet c th b buc vo bt k mt iu khin.
V d: gi s c 1 DataSet ds cha d liu ca bng Khoa, cn buc tn khoa vo
TextBox txttenkhoa:
txttenkhoa.DataBindings.Add("Text", ds, "khoa.tenkhoa");
Khi mi thay i trn DataSet ds s nh hng n TextBox txtdocgia v ngc li.
- DataBinding phc tp (Complex DataBinding): Cc d liu trong DataSet b buc vo
mt iu khin thay v ch mt gi tr n. Ch c DataGidView v ComboBox h tr
chc nng DataBinding phc tp.
Gio trnh Visual Studio .NET
126
cmbkhoa.DataSource = ds;
cmbkhoa.DisplayMember = "khoa.tenkhoa";
//Buc ton b d liu ca bng khoa trong DataSet ds vo DataGridView dgvkhoa
dgvKhoa.DataSource = ds;
dgvKhoa.DataMember = "khoa";
4.5.2 Cc ngun d liu ca DataBinding
Nhiu thnh phn c th hot ng nh ngun d liu ca DataBinding. Bt k cc
thnh phn c ci t t giao din Ilist c th xem l nh ngun d liu ca
DataBinding. Cc v d sau minh ha bng cch no s dng DataTable,
DataView, DataSet v Mng nh l ngun d liu ci t DataBinding n gin v
phc tp.
- DataTable: Loi d liu ny lu tr d liu ca mt bng trong c s d liu.
DataTable t = ds.Tables["khoa"];
//DataBinding n gin
txttenkhoa.DataBindings.Add("Text", t, "tenkhoa");
//DataBinding phc tp
cmbkhoa.DataSource = t;
cmbkhoa.DisplayMember = "tenkhoa";
dgvKhoa.DataSource = t;
- DataView:
DataView dv =new DataView (ds.Tables["khoa"]);
//DataBinding n gin
txttenkhoa.DataBindings.Add("Text", dv, "tenkhoa");
//DataBinding phc tp
cmbkhoa.DataSource = dv;
cmbkhoa.DisplayMember = "tenkhoa";
dgvKhoa.DataSource = dv;
- DataSet: nh v d phn 3.5.1
- Mng:
int[] t = new int[4] { 12, 2, 3, 4 };
//DataBinding n gin
txttenkhoa.DataBindings.Add("Text", t, "");
Gio trnh Visual Studio .NET
127
//DataBinding phc tp
cmbkhoa.DataSource = t;
4.5.3 BindingContext
S bn di ch ra cch buc d liu t ngun d liu vo cc iu khin trn Form.
Phn ny ch yu tho lun v cc lp BindingContext, CurrencyManager v ch ra bng
cch no chng tng tc khi d liu b buc vo mt hoc nhiu iu khin trn Form:
BindingContext
Mi Windows Form u c mt thuc tnh BindingContext. Mt BindingContext c mt
tp hp cc BindingManagerBase, cc i tng ny c to ra khi d liu buc vo
mt iu khin.
Nu ngun d liu bao gm mt danh sch cc i tng nh a DataTable, DataView
hoc bt k i tng no ci t trn giao din Ilist khi CurrencyManager s c s
dng. Mt CurrencyManager c th duy tr mt v tr hin thi (current position ) bn
trong ngun d liu. Nu ngun d liu ch tr v mt gi tr n khi PropertyManager
s c lu tr bn trong BindingContext .
Mt CurrencyManager hoc PropertyManager ch c to ra mt ln cho mt ngun d
liu. Nu hai TextBox b buc vo 1 dng ca DataTable khi ch c m
Gio trnh Visual Studio .NET
128
M t
Bindings
Count
Current
Position
129
dataGridView1
Cc iu khin
Gio trnh Visual Studio .NET
130
Tn iu khin
Thuc tnh
Form
Name: frmKhoa
Text: Thng tin v bng Khoa
Label
To ra 4 lable vi cc Text: M Khoa, Tn Khoa, a ch, S in
thoi
TextBox
To ra 4 TextBox vi cc Name: txtMakhoa, txtTenKhoa, txtDiachi,
txtSodienthoai
Button
To ra 7 Button vi cc Name: butBosung, butLuu, butXoa,
butFirst, butPre, butNext, butLast
dataGridView
Name: dataGridView1
Cc phng thc
+ Hm dng frmKhoa to giao din:
public frmKhoa()
{ InitializeComponent(); }
+ Phng thc BuocCacDieuKhien(): Buc d liu vo dataGridView1 v cc textBox
private void BuocCacDieuKhien()
{ //Buc d liu vo dataGridView1
dataGridView1.DataSource = ds;dataGridView1.DataMember = "khoa";
// Buc d liu vo cc textBox
txtMaKhoa.DataBindings.Add("Text", ds, "khoa.makhoa");
txtTenKhoa.DataBindings.Add("Text", ds, "khoa.tenkhoa");
txtdiachi.DataBindings.Add("Text", ds, "khoa.diachi");
txtSodienthoai.DataBindings.Add("Text", ds, "khoa.sdt");
}
+ S kin: frmKhoa_Load() c s dng kt ni d liu, to ra DataSet ds cha ton
b d liu ca bng khoa, buc d liu vo cho cc iu khin v to ra
1SqlCommandBuilder cb qun l vic nhp thm, xa v lu d liu ca
SqlDataAdapter dakhoa .
private void frmKhoa_Load(object sender, EventArgs e)
{
cn.Open(); // Kt ni d liu
cmdkhoa = new SqlCommand("select * from khoa", cn);
dakhoa = new SqlDataAdapter(cmdkhoa);
dakhoa.Fill(ds, "khoa");
BuocCacDieuKhien();
cb = new SqlCommandBuilder(dakhoa);
}
+ S kin: butFirst_Click: Di chuyn con tr v mu tin u tin
private void butFirst_Click(object sender, EventArgs e)
{
this.BindingContext[ds, "khoa"].Position = 0;
Gio trnh Visual Studio .NET
131
}
+ S kin: butPre_Click: Di chuyn con tr v mu tin trc mu tin hin thi
private void butPre_Click(object sender, EventArgs e)
{
this.BindingContext[ds, "khoa"].Position--;
}
+ S kin: butNext_Click: Di chuyn con tr n mu tin k tip
private void butNext_Click(object sender, EventArgs e)
{
this.BindingContext[ds, "khoa"].Position++;
}
+ S kin: butLast_Click: Di chuyn con tr v mu tin cui cng
private void butLast_Click(object sender, EventArgs e)
{
int ViTriMauTinCuoiCung = this.BindingContext[ds, "khoa"].Count - 1;
this.BindingContext[ds, "khoa"].Position = ViTriMauTinCuoiCung;
}
+ S kin: butBosung_Click: To mi mt dng
private void butBosung_Click(object sender, EventArgs e)
{
this.BindingContext[ds, "khoa"].AddNew();
}
+ S kin: butLuu_Click: Di chuyn con tr v mu tin cui cng, nu c thay i trong
DataSet ds th cp nht li d liu, vic cp nht nh vo SqlCommandBuilder cb. Cc
thao tc b sung v xa ch c cp nht vo c s d liu khi ngi s dng kch chut
vo nt Lu
private void butLuu_Click(object sender, EventArgs e)
{
this.BindingContext[ds, "khoa"].EndCurrentEdit();
if (ds.HasChanges() == true)
{
try
{
dakhoa.Update(ds, "khoa");
MessageBox.Show("Da cap nhat");
}
catch (Exception ll) { MessageBox.Show(ll.Message); }
}
}
+ S kin: butXoa_Click: Ly v tr ca con tr hin thi, sau xa i mu tin ny.
Gio trnh Visual Studio .NET
132
dataGridView1
133
Cc iu khin
Tn iu khin
Thuc tnh
ListBox
Name: lstKhoa
Form
Name: frmKhoa_Docgia
Text: Khoa v c gi
Label
To ra 6 lable vi cc Text: M c gi, H v tn, Ngy sinh, a
ch, Ngy lp th v M khoa
TextBox
To ra 6 TextBox vi cc Name: txtMadocgia, txtHoten,
txtNgaysinh, txtDiachi, txtNgaylapthe, txtMakhoa
Button
To ra 8 Button vi cc Name: butBosung, butLuu, butXoa,
butPhuchoi, butFirst (|<), butPre (<<), butNext (>>), butLast (>|)
dataGridView
Name:
Cc phng thc
+ Hm dng frmKhoa_Docgia() to giao din:
public frmKhoa_Docgia()
{
InitializeComponent(); }
+ Phng thc Datquanhe bao gm cc tham s: bng chnh, bng ph, kha chnh, kha
Gio trnh Visual Studio .NET
134
BuocCacDieuKhien();
}
+ S kin: butFirst_Click: Di chuyn con tr v mu tin u tin
private void butFirst_Click(object sender, EventArgs e)
{
this.BindingContext[ds, "khoa.khoa_docgia"].Position = 0;;
}
+ S kin: butPre_Click: Di chuyn con tr v mu tin trc mu tin hin thi
private void butPre_Click(object sender, EventArgs e)
{
this.BindingContext[ds, "khoa.khoa_docgia"].Position--;
}
+ S kin: butNext_Click: Di chuyn con tr n mu tin k tip
private void butNext_Click(object sender, EventArgs e)
{
this.BindingContext[ds, "khoa.khoa_docgia"].Position++;
}
+ S kin: butLast_Click: Di chuyn con tr v mu tin cui cng
private void butLast_Click(object sender, EventArgs e)
{
int ViTri = this.BindingContext[ds"khoa.khoa_docgia"].Count - 1;
this.BindingContext[ds, "khoa"].Position = ViTri;
}
+ S kin: butBosung_Click: To mi mt dng
private void butBosung_Click(object sender, EventArgs e)
{
this.BindingContext[ds, "khoa.khoa_docgia"].].AddNew();
}
+ S kin: butLuu_Click: Di chuyn con tr v mu tin cui cng, nu c thay i trong
DataSet ds th cp nht li d liu, vic cp nht nh vo SqlCommandBuilder cb. Cc
thao tc b sung v xa ch c cp nht vo c s d liu khi ngi s dng kch chut
vo nt Lu
private void butLuu_Click(object sender, EventArgs e)
{
this.BindingContext[ds, "khoa.khoa_docgia"].EndCurrentEdit();
if (ds.HasChanges() == true)
{
try
{
dakhoa.Update(ds, "docgia");
Gio trnh Visual Studio .NET
136
137
138
139
pht sinh h thng bt u hay kt thc. Phng thc p ng s kin gi l trnh qun l
s kin, cc trnh qun l s kin ny c vit bng m C# trong trang m (code-behind)
v kt hp vi cc thuc tnh ca cc iu khin thuc trang.
Trnh qun l s kin l mt Delegate, phng thc ny s tr v kiu void, v c hai
i s. i s u tin l th hin ca i tng pht sinh ra s kin, i s th hai l i
tng EventArg hay mt i tng khc c dn xut t i tng EventArgs. Cc s
kin ny c qun l trn Server.
5.2.1 S kin PostBack v Non-PostBack
PostBack l s kin s khin Form c gi v Server ngay lp tc, chng hn s kin
trnh mt Form vi phng thc Post. i lp vi PostBack l Non- PostBack, s kin
ny khng gi Form nn Server m n lu s kin trn vng nh Cache cho ti khi c
mt s kin PostBack na xy ra. Khi mt iu khin c thuc tnh AutoPostBack l true
th s kin PostBack s c tc dng trn iu khin :mc nhin thuc tnh
AutoPostBach ca iu khin DropDownList l false, ta phi t li l true th s kin
chn mt mc khc trong DropDownList ny mi c tc dng.
5.2.2 Trng thi ca ng dng Web (State)
Trng thi ca ng dng Web l gi tr hin hnh ca cc iu khin v mi bin trong
phin lm vic hin hnh ca ngi dng. Web l mi trng khng trng thi, ngha l
mi s kin Post ln Server u lm mt i mi thng tin v phin lm vic trc . Tuy
nhin ASP.NET cung cp c ch h tr vic duy tr trng thi v phin ca ngi
dng. Bt k trang no khi c gi ln my ch Server u c my ch tng hp
thng tin v ti to li sau mi gi xung trnh duyt cho my khch. ASP.NET cung
cp mt c ch gip duy tr trng thi ca cc iu khin pha my ch (Server Control )
mt cch t ng. V th nu ta cung cp cho ngi dng mt danh sch d liu ListBox,
v ngi dng thc hin vic chn la trn ListBox ny, s kin chn la ny s vn
c duy tr sau khi trang c gi ln my ch v gi v cho trnh duyt cho my khch.
5.2.3 Chu trnh sng ca mt Web-Form
Khi c yu cu mt trang Web trn my ch Web s to ra mt chui cc s kin my
ch , t lc bt u cho n lc kt thc mt yu cu s hnh thnh mt chu trnh sng (
Life-Cycle ) cho trang Web v cc thnh phn thuc n. Khi mt trang Web c yu
cu, my ch s tin hnh m ( Load ) n v khi hon tt yu cu my ch s ng trang
ny li, kt xut ca yu cu ny l mt trang HTML tng ng s c gi v cho trnh
duyt. Di y s lit k mt s s kin, ta c th bt cc s kin x l thch hp hay
Gio trnh Visual Studio .NET
140
141
Inherits="ProgrammingCSharpWeb.WebForm1" %>
Thuc tnh language ch ra ngn ng lp trnh c dng trong trang m qun l
trang, y l C#. Codebehide xc nh trang m qun l c tn HelloWeb.cs v thuc
tnh Inherits ch trang Web c tha k t lp WebForm1 c vit trong
HelloWeb.cs:
public class WebForm1: System.Web.UI.Page
Ta thy trang ny c tha k t lp System.Web.UI.Page, lp ny do ASP.NET cung
cp, xc nh cc thuc tnh, phng thc v cc s kin chung cho cc trang pha my
ch. M HTML pht sinh nh dng thuc tnh ca Form:
<form id="Form1" method="post" runat="server">
Thuc tnh id lm nh danh cho Form, thuc tnh method c gi tr l POST ngha l
Form s c gi ln my ch ngay lp tc khi nhn mt s kin do ngi dng pht ra (
nh s kin nhn nt ) v c IsPostBack trn my ch khi s c gi tr l true. Bin c
ny c gi tr l false nu Form c trnh vi phng thc GET hay ln u tin
trang c gi. Bt k iu khin no hay Form c thuc tnh runat=server th iu
khin hay Form ny s c x l bi ASP.NET Framework trn my ch. Thuc tnh
MS_POSITIONING =GridLayout trong th <Body>, cho bit cch b tr cc iu
khin trn Form theo dng li.
Hin gi Form ca ta l trng, hin th mt chui g ln mn hnh, ta g dng m
sau trong th <body>:
Hello World! It is now <% = DateTime.Now.ToString( ) %>
Ging vi ASP, phn nm trong du <% %> c xem nh l m qun l cho trang,
y l m C#. Du = ch ra mt gi tr nhn c t mt bin hay mt i tng no ,
ta cng c th vit m trn li nh sau vi cng chc nng:
Hello World! It is now
<% Response.Write(DateTime.Now.ToString( )); %>
Thc thi trang ny ( Ctrl-F5 ), kt qu s hin trn trnh duyt nh sau:
Hello World! It is now 26/02/08 9:28:56 AM
thm cc iu khin cho trang, hoc l ta c th vit m trong ca s HTML hoc l
Gio trnh Visual Studio .NET
142
143
<head>
// m qun l C# s c vit trong th <script> ny
<script language="C#" runat="server">
// trang s gi hm ny u tin, ta s thc hin kt buc
// trc tip trong hm ny
void Page_Load(Object sender, EventArgs e) {
Page.DataBind();
}
// ly gi tr ca thuc tnh thng qua thuc tnh // get
string custID{
get {
return "ABCD";
}
}
int orderCount{
get {
return 11;
}
}
</script>
</head>
<body>
<h3><font face="Verdana"> Ket buoc khong dung DataSource
</font></h3>
<form runat=server>
Khach hang: <b><%# custID %></b><br>
Gio trnh Visual Studio .NET
144
145
+ To file cu hnh: Web site | Add New Item chn Web Configuration File
+ To ng kt ni n c s d liu quanlythuvien
Gio trnh Visual Studio .NET
146
+ Khi lp trnh Web s dng c s d liu SQL Server ta s dng cc th vin sau (cc
th vin ny dng chung cho tt c cc lp trong v d ny):
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
147
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Web.Configuration;
+ Trong lp KetNoiVaThaoTac ta s dng cc trng, thuc tnh v cc phng thc
dng chung nh sau:
{
this.ChuoiKetNoi = ChuoiKetNoi;
MoDuongKetNoi();
}
148
{
if (cn == null || cn.State == ConnectionState.Closed)
{
cn = new SqlConnection(ChuoiKetNoi);
cn.Open();
}
}
+ Khi khng c nhu cu kt ni n c s d liu, ta khai bo phng thc ng kt
ni v gii phng i tng SqlConnection:
public void DongKetNoi()
{
if (cn.State == ConnectionState.Open)
{
cn.Close();
}
cn.Dispose();
}
{
set { commandText = value; }
get { return commandText; }
}
+ ch nh ngi lp trnh s dng cu lnh SQL hay tn th tc lu tr ta khai bo
Gio trnh Visual Studio .NET
149
{
set { commandType = value; }
get { return commandType; }
}
+ Nu cu lnh SQL hoc th tc lu tr c tham s, ta khai bo thuc tnh
ParameterCollection truyn vo mng cc tham s nh sau:
public string[] ParameterCollection
{
set { parameterCollection = value; }
get { return parameterCollection; }
}
+ Khi truyn vo mng cc tham s th ngi lp phi truyn mng gi tr tng ng
thng qua thuc tnh ValueCollection:
public string[] ValueCollection
{
set { valueCollection = value; }
get { return valueCollection; }
}
{
for (int i = 0; i < parameterCollection.Length; i++)
{
150
cmd.Parameters.AddWithValue(
parameterCollection[i], valueCollection[i]);
}
}
+ Trong ADO.NET phng thc thng thc hin cu lnh SQL hoc th tc lu tr
l: ExecuteNonQuery. Ta c th xy dng li phng thc ExecuteNonQuery nh sau:
public int ExecuteNonQuery()
{
cmd = new SqlCommand();
cmd.CommandText = commandText;
cmd.Connection = cn;
cmd.CommandType = commandType;
if (ParameterCollection.Length > 0)
AddParameters(cmd);
int rows = cmd.ExecuteNonQuery();
cmd.Dispose();
return rows;// Tr v s mu tin thc thi
}
{
cmd = new SqlCommand();
cmd.CommandText = commandText;
151
cmd.Connection = cn;
cmd.CommandType = commandType;
if (ParameterCollection != null)
AddParameters(cmd);
object obj = cmd.ExecuteScalar();
cmd.Dispose();
return obj;
}
{
cmd = new SqlCommand();
cmd.CommandText = commandText;
cmd.Connection = cn;
cmd.CommandType = commandType;
if (ParameterCollection != null)
AddParameters(cmd);
da = new SqlDataAdapter(cmd);
DataSet dataSet = new DataSet();
da.Fill(dataSet);
cmd.Dispose();
da.Dispose();
return dataSet;
152
{
cmd = new SqlCommand();
cmd.CommandText = commandText;
cmd.Connection = cn;
cmd.CommandType = commandType;
if (ParameterCollection != null)
AddParameters(cmd);
da = new SqlDataAdapter(cmd);
DataTable dataTable = new DataTable();
da.Fill(dataTable);
cmd.Dispose();
da.Dispose();
return dataTable;
}
153
{
LopChung = new KetNoiVaThaoTac(cnstr);
}
{
set { commandText = value; }
get { return commandText; }
}
Gio trnh Visual Studio .NET
154
{
set { commandType = value; }
get { return commandType; }
}
private string[] parameterCollection;
public string[] ParameterCollection
{
set { parameterCollection = value; }
get { return parameterCollection; }
}
private string[] valueCollection;
public string[] ValueCollection
{
set { valueCollection = value; }
get { return valueCollection; }
}
{
LopChung.CommandText = commandText;
155
LopChung.CommandType = commandType;
LopChung.ParameterCollection = parameterCollection;
LopChung.ValueCollection = valueCollection;
}
{
LopChung.DongKetNoi();
}
{
int totalRecord = 0;
object obj = LopChung.ExecuteScalar();
if (obj != null) totalRecord = (int)obj;
return totalRecord;
{
DataTable dataTable = LopChung.GetDataTable();
if (dataTable != null)
156
gridView.DataSource = dataTable;
}
else
gridView.DataSource = null;
gridView.DataBind();
}
gridView.AllowPaging = true;
DataTable dataTable = LopChung.GetDataTable();
if (dataTable != null)
{
gridView.DataSource = dataTable;
gridView.PageSize = pageSize;
gridView.PagerSettings.PageButtonCount = pageCount;
gridView.PagerSettings.Mode = pagerButtons;
}
else
gridView.DataSource = null;
gridView.DataBind();
Gio trnh Visual Studio .NET
157
{
int totalRecord = 0;
DataTable dataTable = LopChung.GetDataTable();
if (dataTable != null)
{
dataList.DataSource = dataTable;
totalRecord = dataTable.Rows.Count;
}
else
dataList.DataSource = null;
dataList.DataBind();
return totalRecord;
{
foreach (GridViewRow rows in GridView1.Rows)
158
hyperLink.Text =rows.Cells[TruongHienThi].Text;
hyperLink.NavigateUrl = url + rows.Cells[TruongLienket].Text ;
hyperLink.ToolTip = Thongbao;
rows.Cells[1].Controls.Add(hyperLink);
}
}
Trong :
+ Trng cnstr c s dng ly chui kt ni trong file cu hnh Web.config
string cnstr =
WebConfigurationManager.ConnectionStrings["thuvien"].ConnectionString;
+ Xy dng hm dng Docgia() rng
+ Phng thc KiemDangNhap kim tra xem m c gi v mt khu c gi nhp c
ng khng.
public int KiemDangNhap(string UserName, string PassWord)
{
DuaDulieuVaoDieuKhien dl = new DuaDulieuVaoDieuKhien(cnstr);
159
dl.CommandType = CommandType.Text;
dl.ParameterCollection = new string[2] { "@madg","pwd" };
dl.ValueCollection = new string[2] { UserName,PassWord};
dl.KhoiTao();
int kq= dl.DemDong() ;
return kq;
{
string[] st = new string[2];
KetNoiVaThaoTac dl = new KetNoiVaThaoTac(cnstr);
{
st[0] = dt.Rows[0][1].ToString();
160
st[1] = dt.Rows[0][2].ToString();
}
else
st = null;
return st;
{
DuaDulieuVaoDieuKhien dl = new DuaDulieuVaoDieuKhien(cnstr);
dl.CommandType = CommandType.Text;
dl.ParameterCollection = new string[1] { "@madocgia" };
dl.ValueCollection = new string[1] { madocgia };
dl.KhoiTao();
dl.NapDuLieuVaoGridView(gv);
}
161
{
if (KiemDangNhap(madg,MatKhauCu)==1)
{
KetNoiVaThaoTac dl = new KetNoiVaThaoTac(cnstr);
dl.CommandType = CommandType.Text;
dl.ParameterCollection = new string[3] {
"@madg","@matkhaucu","@matkhaumoi" };
}
else
return 0;
}
Trong :
Gio trnh Visual Studio .NET
162
{
string[] st = new string[2];
KetNoiVaThaoTac dl = new KetNoiVaThaoTac(cnstr);
dl.CommandText =
"select masach,nhande,tacgia from sach where masach=@masach";
dl.CommandType = CommandType.Text;
dl.ParameterCollection = new string[1] { "@masach" };
dl.ValueCollection = new string[1] { masach };
dl.MoDuongKetNoi();
DataTable dt = dl.GetDataTable();
if (dt.Rows.Count != 0)
{
st[0] = dt.Rows[0][1].ToString();
st[1] = dt.Rows[0][2].ToString();
}
else
st = null;
return st;
163
{
KetNoiVaThaoTac dl = new KetNoiVaThaoTac(cnstr);
dl.CommandType = CommandType.Text;
dl.ParameterCollection = new string[1] { "@masach" };
dl.ValueCollection = new string[1] { masach };
dl.MoDuongKetNoi();
return dl.ExecuteNonQuery() ;
}
164
Trong :
+ Trng cnstr ging nh lp Docgia
+ Hm dng PhieuMuon() rng
+ Phng thc KiemTraMuon kim tra xem c gi c m l madocgia tr sch hay
cha. Ta da vo trng trangthai trong bng phieumuon: nu trng thai=0 th th c gi
ny tr sch, trangthai=1 mn sch trn Web nhng cha ly sch, trangthai=2
ly sch.
public int KiemTraMuon(string Madocgia)
{
DuaDulieuVaoDieuKhien dl = new DuaDulieuVaoDieuKhien(cnstr);
dl.CommandType = CommandType.Text;
dl.ParameterCollection = new string[1] { "@madg"};
dl.ValueCollection = new string[1] { Madocgia };
dl.KhoiTao();
return dl.DemDong();
165
{
Sach s = new Sach();
if (s.GiamSoLuong(masach) == 1)
{
KetNoiVaThaoTac dl = new KetNoiVaThaoTac(cnstr);
dl.CommandType = CommandType.Text;
dl.ParameterCollection = new string[5]
{ "@madg", "@ngaymuon", "@masach", "@sl", "@trangthai" };
dl.ValueCollection = new string[5] { madg,
ngaymuon.ToShortDateString() , masach,sl.ToString(), trangthai.ToString() };
dl.MoDuongKetNoi();
return dl.ExecuteNonQuery() ;
}
else
return 0;
}
166
dl.ValueCollection = null
dl.MoDuongKetNoi();
int kq= dl.ExecuteNonQuery();
if (kq == 1)
{
Sach s = new Sach();
s.TangSoLuong(masach);
}
return kq;
}
167
gi,Left.ascx: Hin th cc loi sch. Right.ascx: Tm kim theo tn sch hoc tc gi.
v Lietkesach.ascx nh sau:
Top.ascx
TopMeNu.ascx
Right.ascx
Left.asc
x
LietKesach.ascx
{
Label1.Text = DateTime.Now.Day.ToString();
Label2.Text = DateTime.Now.Month.ToString();
Gio trnh Visual Studio .NET
168
Label3.Text = DateTime.Now.Year.ToString();
}
5.3.3.2 Xy dng WebUserControl: TopMenu.ascx:
Session["UserName"] = null;
Response.Redirect("~/Default.aspx");
}
protected void LinkButton2_Click(object sender, EventArgs e)
{
Response.Redirect("~/ThongTinDocGia.aspx");
}
protected void LinkButton3_Click(object sender, EventArgs e)
{
Response.Redirect("~/MuonSach.aspx");
}
protected void LinkButton5_Click(object sender, EventArgs e)
{
Response.Redirect("~/DoiMatkhau.aspx");
Gio trnh Visual Studio .NET
169
}
protected void LinkButton5_Click(object sender, EventArgs e)
{
Response.Redirect("~/DangNhap.aspx");
}
{
Response.Redirect("Default.aspx?ma=" + TextBox1.Text);
}
170
+ Vo Source sa li nh sau:
{if (!IsPostBack)
{
171
string cnstr =
WebConfigurationManager.ConnectionStrings["thuvien"].ConnectionString;
DuaDulieuVaoDieuKhien dl = new DuaDulieuVaoDieuKhien(cnstr);
}
5.3.3.5 Xy dng WebUserControl: LietKeSach.ascx
+ hin th thng tin ca cc quyn sch c tn loi chn left.ascx hoc hin th thng
tin ca cc quyn sch c tn sch hoc tn tc gi nhp Right.ascx:
+ Chn Data ca s ToolBox: to ra 1 Literal
+ Chn Data ca s ToolBox: to ra 1 GridView | Edit Columns to cc ct:
172
Trong :
- DataTextField: nhande l trng cn hin th d liu v to lin kt
- DataNavigateUrlFormatString: ~/MuonSach.aspx?masach={0}, khi ta chn nhan
sch s lin kt sang trang MuonSach.aspx v truyn 1 tham s l masach sang trang
MuonSach.aspx
- DataNavigateUrlField: masach l gi tr ca tham s truyn sang trang Muonsach.aspx.
+ Ti ca s Properties ta t 2 thuc tnh cho GridView:
- Width: 100%
Gio trnh Visual Studio .NET
173
- EnableSortingAndPagingCallbacks:True
+ Sau khi thc hin cc thao tc trn ta nhn c m HTML pht sinh nh sau:
+ Trn s kin Page Load ta nhn v m loi v tn loi t left.ascx hoc nhn v tn sch
hoc tn tc gi t right.aspx, t ta hin th sch ra GridView1:
- u tin ta xy dng hm GetSql xc nh ngi dng chn tn loi Left.ascx hay
tm kim theo tn sch hoc tn tc gi Right.ascx, hm xc nh cu lnh sql tng
ng.
string[] GetSql()
{
string maloai = Request.QueryString.Get("maloai");//Ly v m loi t Left.ascx
sql[1] = maloai;
}
if (ma != "" && ma != null)// Nu ngi dng i tm kim Right.ascx
174
}
protected void Page_Load(object sender, EventArgs e)
{
string[] ma = new string[2] { "",""};
ma= GetSql();
if (ma[0] != "" && ma[0] != null)
{ string cnstr =
WebConfigurationManager.ConnectionStrings["thuvien"].ConnectionString;
DuaDulieuVaoDieuKhien dl = new DuaDulieuVaoDieuKhien(cnstr);
dl.CommandText = ma[0];
dl.ParameterCollection = new string[1] { "@maloai" };
dl.ValueCollection = new string[1] { ma[1] };
dl.KhoiTao();
//Hin th ti a 5 dng trn GridView, s trang hin th l 10
dl.TaoLienKetTrongGridView(GridView1, "~/MuonSach.aspx?masach=", 1, 0,
"Kch vo tn sch mn");
175
{Literal1.Text = "<B> SINH VIN HY CHN LOI SCH HOC TM KIM SCH MN</B>";
}
}
{
GridView1.PageIndex = e.NewPageIndex ;
}
5.3.4. Xy dng cc cc trang WEB
Theo yu cu ca v d ta cn xy dng 5 trang WEB sau:
DangNhap.asp: cho php c gi ng nhp ti khon.
Default.aspx (trang ch): c gi chn hoc tm sch mn.
Muonsach.aspx: Ngi dng mn sch
ThongTinDocGia.aspx: Hin th tt c cc thng tin ca c gi
DoiMatKhau.aspx: c gi thay i mt khu
To 1 trang WEB: Web site | Add New Item| G tn trang | Add
176
{
Gio trnh Visual Studio .NET
177
Session["kt"] = null;
}
+ Trn s kin Click ca nt ng Nhp (Button1) ta kim tra xem c gi ng nhp
ng hay khng nu ng nhp ng th m trang Default.aspx, trong s kin ny ta s
dng phng thc KiemDangNhap ca lp Docgia.
protected void Button1_Click(object sender, EventArgs e)
{
Session["kt"] = 1;
Session["UserName"] = TxtMaDocGia.Text;
Response.Redirect("~/Default.aspx");
}
else
{ Literal1.Text = "<font color=#FF3300><b> Sai Ma doc gia hoac Mat Khau <b></font>";
}
}
178
+ Nhn F5 chy th
5.3.4.3 To trang Muonsach.asp
179
{
if (Session["kt"] == null)// c gi cha ng nhp
{
Response.Redirect("~/DangNhap.aspx");
}
else
{
TxtMasach.Text = ma;
KiemTrasach(); // Hin th tn sch, tn tc gi
ButKiemTra.Enabled = false;
180
}
}
}
{
Docgia dg = new Docgia();
string[] st = new string[2];
st = dg.GetDocGia(txtma.Text);
if (st != null)
{
txtHoTen.Text = st[0];
TxtKhoa.Text = st[1];
}
}
{
Literal1.Text = "";
Sach dg = new Sach();
string[] st = new string[2];
181
st = dg.GetSach(TxtMasach.Text);
if (st != null)
{
TxtTensach.Text = st[0];
TxtTacGia.Text = st[1];
}
else
{
Literal1.Text = "Khong co ma sach nay";
}
}
{
KiemTrasach();
}
182
{
Literal2.Text = "Ban chua tra sach";
}
else
}
5.3.4.3 To trang ThongTinDocGia.aspx
+ Chn HTML trn ToolBox: To 1 Table: 1 dng, 1 ct:
+ Chn th mc UC ca s Solution Explored:
Ko Top.ascx v TopMenu.ascx vo dng u tin.
+ Ti dng th 2 ca bng:
Chn Standard trn ToolBox to ra 1 Label v 1 DataGrid:
183
184
{
TxtMaDocGia.Text = Session["UserName"].ToString();
}
185
{
Docgia dg = new Docgia();
if (TxtMatkhaumoi.Text.Equals(TxtGoLaiMatKhau.Text))
{
if(dg.DoiMatKhau(TxtMaDocGia.Text,TxtMatKhaucu.Text,TxtMatkhaumoi.Text)==1)
}
5.3.5 Yu cu b sung:
+ Vi v d trn ch tp trung vo vic t trc ch mn sch, cha quan tm n
chc nng ca ngi qun th.
+ Yu cu b sung, hy to ra cc trang thc hin cc cng vic sau:
- ngi qun th ng nhp ti khon
- ngi qun th cho mn sch (cn c vo cc c gi t ch trc)
- Hin th thng tin c gi mn qu hn
- c gi tr sch.
PH LC
LC
Bng tng quan/chuyn i kiu d liu .NET Framework vi cc Data Provider
.NET
Framework System.Data.DbType
type
SqlDbType
OleDbType
OdbcType
OracleType
186
.NET
Framework System.Data.DbType
type
SqlDbType
OleDbType
OdbcType
OracleType
bool
Boolean
Bit
Boolean
Bit
Byte
byte
Byte
TinyInt
UnsignedTinyInt
TinyInt
Byte
byte[]
Binary
Binary
Raw
Khng h tr.
Char
Char
Byte
char
DateTime
DateTime
DateTime
DBTimeStamp
DateTime
DateTime
Decimal
Decimal
Decimal
Decimal
Numeric
Number
double
Double
Float
Double
Double
Double
float
Single
Real
Single
Real
Float
Guid
Guid
UniqueIdentifier Guid
UniqueIdentifier Raw
Int16
Int16
SmallInt
SmallInt
SmallInt
Int16
Int32
Int32
Int
Int
Int
Int32
Int64
Int64
BigInt
BigInt
BigInt
Number
object
Object
Variant
Variant
Khng h tr.
Blob
187
.NET
Framework System.Data.DbType
type
SqlDbType
OleDbType
OdbcType
OracleType
string
String
NVarChar.
VarWChar
Chuyn i ngm
nh
ny
l
khng ng nu
string ln hn
kch thc ti a
ca
mt
NVarChar
(4000 k t).
NVarChar
NVarChar
TimeSpan
Time
Khng h tr.
DBTime
Time
DateTime
UInt16
UInt16
Khng h tr.
UnsignedSmallInt Int
UInt16
UInt32
UInt32
Khng h tr.
UnsignedInt
BigInt
UInt32
UInt64
UInt64
Khng h tr.
UnsignedBigInt
Numeric
Number
AnsiString
VarChar
VarChar
VarChar
VarChar
AnsiStringFixedLength Char
Char
Char
Char
Currency
Money
Currency
Khng h tr.
Number
Date
Khng h tr.
DBDate
Date
DateTime
SByte
Khng h tr.
TinyInt
Khng h tr.
SByte
StringFixedLength
NChar
WChar
NChar
NChar
Time
Khng h tr.
DBTime
Time
DateTime
VarNumeric
Khng h tr.
VarNumeric
Khng h tr.
Number
188
189