Toơn tүp giƠo trình nơy lơ kӁt quҥ cөa sӳ cô đӏng nhӱng kiӁn thӫc cần thiӁt giúp bңn lơm chө nӃn tҥng .NET cho công viӉc. Chúng tôi đã đúc kӁt nhӱng kinh nghiӉm thӳc tӁ, rút gӏn nhӱng điӃm cần lưu Ứ, nhӱng kỹ thuүt mơ hầu hӁt cƠc công ty phần mӃm phƠt triển ӫng dӧng trên nӃn tҥng .NET đӃu yêu cầu thӳc hiӉn. HѪn nӱa đây còn lơ tơi liӉu mơ bңn có thể sӯ dӧng để ôn tүp lңi nhӱng kiӁn thӫc sau nhӱng giӟ lên lớp vơ đặc biӉt trong công viӉc cөa cƠc bңn. Xuất thân từ một nhơ phƠt triển, chuyên gia phân tích hӉ thống, tôi đã gói nhӱng kiӁn thӫc cốt lõi vơ cần thiӁt nhất trong lүp trình trên công nghӉ .NET vơo tơi liӉu nơy. Nhӱng ví dӧ trong tơi liӉu lơ nhӱng ví dӧ thӳc tӁ đưӥc tôi trích lӏc từ nhӱng dӳ Ơn mơ tôi vơ đồng sӳ đã thӳc hiӉn trong suốt thӟi gian tham gia lơm viӉc tơi nhiӃu công ty phần mӃm lớn, đó lơ cƠc tình huống cӧ thể mơ chúng tôi gặp phҥi, vơ giӟ đây tôi tổng kӁt lңi để giới thiӉu đӁn cƠc bңn như một sӳ chia sẻ kinh nghiӉm. Sau thӟi gian lơm viӉc vơ hoңt động trên mңng thông tin ViӉt Nam - www.itgate.com.vn - đã có nhiӃu ngưӟi bңn lơm viӉc tңi cƠc công ty tin hӏc trong nước cũng như cƠc bңn bè cөa tôi trên mңng gӡi email, hỏi đƠp vơ yêu cầu tôi viӁt một tơi liӉu đầy đө vӃ lүp trình .NET, chia sẻ nhӱng kinh nghiӉm thӳc tӁ trong công viӉc để mӏi ngưӟi cùng tham khҥo, phҥi ngắn gӏn vơ thүt sӳ thӳc tӁ nhưng lңi phҥi chuyên sâu vơ thể hiӉn nhӱng kỹ thuүt cao trong lүp trình. Tôi đã nghĩ vӃ nhӱng yêu cầu đó, vơ quyӁt đӍnh viӁt tơi liӉu nơy vơo mỗi buổi tối sau giӟ lơm viӉc. Đây như một món quơ đƠp lңi sӳ tín nhiӉm, yêu mӁn mơ cƠc bңn đã, đang vơ sẽ dơnh cho tôi. Tôi rất mong nhүn đưӥc nhiӃu Ứ kiӁn đóng góp cөa cƠc bңn cho tơi liӉu nơy, vơ tôi sẽ tổng hӥp lңi để cүp nhүt cho tơi liӉu một tốt hѪn. Tôi mong rằng tơi liӉu nơy sẽ đồng hơnh cùng cƠc bңn trong công viӉc. TƠc giҥ
Trang 1MICROSOFT NET (C#) PROFESSIONAL PROGRAMMING FOR REAL LIFE
Trang 2L I NG
Toơn t p giƠo trình nơy lơ k t qu c a s cô đ ng nh ng ki n th c cần thi t giúp
b n lơm ch n n t ng NET cho công vi c Chúng tôi đã đúc k t nh ng kinh nghi m
th c t , rút g n nh ng đi m cần lưu Ứ, nh ng kỹ thu t mơ hầu h t cƠc công ty phần m m phƠt triển ng d ng trên n n t ng NET đ u yêu cầu th c hi n H n n a đây còn lơ tơi li u mơ b n có thể s d ng để ôn t p l i nh ng ki n th c sau
nh ng gi lên lớp vơ đặc bi t trong công vi c c a cƠc b n
Xuất thân từ một nhơ phƠt triển, chuyên gia phân tích h thống, tôi đã gói nh ng
ki n th c cốt lõi vơ cần thi t nhất trong l p trình trên công ngh NET vơo tơi
li u nơy Nh ng ví d trong tơi li u lơ nh ng ví d th c t đư c tôi trích l c
từ nh ng d Ơn mơ tôi vơ đồng s đã th c hi n trong suốt th i gian tham gia lơm
vi c tơi nhi u công ty phần m m lớn, đó lơ cƠc tình huống c thể mơ chúng tôi gặp ph i, vơ gi đây tôi tổng k t l i để giới thi u đ n cƠc b n như một s chia
sẻ kinh nghi m
Sau th i gian lơm vi c vơ ho t động trên m ng thông tin Vi t Nam - www.itgate.com.vn - đã có nhi u ngư i b n lơm vi c t i cƠc công ty tin h c trong nước cũng như cƠc b n bè c a tôi trên m ng g i email, hỏi đƠp vơ yêu cầu tôi
vi t một tơi li u đầy đ v l p trình NET, chia sẻ nh ng kinh nghi m th c t trong công vi c để m i ngư i cùng tham kh o, ph i ngắn g n vơ th t s th c t nhưng l i ph i chuyên sâu vơ thể hi n nh ng kỹ thu t cao trong l p trình Tôi đã nghĩ v nh ng yêu cầu đó, vơ quy t đ nh vi t tơi li u nơy vơo mỗi buổi tối sau
gi lơm vi c Đây như một món quơ đƠp l i s tín nhi m, yêu m n mơ cƠc b n đã, đang vơ sẽ dơnh cho tôi
Tôi rất mong nh n đư c nhi u Ứ ki n đóng góp c a cƠc b n cho tơi li u nơy, vơ tôi sẽ tổng h p l i để c p nh t cho tơi li u một tốt h n
Tôi mong rằng tơi li u nơy sẽ đồng hơnh cùng cƠc b n trong công vi c
TƠc gi
Ph m Tuấn Anh
Trang 3đư c li t kê t i m c THAM KH O cuối tơi li u nơy
M i s sao chép, sao lưu, xuất b n, chuyển giao không đư c s cho phép c a ông
Ph m Tuấn Anh lơ không h p phƠp
TƠc gi
Ph m Tuấn Anh
Trang 4M C L C
L P TRỌNH NET (C#) 8
Cấu trúc l p trình C# căn b n - 9
ng dụng “C# Hello World” 9
Ti p c n C# - 10
Khai báo bi n trong C# 11
Kiểu d li u trong C# 11
Input/Output trong C# căn b n 11
Cấu trúc đi u khiển trong l p trình C# 12
Cấu trúc if 12
Cấu trúc switch … case 12
Cấu trúc vòng lặp trong l p trình C# 13
Vòng lặp While 13
Vòng lặp do 14
Vòng lặp for 14
Vòng lặp foreach 14
Arrays - M ng trong C# 15
Chúng ta đã h c 15
Bài t p t th c hi n 16
Hi n th c khƠi ni m hướng đối tư ng (OOP) trong C# - 17
L p (class) trong C# 17
Class 18
Đối t ợng (Objects) 18
u điểm c a vi c sử dụng Class và Đối t ợng 18
Hàm t o (Constructors) và hàm h y (Destructors) trong C# 18
Constructors 18
Destructors 19
Fuction Overloading 19
Thừa k trong C# 20
Overriding, Polymorphism trong C# 21
Overriding 21
Polymorphism 22
Abstract Class trong C# 24
Namespaces 24
Khái ni m Namespace 24
Khai báo m t Namespace 24
Enumerator trong C# 25
BẪI T P Cọ H NG D N 25
C S D LI U 27
Thao tác v i h qu n trị d li u MSSQL Server 28
Khởi t o m t h cơ sở d li u 28
T o b ng 28
Truy vấn d li u từ m t b ng 28
Truy vấn d li u có đi u ki n 29
Truy vấn d li u từ nhi u b ng 29
Thêm d li u vào b ng 31
C p nh t d li u trong b ng 31
Xóa d li u từ b ng 31
L P TRỌNH DÀNH CHO CÔNG VI C 32
ADO.NET vơ thao tƠc với c s d li u - 33
Gi i thi u v ADO.NET 34
Mô hình ADO.NET 34
Data Provider 34
K t nối 35
Data Adapter 35
Thu c tính và ph ơng th c c a Data Adapter 35
Data Command 36
Data Reader 36
DataSet 37
Trang 5BẪI T P Cọ H NG D N 38
BẪI T P T RÈN LUY N 38
Data Binding 38
Khái ni m Data Binding 38
Th c hi n Data Binding thông qua cƯu l nh truy vấn 39
L c và sắp x p d li u 39
L c m t Dataset 39
Sử dụng cƯu l nh SQL có tham số 39
Thêm, c p nh t, xóa d li u trong cơ sở d li u 40
Thêm m i d li u vào cơ sở d li u 40
C p nh t, xóa d li u trong cơ sở d li u 40
XƯy d ng m t l p CSDL dùng chung 42
XƯy d ng l p giao ti p v i CSDL - DBClass 42
Sử dụng l p giao ti p v i CSDL - DBClass 45
Xây d ng ng d ng Windows Form - 45
XƯy d ng Windows Forms 45
Visual Studio NET Integrated Development Environment (IDE) 45
T o m t d án trong Visual Studio Net 46
Window Form Controls 50
Windows Form 50
Thu c tính Windows Form 51
S ki n trong Windows Form 51
TextBox Control 52
Label Control 52
LinkLabel Control 53
ListBox Control 53
ComboBox Control 55
CheckBox Control 55
RadioButton Control 56
GroupBox Control 56
Button Control 56
T o control đ ng trong Windows Form 56
Sử dụng nh ng l p thừa k CommonDialog 56
L p ColorDialog 56
L p FontDialog 58
Làm vi c v i Menus và xƯy d ng ng dụng MDI 59
XƯy d ng ng dụng MDI 61
Bài t p có h ng d n 62
Bài t p t luy n 62
Qu n lỨ lỗi trong l p trình C# 63
Xây d ng h thống ng d ng trên n n t ng Web - ASP.NET - 65
XƯy d ng ng dụng Hello ASP.NET sử dụng Visual Studio NET IDE 66
S ki n Page_Load() 70
Các đối t ợng ASP.NET 71
Đối t ợng Request 71
Đối t ợng Response 72
Đối t ợng Session 72
XƯy d ng ng dụng Web sử dụng Server Controls 73
Server Controls 73
HTML Server Controls 73
HtmlAnchor 74
HtmlInputText 74
HtmlInputCheckBox 75
HtmlInputRadioButton 75
HtmlSelect Control 75
Web Server Controls 75
TextBox Control 76
Literal Control 76
FileUpload Control 76
Panel Control 76
View & MultiView Control 77
Calendar Control 77
Trang 6DropDownList Control 77
Đi u khiển các Server Controls 78
K t nối cơ sở d li u trong ASP.NET 80
DataBinding trong ASP.NET 80
Binding d li u vào m t DropDownList Control 81
Thu c tính IsPostBack 82
Web Server Control Template 82
Repeater Control 83
Gắn đi u khiển vào Repeater 89
UserControl và ng dụng trong xƯy d ng WebPortal 91
T o và sử dụng UserControl 91
ng dụng UserControl trong xƯy d ng ng dụng WebPortal 94
Hi n th c ki n trúc WebPortal 95
Ki n trúc t i UserControl đ ng sử dụng PlaceHolder 96
Bài t p t ôn luy n 97
Cấu hình cho ng dụng Web ASP.NET 97
Mục <appSettings> 98
Đ c giá trị từ thẻ appSettings 98
Thẻ <customErrors> 98
Xuất b n m t ng dụng Web ASP.NET 99
Triển khai m t ng dụng Website ASP.NET trên IIS 100
PhƠt triển h thống ng d ng doanh nghi p với NET - 105
Web Services 106
Khởi t o và g i m t Web Services 106
D ỆN 113
Project 1. - 113
D án: Website thông tin và bán hàng tr c tuy n 113
Project 2. - 113
D án: H thống qu n trị kho hàng 113
Đ C THễM 113
ASP.NET & AJAX Framework - 114
H c s d li u MySQL Server 5.0 & l p trình thao tƠc d li u với MySQL Server. - 114
K t nối đ n cơ sở d li u MySQL 114
Regular Expressions Error! Bookmark not defined Gởi Email từ m t trang ASP.NET 118
Upload file hình nh vào cơ sở d li u SQL 118
T HAM KH O 121
Trang 7L P TRỌNH NET (C#)
.NET lơ n n t ng cho phép phƠt triển nh ng ng d ng mới hoơn toơn trên c hai môi trư ng Win vơ Web Khi s d ng NET, đòi hỏi ph i s d ng một ngôn ng để khai thƠc h t s c m nh c a nó C# lơ ngôn ng chúng tôi l a ch n để s d ng vơ giới thi u đ n b n C# đư c phƠt triển từ C/C++ vơ gi nguyên tên trong gia đình
C, kỨ t # đư c s d ng như một s khẳng đ nh v tính sắc bén c a ngôn ng nơy,
do đó C# đư c phƠt âm lơ C sharp
Trang 8Sau đây lơ chư ng trình C# Hello World, mã nguồn như sau:
/*This is Hellow World C# Program*/
Trang 10Khai báo bi n trong C#
CƠc bi n trong C# đư c khai bƠo theo công th c như sau:
AccessModifier DataType VariableName;
Trong đó,
AccessModifier: xƠc đ nh ưu tiên truy xuất tới bi n
Datatype: đ nh nghĩa kiểu lưu tr d li u c a bi n
VariableName: lơ tên bi n
Cấp độ truy xuất tới bi n đư c mô t như b ng dưới đây
Access Modifier Mô t
protected Cho phép truy xuất bên trong một lớp n i bi n nơy đư c đ nh
nghĩa, hoặc từ cƠc lớp con c a lớp đó
private Chỉ truy xuất bên trong lớp n i mơ bi n đư c đ nh nghĩa
Kiểu d li u trong C#
CƠc kiểu d li u đư c s d ng trong ngôn ng C# đư c mô t theo b ng dưới đây
tr kiểu ch cho bi n string str = "Welcome";
đúng hoặc sai
bool val1 = false;
bool val2 = true;
Input/Output trong C# căn b n
Input /output trong C# đư c th c hi n thông qua vi c s d ng hơm c a lớp Console trong namespace System
Hai hơm thư ng s d ng nhất cho thao tƠc Input/Output lơ:
Console.WriteLine();
Console.ReadLine();
Trong dó,
Trang 11Console.WriteLine(): đư c s d ng để xuất hi n k t qu
Console.ReadLine(): đư c s d ng để đ c k t qu nh n vơo
Xem tại mã nguồn HelloWorld kèm theo tại liệu này
Cấu trúc đi u khiển trong l p trình C#
C# cung cấp hai cấu trúc đi u khiển th c hi n vi c l a ch n đi u ki n th c thi chư ng trình
Cấu trúc if
Cấu trúc if trong C# đư c mô t như sau:
if (biểu thức điều kiện)
Cấu trúc switch … case
Cấu trúc swtich….case có cấu trúc như sau:
Trang 12Th c thi câu l nh hoặc một lo t nh ng câu l nh đ n khi đi u ki n không đư c thỏa mãn
Trang 14for (initialization; condition; increment / decrement)
{
// th c thi câu l nh
}
Arrays - M ng trong C#
M ng lơ một nhóm nh ng bi n có cùng một kiểu d li u Nh ng bi n nơy đư c lưu
tr trong bộ nh ng vùng bộ nhớ k ti p do đó m ng cho phép truy xuất vơ th c thi
đ n từng phần t trong m ng
Công th c khai bƠo một m ng như sau:
Datatype [] variableName = new Datatype [number of elements];
Trong đó,
number of elements: lơ số phần t c a m ng
Datatype: kiểu d li u mơ m ng lưu tr
variableName: lơ tên m ng
Ví dụ:
// m ng kiểu int
int[] iarray = new int[5];
// m ng kiểu string
string[] sarray = new string[6];
Ví d : cƠch khai bƠo khƠc
string[] sarray2 = { "Welcome", "to", "C# Array" };
Khi l p trình, tùy theo đi u ki n chư ng trình mơ b n có thể ch n l a một trong hai cƠch trên
Trang 15 Cấu trúc đi u ki n, l a ch n if … else vơ switch… case
Cấu trúc vòng lặp while, do…while, for, foreach
Bài t p t th c hi n
Để c ng cố ki n th c đã h c, Nh ng bơi t p sau đây đư c yêu cầu th c hi n
1 Vi t chư ng trình cho phép nh t vơo 1 số nguyên dư ng N, vơ hiển th giƠ tr
Trang 16Hi n th c khƠi ni m hướng đối tư ng (OOP) trong C#
Chúng ta sẽ h c
Nh ng nội dung trong phần nơy tổng k t hóa nh ng điểm quan tr ng nhất v khƠi
ni m OOP trong C# Nội dung bao gồm
Đ nh nghĩa lớp, đối tư ng
Hơm t o (Constructor), hơm h y (Destructor)
Trang 17Class
Một Class lơ một khƠi ni m mô t cho nh ng th c thể có chung tính chất vơ hơnh
vi Class đ nh nghĩa nh ng thuộc tính vơ hơnh vi đư c dùng cho nh ng đối tư ng
c a lớp đó Do đó có thể nói Class lơ một khuôn m u cho cƠc đối tư ng
t o đối tư ng giống như cƠch t o một bi n có kiểu d li u lơ Class
AccessModifier ClassName ObjectName = new ClassName();
u điểm c a vi c sử dụng Class và Đối t ợng
Có một số nh ng ưu điểm c a vi c s d ng Class vơ đối tư ng trong phƠt triển phần m m Nh ng ưu điểm nổi b t nhất đư c li t kê như sau:
Duy trì code bằng vi c mô hình hóa
Đóng gói nh ng s ph c t p trong mã lênh từ ngư i dùng
Kh năng s d ng l i
Cung cấp đ n k thừa để th c thi nhi u phư ng th c
Hàm t o (Constructors) và hàm h y (Destructors) trong C#
Constructors
Constructors lơ nh ng hơm đặc bi t cho phép th c thi, đi u khiển chư ng trình ngay khi kh i t o đôi tư ng Trong C#, Constructors có tên giống như tên c a Class vơ không tr l i giƠ tr
Trang 18 Function Overloading d a trên số lư ng tham số truy n vơo
Function Overloading d a trên kiểu giƠ tr tham số truy n vơo
Trang 19Thừa k trong C#
Một trong nh ng ưu điểm nổi b t c a l p trình hướng đối tư ng đó lơ thừa k , đó
lơ s s d ng l i nh ng thuộc tính vơ hơnh vi c a một lớp Có hai kiểu k thừa trong l p trình, đ n k thừa vơ đa k thừa
C# cung cấp mô hình đ n k thừa
protected int ifoots;
protected string sName;
protected void setFoot(int ival)
Trang 20}
}
K t qu khi th c thi chư ng trình
ví d trên, Dog vơ Chicken lơ hai lớp k thừa từ lớp Animal, do đó cƠc thuộc tính như số chân, ifoots vơ tên sName đư ng nhiên xuất hi n trong hai lớp nơy vơ
cho phép s d ng Tư ng t , cƠc hơm như setName(), setFoot(),
displayProperties() t i lớp Animal cũng đư c k thừa xuống hai lớp Dog vơ Chicken Do đó ta có thể g i nh ng hơm nơy, vơ k t qu hiển th khi g i hơm
displayProperties() theo đối tư ng objDog vơ objChicken khƠc nhau như hình trên
Overriding, Polymorphism trong C#
protected int ifoots;
protected string sName;
protected void setFoot(int ival)
Trang 21Console.WriteLine(sName + " has " + ifoots.ToString()+ " foots"); }
Trang 22Child objchild = new Child();
Console.WriteLine("Result is " + objchild.methodA().ToString()); Console.Read();
Như bình thư ng c a mô hình k thừa, k t qu tr v khi g i hơm methodA() từ đối
tư ng c a lớp Child ph i lơ “Result is 2” Nhưng trong k t qu trên, k t qu lơ
“Result is 6” K t qu nơy do hơm methodB() t i lớp Child đã override hơm methodB() t i lớp Parent
V y ta có thể khƠi quƠt Polymorphism như sau:
Polymorphism không chỉ đ n gi n lơ overriding, mơ nó lơ overrding thông minh
KhƠc bi t gi Overriding vơ Polymorphism đó lơ trong Polymorphism, s quy t đ nh g i hơm đư c th c hi n khi chư ng trình ch y
Trang 23Abstract Class trong C#
Abstract Class lơ lớp dùng để đ nh nghĩa nh ng thuộc tính vơ hơnh vi chung c a
nh ng lớp khƠc Một Abstract class đư c dùng như một lớp cha c a cƠc lớp khƠc
Từ khóa abstract đư c dùng để đ nh nghĩa một abstract class Nh ng lớp đư c đ nh nghĩa bằng cƠch dùng từ khóa abstract thì không cho phép kh i t o đối tư ng c a lớp ấy
abstract class Shape
{
public abstract float calculateArea();
public void displaySomething()
Đư ng mang tên v tướng danh ti ng Trần Hưng đ o đ u có t i Sơi Gòn vơ Hơ Nội,
v y lơm sao để phân bi t khi ngư i nước ngoơi muốn hỏi v đư ng Trần Hưng Đ o CƠch đ n gi n nhất đó lơ khi muốn g i tên đư ng Trần Hưng Đ o t i Hơ Nội thì ta
g i “đư ng Trần Hưng Đ o t i Hơ Nội” vơ tư ng t t i Sơi Gòn lơ “đư ng Trần Hưng
Đ o t i Sơi Gòn” vơ chắc chắn chúng ta sẽ có câu tr l i cho v khƠch đó
Hơ Nội, Sơi Gòn trong ví d trên lơ một ví d cho Namespace
V y có thể hiểu Namespace lơ một gói nh ng th c thể có thuộc tính vơ hơnh vi độc
l p với bên ngoơi Nh ng ưu điểm c a namespace đư c li t kê như sau:
TrƠnh đư c s trùng lặp tên gi a cƠc class
Cho phép tổ ch c mã nguồn một cƠch có khoa h c vơ h p lỨ
Khai báo m t Namespace
Namespace: lơ từ khóa khai bƠo một NameSpace
NamespaceName: lơ tên c a một Namespace
Ví dụ
Trang 24EnumDemo eobj = newEnumDemo();
eobj.getWeekDay(DayinWeek.Saturday);
Trang 25IO Namespace ch a nh ng lớp cho phép thao tƠc đ c vơ ghi d li u đ n nh ng luồng d li u vơ file Một số lớp c a System.IO đư c li t kê như sau:
Trang 27B ng có thể đư c hiểu lơ n i th c s ch a d li u m c độ v t lỨ B ng lơ t p
h p nh ng dòng d li u có cùng cấu trúc đư c đ nh nghĩa b i nh ng cột (Column), mỗi dòng d li u trong b ng ch a nh ng kiểu d li u đư c qui đ nh b i nh ng cột
Cấu trúc câu l nh đ n gi n để kh i t o một h c s d li u như sau:
CREATE DATABASE database_name
Trong đó
- CREATE DATABASE lơ từ khóa t o c s d li u
- database_name lơ tên c s d li u
Ví d : t o c s d li u để h c t p NET có tên _NETDB
CREATE DATABASE _NETDB
Ví d : t o b ng MyTable trong c s d li u _NETDB
CREATE TABLE MyTable
Trang 28Câu l nh truy vấn d li u (SELECT) tr v d li u có trong b ng Cấu trúc câu
l nh đ n gi n để truy vấn d li u từ một b ng như sau:
SELECT * | [Cột 1], [Cột 2], … FROM [Table Name]
Ví d :
SELECT * FROM MyTable
SELECT vname FROM MyTable
Truy vấn d li u có đi u ki n
Như câu l nh truy vấn d li u, nhưng câu truy vấn d li u từ b ng cho phép chúng
ta chỉ lấy nh ng d li u cần thi t theo một đi u ki n nơo đó
Cấu trúc câu truy vấn d li u có đi u ki n như sau:
SELECT * | [Cột 1], [Cột 2], … FROM [Table Name]
WHERE [Đi u ki n 1] AND | OR [Đi u ki n 2] …
Ví d :
SELECT * FROM MyTable where vName = ‘Ph m Tuấn Anh’
Select * from MyTable where igender = 1
Chúng ta có thể thấy hai b ng nơy đ u có trư ng icid, vơ chúng ta có thể lấy d
li u từ hai b ng d a vơo vi c so sƠnh d giƠ tr trong trư ng icid hai b ng
Câu l nh như sau:
Trang 29Chúng ta ti p t c th c hi n câu truy vấn th hai
Chúng ta có đư c 5 dòng k t qu với dòng th 5 có giƠ tr lơ NULL, như th câu
l nh trên, vi c so sƠnh chỉ d a trên cƠc giƠ tr c a cột icid trên b ng category
hay nói cƠch khƠc câu truy vấn trên lấy tất c cƠc dòng c a b ng category (b ng bên trƠi) Ngư i ta đ nh nghĩa đó lơ LEFT JOIN
Ngư c với LEFT JOIN đó lơ RIGHT JOIN Chúng ta cùng xét ví d
Trang 30icid vname iid vvalue
Cấu trúc câu l nh để thêm d li u vơo b ng như sau
INSERT [INTO] TableName [(column_list)] VALUES data_values
Ví d
insert into category values('A')
insert into items values(1,'V1')
Trong hai câu l nh trên, chúng ta có thể thấy, không có d li u thêm cho cột mã chính, đi u nơy x y ra khi cột mã chính lơ cột t tăng, khi ấy h thống t gƠn giƠ tr ng với dòng đư c thêm
C p nh t d li u trong b ng
Cấu trúc câu l nh để c p nh t d li u trong b ng như sau
UPDATE TableName SET [Cột 1] =[GiƠ tr 1], [Cột 2]=[GiƠ tr 2],… [WHERE [ĐI U
KI N]]
Ví d
update items set vvalue='V5' where iid=5
Lưu Ứ, khi s d ng câu l nh UPDATE, nên s d ng đi u ki n phía sau để đ m b o rằng chỉ có nh ng dòng thỏa đi u ki n mới đư c c p nh t
Xóa d li u từ b ng
Cấu trúc câu l nh để c p nh t d li u trong b ng như sau
DELETE TableName [WHERE [ĐI U KI N]]
Ví d
DELETE items where iid=5
Lưu Ứ, khi s d ng câu l nh DELETE, nên s d ng đi u ki n phía sau để đ m b o rằng chỉ có nh ng dòng thỏa đi u ki n mới đư c xóa
Trang 31L P TRỌNH DÀNH CHO CÔNG VI C
Mục tiêu khóa h c này
Sau phần nơy, b n có thể
Thao tƠc trên công c phƠt triển Visual Studio NET (IDE)
S d ng nh ng đi u khiển c b n c a ng d ng Window
S d ng cƠc lớp c a lớp CommonDialog
Gia tăng ti n ích cho ng d ng bằng thanh th c đ n
T o h thống ng d ng với MDI Form
Xây d ng website, h thống ng d ng trên n n t ng web
Th c hi n ng d ng phân tƠn với Webservices
Th c hi n h thống ng d ng theo yêu cầu c a doanh nghi p
Trang 32ADO.NET vơ thao tƠc với c s d li u
Sau khi hoơn thơnh, b n có thể
Nẵm v ng ki n trúc ADO.NET
Hiểu rõ nh ng đối tư ng thuộc ADO.NET
K t nối c s d li u s d ng cƠc hơm thuộc thư vi n OleDb
Th c hi n thêm, c p nh t, xóa d li u
Trang 33Gi i thi u v ADO.NET
Ngơy nay, nh ng ng d ng thư ng m i cần thi t để qu n lỨ khối lư ng d li u khổng lồ D li u thư ng đư c lưu tr trong nh ng b ng quan h trong c s d
li u Nh n d li u vơ thao tƠc d li u tr c ti p từ một c s d li u đòi hỏi
ki n th c v nh ng câu l nh thao tƠc trên c s d li u để truy c p đ n d li u
Vơ ng d ng cần giao ti p với C s d li u để th c hi n nh ng công vi c sau:
Nh n d li u đư c lưu tr trong c s d li u vơ hiển th chúng ra giao di n ngư i dùng
C p nh t d li u, th c hi n thêm, hi u chỉnh, vơ xóa d li u
ADO.NET lơ một mô hình đư c nh ng ng d ng NET s d ng để giao ti p với c s
d li u cho vi c nh n, truy c p, vơ c p nh t d li u
Mô hình ADO.NET
Data Provider
Trang 34Một data provider đư c s d ng cho vi c k t nối đ n c s d li u, nh n, lưu tr
d li u trong dataset, đ c, nh n vơ c p nh t d li u trong c s d li u
Có hai lo i data provider:
Ole DB data provider - lo i nơy lơm vi c với tất c OleDB Provider như Sql OleDB Provider, Oracle OleDb provider, vơ Jet OleDb Provider Đư c bi t đ n trong môi trư ng NET với namespace System.Data.OleDb
Sql Server data provider - lo i nơy lơm vi c chỉ với Microsoft SQL Server Cho phép thao tƠc với tốc độ tối ưu với h c s d li u MSSQL Server, đư c
bi t đ n với namespace System.Data.SqlClient
K t nối
K t nối lơ một component đư c s d ng để thi t l p một k t nối đ n c s d li u
từ một data source Có hai kiểu đối tư ng k t nối thư ng s d ng nhất lơ OleDbConnection vơ SqlConnection B ng sau đây hiển th nh ng thuộc tính vơ phư ng th c hay s d ng nhất c a một đối tư ng k t nối
ConnectionString Cung cấp thông tin như datasource, tên c s d li u, đư c s
d ng để thi t l p k t nối với một c s d li u
ConnectionString
nối đang đóng, 1: k t nối đang m
Ví d v vi c s d ng đối tư ng k t nối
string connectionstring = "PROVIDER=SQLOLEDB;
server=(local);uid=_net;pwd=;database=_NET";
OleDbConnection conObj = new OleDbConnection(connectionstring); conObj.Open();
Data Adapter
Data Adapter lơ thơnh phần c a ADO.NET, có tƠc d ng chuyển ti p d li u từ vơ
đ n c s d li u data Adapter nh n d li u từ c s d li u vơo một DataSet Khi b n thay đổi d li u trong dataset, cũng lơ thay đổi trong c s d li u b i dataadapter Có hai kiểu data adapter thư ng dùng để cấu hình k t nối đ n c s
d li u trong Visual Studio NET:
SqlDataAdapter - lơm vi c chỉ với h c s d li u MS SQL Server
OleDbDataAdapter - kiểu nơy đư c cấu hình để lơm vi c với hầu h t cƠc h c
s d li u đư c hỗ tr b i OleDb data provider
Data Adapter s d ng đối tư ng k t nối OleDbConnection vơ SqlConnection đư c cung cấp b i data provider để giao ti p với c s d li u
Thu c tính và ph ơng th c c a Data Adapter
Trang 35Data Adapter giao ti p với c s d li u trong khi nh n, thêm mới, xóa vơ c p
nh t d li u Nh ng thuộc tính sau đây đư c thi t l p để th c hi n nh ng tƠc v khƠc nhau trên một h c s d li u
SelectCommand - nh n d li u từ CSDL thông qua một câu truy vấn hoặc stored procedures
InsertCommand - thêm d li u vơo CSDL qua câu l nh insert
UpdateCommand - c p nh t c s d li u với câu l nh update
DeleteCommand - xóa d li u khỏi c s d li u thông qua câu l nh delete
Fill() - lơ phư ng th c đẩy d li u từ CSDL vơo một dataset
Update() - lơ phư ng th c th c thi InsertComand, Update Command, hoặc DeleteCommand cho mỗi câu l nh thêm, hi u chỉnh hoặc xóa dòng để th c hi n thay đổi trong CSDL
Data Command
DataCommand lơ đối tư ng th c thi nh ng câu l nh SQL hoặc stored procedure đư c
s d ng để thao tƠc với CSDL Data Command lơ đối tư ng c a lớp SqlCommand vơ OleDbCommand
CƠc thuộc tính c a đối tư ng DataReader:
NextResult Đư c s d ng để di chuyển đ n hơng d li u ti p theo trong
trư ng h p câu l nh truy vấn tr l i nhi u dòng k t qu
Ví d s d ng Data Reader
private void button2_Click(object sender, EventArgs e)
{
Trang 36string connectionstring = "PROVIDER=SQLOLEDB;
ti t nh ng đối tư ng thuộc tính nơy sẽ đư c đ c p trong cƠc phần sau
Ví d s d ng DataAdapter đẩy d li u từ c s d li u vơo DataSet
private void button3_Click(object sender, EventArgs e)
Trang 37OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
ng d ng qu n lỨ cuộc g i cần cung cấp kh năng xem chi ti t khƠch hơng cho bộ
ph n BƠn hơng Hãy t o một ng d ng để hiển th chi ti t khƠch hơng cho phòng Kinh doanh
Trang 38Sau khi nh n d li u từ c s d li u, d li u cần đư c hiển th trên nh ng control c a Windows Form để ngư i s d ng thấy QuƠ trình đó g i lơ Data Binding
Th c hi n Data Binding thông qua cƯu l nh truy vấn
Yêu cầu
GiƠm đốc nhân s công ty HHO cần xem danh sƠch nhân viên trong cƠc phòng ban
c a công ty Một ng d ng đư c yêu cầu xây d ng để th c hi n vi c nơy
L c m t Dataset
D li u từ một table trong c s d li u đư c lất toơn bộ vơ đổ vơo Dataset, sau
đó ti n hơnh l c nh ng dòng d li u cần thi t
Ví d sau mô t cƠch th c hi n nơy
private void button4_Click(object sender, EventArgs e)
Trang 39cmd.CommandType = CommandType.Text;
// truy n tham số vơo câu l nh SQL
cmd.Parameters.AddWithValue(“@ ibookid" , 2);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "books");
MessageBox.Show(ds.Tables["books"].Rows.Count.ToString()); conObj.Close();
B n lưu Ứ với dòng l nh
cmd.Parameters.AddWithValue(“@ ibookid" , 2);
Đây lơ cƠch s d ng ngắn g n khi truy n tham số mơ nh ng chuyên gia phƠt triển
phần m m th c t thư ng s d ng, nguyên m u câu l nh có công th c như sau:
OleDbParameter param = new
OleDbParameter ( "@paramname" , OleDbType VarChar);
param.Value = "value" ;
trong đó, OleDbType lơ thư vi n nh ng kiểu d li u tư ng ng với nh ng kiểu d
li u lưu tr trong h c s d li u
Thêm, c p nh t, xóa d li u trong cơ sở d li u
Thêm m i d li u vào cơ sở d li u
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue(“@inxb", 2);// Nha xuat ban tre
ví d trên, câu l nh SQL insert đư c th c hi n k t h p với đối tư ng tham số
Parameters để đẩy d li u vơo c s d li u thông qua đối tư ng Command
C p nh t, xóa d li u trong cơ sở d li u
QuƠ trình c p nh t vơ xóa d li u tư ng t như với thêm mới c s d li u
Trang 40OleDbCommand cmd = new OleDbCommand("update books set
vtensach=?,fgia=? where vmasach=?",conObj);
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue(“@vtensach", ".NET for Real Life"); cmd.Parameters.AddWithValue(“@fgia", 85000);
K t nối luôn ph i đư c đóng l i sau mỗi lần truy xuất đ n c s d li u
S d ng đối tư ng Data Adapter, DataSet vơ đối tư ng Command trong thao tƠc nh n d li u từ CSDL