Mục tiêu môn học
§ Sau khi kết thúc môn học này, sinh viên có thể
• Trình bày được đặc trưng cơ bản của công nghệ
.NET
• Trình bày được kỹ thuật lập trình hướng đối
tượng sử dụng ngôn ngữ C#.NET
• Lập trình được một ứng dụng Windows Form sử
dụng ngôn ngữ C#.NET, kết nối với cơ sở dữ liệu
SQL Server, lập báo cáo sử dụng công cụ Crystal
Report.
214 trang |
Chia sẻ: phuongt97 | Lượt xem: 551 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Bài giảng Lập trình ứng dụng sử dụng C#.NET - Phạm Văn Thuận, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
lặp)
Tên mảng/ Tập
hợp
151
Lập trình C#.NET
Ví dụ
Khi các phần tử mảng là kiểu giá trị
foreach ( int i in intArray )
{
Console.WriteLine( i.ToString( ) );
}
Khi các phần tử mảng là kiểu tham chiếu
foreach ( Employee e in empArray )
{
Console.WriteLine( e.ToString( ) );
}
152
Lập trình C#.NET
Từ khóa params
§ Từ khóa params cho phép truyền một loạt các tham
số cho phương thức mà không phải định nghĩa
mảng một cách tường minh.
public void DisplayVals(params int[] intVals)
153
Lập trình C#.NET
Ứng dụng từ khóa params
public class Tester
{
static void Main()
{
Tester t = new Tester();
t.DisplayVals(5, 6, 7, 8);
int[] explicitArray = new int[5] { 1, 2, 3, 4, 5 };
t.DisplayVals(explicitArray);
}
public void DisplayVals(params int[] intVals)
{
foreach (int i in intVals)
{
Console.WriteLine("DisplayVals {0}", i);
}
}
}
154
Lập trình C#.NET
Bài thực hành số 5
Bài 1: Viết một phương thức FindMinMax in ra giá
trị số nguyên lớn nhất và nhỏ nhất trong số các
tham số đầu vào là một dãy các số nguyên bất kỳ
VD: Gọi hàm FindMinMax(3,1,5,8,0,9,-2)
Kết quả in ra màn hình
- Số nguyên nhỏ nhât là: -2
- Số nguyên lớn nhất là: 9
155
Lập trình C#.NET
4.8. Strings
public sealed class String :
IComparable, ICloneable, IConvertible, IEnumerable
§ String là lớp đóng -> Không thể tạo lớp kế thừa lớp String
§ String implement 4 interfaces IComparable, ICloneable,
IConvertible và IEnumerable cho phép có thể so sánh, sao
chép, chuyển đổi và sử dụng kiểu liệt kê
§ Mỗi đối tượng của lớp String là một chuỗi cố định các ký
tự Unicode -> các phương thức làm thay đổi đối tượng của
lớp thực chất là tạo ra một bản sao đã được sửa đổi, chuỗi
nguyên gốc vẫn được giữ trong bộ nhớ cho đến khi bộ thu
gom rác xử lý.
156
Lập trình C#.NET
Tạo chuỗi
§Cách thông thường
string literalString = "This is a string literal \n";
§Tạo chuỗi đúng với nguyên mẫu (verbatim string)
sử dụng từ khóa @
string verbatimString=@"\n Pham Van Thuan \t Tel: 0985905253\\";
public class Test
{
public static void Main()
{
String literalString = "Pham Van Thuan \n";
Console.WriteLine(literalString);
String verbatimString = @"\n Pham Van Thuan \t Tel: 0985905253\\";
Console.WriteLine(verbatimString);
Console.Read();
}
}
157
Lập trình C#.NET
Thao tác chuỗi
§ Lớp string hỗ trợ các phương thức cho phép so sánh,
tìm kiếm và xử lý chuỗi
Định dạng một chuỗiFormat()
Kiểm tra hai chuỗi có giống nhau khôngEquals()
Tạo bản sao của một chuỗiCopy()
Phương thức nối chuỗiConcat()
Phương thức so sánh hai chuỗiCompare()
Thuộc tính cho biết chuỗi rỗngEmpty
Mô tảThuộc tính,
phương thức
158
Lập trình C#.NET
Ví dụ
static void Main()
{
string str1 = "Hanoi";
string str2 = "La thu do cua Viet Nam";
string str3 = "HANOI";
//So sanh chuoi, tra ve 0 neu giong nhau
int result = string.Compare(str1, str3);
Console.WriteLine("Ket qua so sanh hai chuoi {0} va {1} la {2}", str1, str3, result);
Console.ReadLine();
//Noi chuoi
string str4 = string.Concat(str1, " ", str2);
string str5 = str1 + " " + str2;
Console.WriteLine("Ket qua noi chuoi {0} va {1}: \n + Su dung phuong thuc
Concat: {2} \n + Su dung ham chong toan tu +: {3}", str1, str2, str4, str5);
Console.ReadLine();
//Lay ve chieu dai chuoi
Console.WriteLine("Chieu dai cua chuoi \"{0}\" la {1}", str2, str2.Length);
Console.ReadLine();
}
159
Lập trình C#.NET
Xử lý chuỗi động (Dynamic string)
§ Lớp System.Text.Stringbuilder được sử dụng để
tạo và chỉnh sửa chuỗi
• Không giống như string, các đối tượng của lớp
Stringbuilder có thể thay đổi
• Khi chỉnh sửa, sự thay đổi được thực hiện trên
chính đối tượng chứ không phải trên bản sao của
đối tượng
160
Lập trình C#.NET
Ví dụ sử dụng Stringbuilder
static void Main()
{
// create some strings to work with
string s1 = "Hi, Good morning";
// array of delimiters to split the sentence with
char[] delimiters = new char[]{' ',','};
// use a StringBuilder class to build the output string
StringBuilder output = new StringBuilder();
int ctr = 1;
// split the string and then iterate over the
// resulting array of strings
foreach (string subString in s1.Split(delimiters))
{
// AppendFormat appends a formatted string
output.AppendFormat("{0}: {1}\n", ctr++, subString);
}
Console.WriteLine(output);
}
161
Lập trình C#.NET
4.9. Handling Exceptions
§ C# xử dụng kỹ thuật bắt ngoại lệ (Handling
Exception để bắt và xử lý lỗi (errror) cũng như
các ngoại lệ phát sinh trong quá trình thực thi
chương trình)
§ Phân loại bug, error và exception
• Bug: lỗi do người lập trình, cần được loại bỏ
trước khi hoàn thành phần mềm
• Error: lỗi phát sinh do người dùng, ví dụ người
dùng nhập sai định dạng dữ liệu -> phải kiểm tra
dữ liệu đầu vào
• Exception: lỗi bất thường, ví dụ như hết bộ nhớ,
lỗi chia cho 0s
162
Lập trình C#.NET
Ném (throwing) và bắt (catching) ngoại lệ
§ Để báo hiệu một điều kiện bất thường xuất hiện
trong quá trình thực thi, thực hiện ném ngoại lệ
throw new System.Exception();
§ Khi một ngoại lệ được tung ra, chương trình
ngay lập tức sẽ dừng lại và CLR sẽ tìm , kiểm tra
chương trình bắt ngoại lệ, nếu không tìm thấy nó
sẽ kết thúc chương trình
163
Lập trình C#.NET
Ngoại lệ được báo trong chế độ debug
164
Lập trình C#.NET
Lỗi dừng chương trình khi chạy thực tế
165
Lập trình C#.NET
Ví dụ
public class Test
{
public static void Main()
{
Console.WriteLine("Enter Main...");
Test t = new Test();
t.Func1();
Console.WriteLine("Exit Main...");
}
public void Func1()
{
Console.WriteLine("Enter Func1...");
Func2();
Console.WriteLine("Exit Func1...");
}
public void Func2()
{
Console.WriteLine("Enter Func2...");
throw new System.Exception();
Console.WriteLine("Exit Func2...");
}
}
166
Lập trình C#.NET
Ngoại lệ xuất hiện
167
Lập trình C#.NET
Chi tiết ngoại lệ
168
Lập trình C#.NET
Câu lệnh trycatch
§ C# sử dụng cấu trúc trycatchfinally để kiểm
tra, bắt và xử lý ngoại lệ
try
{
//Lệnh có thể phát sinh ngoại lệ, cần kiểm tra
}
catch(Exception e)
{
//Bắt và xử lý ngoại lệ nếu có
}
Finally
{
//Đoạn mã luôn thực thi khi xuất hiện ngoại lệ
}
169
Lập trình C#.NET
Câu lệnh trycatch
§ Có thể có nhiều đoạn lệnh catch trong một câu
lệnh trycatch tương ứng với nhiều ngoại lệ
khác nhau
§ Đoạn lệnh trycatch có thể đặt trong phương
thức có thể phát sinh ngoại lệ hoặc đặt ở cấp
cao hơn, phương thức triệu gọi đoạn mã có thể
phát sinh ngoại lệ
170
Lập trình C#.NET
Bài thực hành số 5
Bài 2: Viết một phương thức
float Divide(int num1, int num2)
§ Kiểm tra và bắt ngoại lệ bằng câu lệnh
trycatch trong hai trường hợp
• Bắt trong thân hàm
• Bắt trong lời gọi hàm
171
Lập trình C#.NET
Nội dung môn học
Chương 1: Giới thiệu C# và .NET Framework
Chương 2: Giới thiệu môi trường phát triển
ứng dụng Visual Studio .NET 2005
Chương 3: C# căn bản
Chương 4: Hướng đối tượng trong C#
Chương 5: Lập trình ứng dụng với C#
172
Lập trình C#.NET
Nội dung chương 5
5.1. Mở đầu về lập trình Windows Form
5.2. Một số điều khiển thông dụng cho Windows
Form
5.3. Kết nối cơ sở dữ liệu sử dụng ADO.NET
5.4. Lập báo cáo sử dụng Crystal Report.NET
5.5. Lập trình Socket
173
Lập trình C#.NET
5.1. Mở đầu về lập trình Windows Form
Xây dựng ứng dụng Hello World
174
Lập trình C#.NET
Xây dựng ứng dụng Hello World
§ Tạo dự án kiểu Windows Application
§ Thiết kế giao diện
• 1 label
• 1 textbox
• 2 button: Hello, Good bye
175
Lập trình C#.NET
Các file cấu thành
class frmHello
§Form1.cs: chứa mã
chương trình của
người dùng
§Form1.Designer.cs:
do bộ VS 2005 tự động
sinh trong quá trình
thiết kế
176
Lập trình C#.NET
Form1.cs
177
Lập trình C#.NET
Form1.Designer.cs
178
Lập trình C#.NET
Viết mã
§ Sự kiện người dùng click vào nút Hello
private void btnHello_Click(object sender, EventArgs e)
{
MessageBox.Show("Hello "+txtName.Text);
}
Phương thức Show của đối tượng MessageBox
-Hiển thị thông báo
-Hiển thị các nút bấm tùy chọn, tương tác người dùng
(OK, Cancel, Yes, No)
179
Lập trình C#.NET
Viết mã (tiếp)
§ Sự kiện người dùng click vào nút Good bye
private void btnGoodBye_Click(object sender, EventArgs e)
{
MessageBox.Show("Bye bye!");
Application.Exit();
}
Lớp Application cung cấp các thuộc tính và phương thức
tĩnh để làm việc với ứng dụng
Application.Exit(); //Đóng ứng dụng
180
Lập trình C#.NET
5.2. Một số điều khiển thông dụng
trong Windows Form
§ Label và Linklabel
§ Textbox và RichTextBox
§ Button
§ Check box và Radio button
§ Combobox
§ Listbox
181
Lập trình C#.NET
Label
§ Điều khiển label chứa văn bản tĩnh trên form
§ Một số thuộc tính thường dùng
• Text
• Text align
§ C# hỗ trợ điều khiển Linklabel (kế thừa lớp
Label) cho phép link đến các liên kết (website,
forum). Một số thuộc tính thường dùng
• Text
• LinkArea
• LinkBehavior
182
Lập trình C#.NET
Textbox
§ Điều khiển Textbox cho phép người dùng nhập
thông tin hoặc hiển thị các thông tin dưới dạng
văn bản
• Một dòng
• Nhiều dòng
183
Lập trình C#.NET
RichTextBox
§ Cho phép khả năng định dạng, chỉnh sửa mạnh
hơn nhiều so với điều khiển textbox
184
Lập trình C#.NET
Check box và Radio button
§ Check box: thiết lập trạng thái của check box qua
thuộc tính CheckState
• CheckState=Checked
• CheckState=Unchecked
• CheckState=Indeterminate
§ Radio button: chọn duy nhất một trong nhiều tùy
chọn khác nhau
185
Lập trình C#.NET
List Control
§ List controls bao gồm ba điều khiển cơ bản:
Listbox, CheckedListBox và ComboBox
• Có thể đưa dữ liệu vào bằng lệnh Add
• Gắn điều khiển với một nguồn dữ liệu sẵn có
(Data binding)
§ Các điều khiển này đều kế thừa từ lớp trừu
tượng ListControl
186
Lập trình C#.NET
Bài thực hành số 6
187
Lập trình C#.NET
5.3. Kết nối cơ sở dữ liệu sử dụng ADO.NET
§ Mô hình dữ liệu quan hệ
§ Một số câu truy vấn cơ bản
§ Kết nối cơ sở dữ liệu sử dụng ADO.NET
188
Lập trình C#.NET
§ Cơ sở dữ liệu:
Là sự lưu trữ dữ liệu có tổ chức.
§ Hệ quản lý cơ sở dữ liệu (DBMS):
• Cung cấp cơ chế lưu trữ, quản lý dữ liệu một
cách phù hợp với định dạng dữ liệu.
• Cho phép lưu trữ và truy cập tới cơ sở dữ liệu
mà không cần biết về những khai báo bên trong
cơ sở dữ liệu.
• Ví dụ như SQL Server, Microsoft Access là
các hệ quản lý cơ sở dữ liệu.
Cơ sở dữ liệu quan hệ
189
Lập trình C#.NET
Mô hình Cơ sở dữ liệu quan hệ
§ Biểu diễn dữ liệu một cách logic
• Có thể xem xét các mối quan hệ mà không cần quan
tâm đến cấu trúc vật lý của dữ liệu
§ Bao gồm các bảng
• Các hàng được gọi là các mẩu tin (records)
• Các cột được gọi là các trường ( fields)
• Khoá chính (Primary key) một hàng phải có khóa
chính nhằm phân biệt nó với các hàng khác. Do đó
khóa chính phải có giá trị duy nhất và không có giá trị
null
190
Lập trình C#.NET
§ Khóa ngoại (foreign key): trong trường hợp một
nhân viên mua nhiều hàng hóa thì trên bảng
Order, ngoài khóa chính (thường là số hiệu hàng
hóa) còn lặp lại số thẻ nhân viên (trong bảng
Employee). Lúc này số thẻ nhân viên gọi là khóa
ngoại của bảng Order. Khóa ngoại dùng để tìm
kiếm các giá trị trong bảng con (bảng Order).
Mô hình Cơ sở dữ liệu quan hệ
191
Lập trình C#.NET
Ta có cơ sở dữ liệu của bảng Employee và
bảng Product như sau:
khóa chính của
bảng Employee
khóa chính của
bảng Product
khóa ngoại của
bảng Product
Mô hình Cơ sở dữ liệu quan hệ
192
Lập trình C#.NET
Quan hệ (relationship): được thiết lập giữa hai bảng dữ liệu với
nhau, có ba loại quan hệ chính.
• Quan hệ 1-1: quan hệ trực tiếp giữa 2 bảng dữ liệu. Ví dụ
bạn có 2 bảng Person1, Person2 thì quan hệ Kết hôn là
quan hệ 1-1. Một cách khác khi mà 2 bảng có quan hệ
thông qua 2 khóa chính thì quan hệ là 1-1.
• Quan hệ 1-N: ứng với một hàng trong bảng này có nhiều
hàng trong bảng khác. Chẳng hạn như quan hệ giữa 2
bảng Employee và Order như vừa rồi là quan hệ 1-N.
• Quan hệ N-N: được thiết lập khi một hàng trong Parent
table có nhiều hàng trong Child table và ngược lại.
Mô hình Cơ sở dữ liệu quan hệ
193
Lập trình C#.NET
§ Tính toàn vẹn dữ liệu (Data Integrity), được định nghĩa
là không tồn tại dữ liệu dư thừa, bao gồm:
• Dữ liệu nhập (Entity Integrity): mọi hàng phải có một giá trị
duy nhất trong trường khóa chính của nó.
• Ràng buộc toàn vẹn (Referential Integrity): mọi giá trị
trường khóa ngoại của bảng này phải xuất hiện trong
trường khóa chính của bảng khác.
• Toàn vẹn miền (Domain Integrity): dữ liệu nhập vào trong
cột phải phù hợp với định dạng và kiểu dữ liệu đã khai
báo.
Mô hình Cơ sở dữ liệu quan hệ
194
Lập trình C#.NET
Ví dụ
tblUsers
tblMemos tblMeetings
195
Lập trình C#.NET
Ví dụ
196
Lập trình C#.NET
SQL-Ngôn ngữ truy vấn có cấu trúc
§ Được dùng để yêu cầu dữ liệu (thực hiện
truy vấn ) và thao tác trên dữ liệu đó
§ Để thực hiện các lệnh SQL, bạn sử dụng
SQL Query Analyzer. Có thể mở trực tiếp
từ cửa sổ SQL Server Enterprise Manager
bằng cách chọn Tools\SQL Query
Analyzer như sau
197
Lập trình C#.NET
SQL-Ngôn ngữ truy vấn có cấu trúc
198
Lập trình C#.NET
Truy vấn SELECT
§ Chức năng:
Trích thông tin từ một hay nhiều bảng trong một
CSDL.
§ Cú pháp:
SELECT danh_sách_các_cột FROM tên_bảng
(Dấu * cho phép trích mẩu tin với tất cả các cột
trong bảng.)
199
Lập trình C#.NET
Mệnh đề WHERE
§ Chức năng:
Truy xuất dữ liệu trong bảng theo các điều kiện nào đó.
§ Cú pháp:
SELECT tên_cột FROM tên_bảng
WHERE tên_cột phép_toán giá_trị
Phép toán Mô tả
= So sánh bằng
So sánh không bằng
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
BETWEEN Nằm giữa một khoảng
LIKE So sánh mẫu chuỗi
200
Lập trình C#.NET
§ Chức năng:
Sắp xếp kết quả trả về theo một tiêu chuẩn bất kỳ.
§ Ví dụ:
Ta có bảng Orders sau:
Lệnh SELECT Company, OrderNumber FROM Orders
ORDER BY Company
cho kết quả
Mệnh đề ORDER BY
201
Lập trình C#.NET
§ Ta cũng có thể sắp xếp theo thứ tự giảm
dần của OrderNumber bằng cách đánh lệnh:
SELECT Company, OrderNumber FROM
Orders
ORDER BY OrderNumber DESC
Kết quả trả về:
Ngược lại, ASC sắp xếp theo thứ tự tăng dần.
Mệnh đề ORDER BY
202
Lập trình C#.NET
Truy vấn thêm mới INSERT
§ Chức năng:
Chèn một hàng vào trong bảng.
§ Cú pháp:
INSERT INTO tên_bảng
VALUES (giá_trị_1, giá_trị_2,....)
Ta cũng có thể chỉ rõ các cột/trường nào cần
chèn dữ liệu:
INSERT INTO tên_bảng (cột_1, cột_2,...)
VALUES (giá_trị_1, giá_trị_2,....)
203
Lập trình C#.NET
Truy vấn thêm mới INSERT
Ví dụ: Ta có bảng Persons như sau:
Câu lệnh SQL sau:
INSERT INTO Persons (LastName, Address)
VALUES ('Rasmussen', 'Storgt 67')
sẽ tạo ra kết quả trong bảng Persons :
204
Lập trình C#.NET
Truy vấn cập nhật UPDATE
§ Chức năng:
Cập nhật hay sửa đổi dữ liệu đã có trong
bảng.
§ Cú pháp:
UPDATE tên_bảng
SET tên_cột = giá_trị_mới
WHERE tên_cột = giá_trị
205
Lập trình C#.NET
Truy vấn cập nhật UPDATE
Ví dụ ta có bảng Person sau:
Để bổ xung thêm phần tên cho người có họ là Rasmussen
ta đánh lệnh sau:
UPDATE Person SET FirstName = 'Nina'
WHERE LastName = 'Rasmussen‘
Kết quả trả về:
206
Lập trình C#.NET
Truy vấn xóa DELETE
§ Chức năng:
Xoá các dòng ra khỏi bảng.
§ Cú pháp:
DELETE FROM tên_bảng
WHERE tên_cột = giá_trị
§ Ví dụ xoá người có tên Nina Rasmussen:
DELETE FROM Person WHERE LastName = 'Rasmussen'
207
Lập trình C#.NET
ADO.NET
§ ADO (Active Data Object) đang là một đối tượng
phổ biến trong lập trình cơ sở dữ liệu, bạn sử
dụng ADO kết nối với bất kỳ cơ sở dữ liệu tương
thích. Nó cung cấp hệ giao tiếp lập trình ứng
dụng API (application program interface) để truy
nhập vào cơ sở dữ liệu hệ thống.
§ ADO.NET là đối tượng được sử dụng trong .NET
208
Lập trình C#.NET
Lớp Connection
§ .NET Data Provider là một phần của mô hình lập trình
ADO.NET, bao gồm 4 lớp sau:
• Connection: lớp kết nối cơ sở dữ liệu.
• DataAdapter: lớp chứa dữ liệu.
• Command: lớp chứa lệnh.
• DataReader: lớp đọc dữ liệu.
§ Bạn cần khai báo Connection khi muốn truy cập loại dữ liệu
nguồn. Có 3 loại kết nối Microsoft cung cấp trong .Net
Framework bao gồm OdbcConnection, OleDbConnection
,SqlConnection.
§ SqlConnection tối ưu hóa cho quá trình kết nối với CSDL
SQL Server 7.0 và phiên bản mới hơn. Trong khi Odbc và
OleDb được sử dụng cho MS Access hay MySQL,
209
Lập trình C#.NET
Lớp DataAdapter
§ Lớp DataAdapter dùng để nhận dữ liệu từ dữ liệu
nguồn, sau đó chuyển vào DataSet và các lớp quan hệ
như DataTable (xem về lớp không kết nối ở phần sau).
Nó cũng có trách nhiệm cập nhật dữ liệu thay đổi vào
dữ liệu nguồn.
§ Các phát biểu trong SQL được “nhúng” vào C# bằng
đối tượng Command. Bộ điều hợp sẽ sử dụng đối
tượng Command để truy vấn và cập nhật dữ liệu. Vì
thế để làm việc được với DataAdapter, bạn phải chỉ rõ
và sử dụng đối tượng Command.
§ DataAdapter chia thành 3 lớp cụ thể:
OleDbDataAdapter , OdbcDataAdapter,
SqlDataAdapter
210
Lập trình C#.NET
5.4. Lập báo cáo sử dụng Crystal Report
§ Sử dụng nguồn dữ liệu qua ODBC
§ Sử dụng nguồn dữ liệu qua ADO.NET
211
Lập trình C#.NET
5.5. Lập trình socket
§ Socket là gì?
Địa chỉ IP
(IP Address)
Số hiệu cổng
(Port Number)
Socket
212
Lập trình C#.NET
Một số port thông dụng
POP3110
HTTP80
SMTP25
FTP Control21
FTP Data20
Giao thức sử dụngSố hiệu cổng
213
Lập trình C#.NET
Giao thức truyền tin
§ Các gói tin được truyền theo hai giao thức chính
• UDP (User Datagram Protocol): không đảm bảo
được thông tin đến được đích và đúng thứ tự
-> Truyền thông tin cần tốc độ nhanh, không cần
tuyệt đối chính xác (Voice over IP, Game
online)
• TCP (Transmission Control Protocol):đảm bảo
chuyển giao dữ liệu đến nơi nhận một cách đáng
tin cậy và đúng thứ tự. (Web, email, truyền file)
214
Lập trình C#.NET
Ví dụ giao thức UDP
Các file đính kèm theo tài liệu này:
- bai_giang_lap_trinh_ung_dung_su_dung_c_net_pham_van_thuan.pdf