Giáo trình Xây dựng ứng dụng quản lý cơ bản gồm các nội dung chính sau: Visual Studio .NET; Cơ bản về ngôn ngữ C#; Xử lý ngoại lệ; Các đối tượng trên Windows Form; Truy cập và xử lý cơ sở dữ liệu; Lập báo cáo với CrystalReport. Mời các bạn cùng tham khảo nội dung phần 1 sau đây!
ỦY BAN NHÂN DÂN TỈNH AN GIANG TRƯỜNG CAO ĐẲNG NGHỀ AN GIANG GIÁO TRÌNH MƠ ĐUN: XÂY DỰNG ỨNG DỤNG QUẢN LÝ CƠ BẢN NGHỀ: TIN HỌC ỨNG DỤNG TRÌNH ĐỘ: TRUNG CẤP (Ban hành theo Quyết định số: /QĐ-CĐN, ngày tháng Hiệu trưởng trường Cao đẳng nghề An Giang) An Giang, năm 2020 năm 20 MỤC LỤC Đề mục Trang Bài 1: Visual Studio NET I/ Giới thiệu Visual Studio NET II/Quản lý dự án với Visual Studio NET III/ Bài tập Bài 2: Cơ ngôn ngữ C# I/ Kiểu liệu II/ Biến 15 III/Biểu thức 19 IV/ Khoảng trắng 19 V/Câu lệnh 20 VI/ Toán tử 28 VII/ Namespace 32 VIII/ Các dẫn biên dịch 33 IX/ Bài tập 34 Bài 3: Xử lý ngoại lệ 36 I/ Phát sinh bắt giữ ngoại lệ 36 II/ Những đối tượng lớp ngoại lệ 41 III/Phát sinh ngoại lệ 44 IV/ Bài tập 45 Bài 4: Các đối tượng Windows Form 47 I/ Các điều khiển 47 II/ Các điều khiển nâng cao ListBox, ComboBox 51 III/ Image,ImageList 52 IV/ListView, TreeView 54 V/ Bố cục Control 59 VI/ Các hộp thoại thông điệp 61 VII/ Các hộp thoại tập tin 63 VIII/ Thực đơn chính, thực đơn ngữ cảnh 65 IX/Ứng dụng SDI, MDI 67 X/ Bài tập 69 Bài 5: Truy cập xử lý sở liệu 75 I/Tổng quan ADO.NET 75 II/Các công cụ kết nối liệu 80 III/Hiển thị liệu, lọc liệu 98 IV/Thao tác với liệu 101 V/Bài tập 103 Bài 6: Lập báo cáo với CrystalReport 105 I/Giới thiệu công cụ Crystal Report 105 II/ Gắn kết liệu vào báo cáo 107 III/ Xây dựng triển khai báo cáo 108 IV/ Bài tập 110 TÀI LIỆU THAM KHẢO 112 GIÁO TRÌNH MƠ ĐUN Tên mơ đun: XÂY DỰNG ỨNG DỤNG QUẢN LÝ CƠ BẢN Mã số môn học: MĐ 22 I VỊ TRÍ, TÍNH CHẤT CỦA MƠ ĐUN: Vị trí: - Mơ đun thuộc nhóm mơn chun ngành - Môn học yêu cầu người học phải có kiến thức lập trình kiến thức ngơn ngữ lập trình C# 2.Tính chất: Là mơn học chuyên ngành bắt buộc - Đây mô đun chứa đựng kiến thức tảng lập trình Windows Form, lập trình kết nối sở liệu - Mô đun tảng giúp người học xây dựng ứng dụng quản lý Windows Form II MỤC TIÊU MÔ ĐUN: Sau học xong mơ đun này, người học có thể: - Tạo ứng dụng Windows - Tạo ứng dụng sở liệu Windows - Lập trình sử dụng đối tượng NET - Tạo ứng dụng sở liệu với báo cáo CrystalReport - Tạo ứng dụng MDI - Rèn luyện kỹ làm việc cẩn thận, nghiêm túc Bài 1: Visual Studio NET Giới thiệu Visual Studio Net mơi trường lập trình tích hợp nhiều cơng cụ, học giới thiệu cơng cụ, mơi trường lập trình cách quản lý dự án phần mềm Mục tiêu bài: Nhằm trang bị cho người học: - Kiến thức kỹ sử dụng thành phần Visual Studio.NET - Tạo quản lý dự án với Visual Studio Net - Hình thành thái độ việc nghiêm túc, tác phong chuyên nghiệp Nội dung: I/ Giới thiệu Visual Studio NET Là mơi trường phát triển tích hợp (Integrated Development Environment (IDE) phát triển từ Microsoft Đây loại phần mềm máy tính có cơng dụng giúp đỡ lập trình viên việc phát triển phần mềm Các môi trường phát triển hợp thường bao gồm: - Một trình soạn thảo mã (source code editor): dùng để viết mã - Trình biên dịch (compiler) và/hoặc trình thơng dịch (interpreter) - Cơng cụ xây dựng tự động: sử dụng biên dịch (hoặc thông dịch) mã nguồn, thực liên kết (linking), chạy chương trình cách tự động Trình gỡ lỗi (debugger): hỗ trợ dị tìm lỗi - Ngồi ra, cịn bao gồm hệ thống quản lí phiên cơng cụ nhằm đơn giản hóa cơng việc xây dựng giao diện người dùng đồ họa (GUI) - Nhiều môi trường phát triển hợp đại cịn tích hợp trình duyệt lớp (class browser), trình quản lí đối tượng (object inspector), lược đồ phân cấp lớp (class hierarchy diagram),… để sử dụng việc phát triển phần mềm theo hướng đối tượng Như vậy, Microsoft Visual Studio dùng để phát triển console (thiết bị đầu cuối – bàn giao tiếp người máy) GUI (giao diện người dùng đồ họa) với trình ứng dụng Windows Forms, web sites, ứng dụng, dịch vụ wed (web applications, and web services) Chúng phát triển dựa mã ngôn ngữ gốc (native code ) mã quản lý (managed code) cho tảng được hỗ trợ Microsoft Windows, Windows Mobile, NET Framework, NET Compact Framework Microsoft Silverlight Visual Studio hỗ trợ nhiều ngơn ngữ lập trình, kể tên sau: C/C++ ( Visual C++), VB.NET (Visual Basic NET), C# (Visual C#)… hỗ trợ ngôn ngữ khác F#, Python, Ruby; ngồi cịn hỗ trợ XML/XSLT, HTML/XHTML, JavaScript CSS… Microsoft Visual Studio có chức sau: soạn thảo mã (code editor); Trình gỡ lỗi (debugger); Thiết kế (Designer) Một số công cụ quan trọng chức Designer – xem điểm nhấn microsoft visual studio - WinForms Designer: công cụ tạo giao diện đồ họa dùng WinForms Điểm đặc biệt giao diện với người dùng sinh động, dễ nắm bắt Nó bao gồm phím bấm, tác vụ, hay box đa dạng (textbox, list box, grid view…) Chúng ta di chuyển, kéo ra, nhúng thả chúng cách dễ dàng - WPF Designer: WPF Designer cịn có tên mã Cider, hỗ trợ Visual Studio 2008 Nó tạo mã XAML cho giao diện người sử dụng (UI), mã tích hợp với trình ứng dụng Microsoft Expression Design - Web designer: Visual Studio hỗ trợ cộng cụ thiết kế trang web, cho phép cơng cụ thiết kế trang web kéo, thả, rê, nhúng cách dễ dàng… Công cụ dùng để phát triển trình ứng dụng ASP.NET hỗ trợ HTML, CSS and JavaScript - Class designer: Đây công cụ dùng để thực thi chỉnh sửa lớp Nó dùng mã C# VB.NET … - Data designer: Đây công cụ dùng để chỉnh sửa cách sinh động, linh hoạt lược đồ liệu, bao gồm nhiều loại lược đồ, liên kết Mapping designer: Đây công cụ tạo mối liên hệ sơ đồ liệu lớp để quản lý liệu cách hiệu Ngồi cịn kể tên số cơng cụ khác như: - Open Tabs Browser: Nó dùng để liệt kể tab mở chuyển đổi chúng, dùng phím nóng: CTRL + TAB - Properties Editor: Chức dùng để chỉnh sửa chức cửa sổ giao diện đồ họa người dùng (GUI) Visual Studio Nó áp dụng cho lớp, mẫu định dạng hay trang web đốI tượng khác - Object Browser: Đây thư viện tên miền lớp trình duyệt cho Microsoft.NET - Solution Explorer: theo ngôn ngữ Visual Studio, solution phận mã file mã nguồn khác dùng để xây dựng trình ứng dụng Công cụ Solution Explorer dùng để để quản lý trình duyệt file solution - Team Explorer: Đây công cụ dùng để hợp máy tính Team Foundation Server, RCS (revision control system - hệ thống điều khiển xét duyệt) vào IDE - Data Explorer: Data Explorer dùng để quản lý liệu phiên Microsoft SQL Server Nó cho phép tạo lập chỉnh sửa bảng liệu tạo T-SQL commands hay dùng Data designer - Server Explorer: Đây công cụ dùng để quản lý liệu máy tính kết nối II/Quản lý dự án với Visual Studio NET - Để tạo dự án Microsoft Visual Studio, khởi động Visual Studio, chọn menu File/ New/ Project Chức mở cửa sổ New Project Chọn mục Visual C# vùng Project types bên trái, vùng Templates bên phải, chọn Console Application Lúc nhập tên cho ứng dụng mục Name, lựa chọn thư mục lưu trữ tập tin mục Location, nhập tên solution chứa dự án mục Solution Name Visual Studio NET tạo solution Hello chứa project Hello Một không gian tên (namespace) phát sinh dựa tên project Hello để chứa project Một lớp tên Program.cs phát sinh, tùy ý đổi tên chúng cửa sổ View/ Solution Explorer Khi đổi tên tập tin chứa lớp Hello.cs, tên lớp thay đổi thành Hello - Để biên dịch chương trình, chọn menu Build/ Build Solution - Để chạy chương trình có hay khơng sử dụng chế độ debug, chọn Debug/ Start Debugging hay Start Without Debugging Sau biên dịch chạy chương trình, kết dịng chữ “Welcome to C#.NET” hiển thị hình Dự án (project) sử dụng để quản lý, xây dựng, biên dịch thực hiệu thành viên cần thiết để tạo nên ứng dụng tham chiếu (references), kết nối sở liệu (data connections), thư mục (folders) tập tin (files) Tập tin dự án sau biên dịch tập tin khả thi exe (executable file) hay thư viện liên kết động dll (dynamic link library) Solution chứa hay nhiều project Visual Studio NET lưu trữ định nghĩa solution hai tập tin: sln suo Tập tin sln lưu trữ liệu định nghĩa solution thành viên cấu hình cấp solution Tập tin suo lưu trữ liệu thiết lập tùy chọn IDE Để dự án solution trở thành dự án khởi động, kích phải tên dự án cửa sổ Solution Explorer, chọn Set as StartUp Project Hình 1.1 Hộp thoại New project III/ Bài tập Bài Thực hành tạo dự án - Trong menu File chọn New → Poject nhấn tổ hợp phím (Ctrl+Shift+N), xuất cửa sổ New Project - Trong cửa sổ New Project: chọn Project type Visual C# - Windows Chọn templates Console Application Nhập tên project vào phần Name: Lab01 Khai báo đường dẫn lưu trữ Location… Khai báo tên Project… Bài Xây dựng lớp Program theo yêu cầu : -Trong hàm Main mặc định tạo câu lệnh sau: class Program { static void Main(string[] args) { Console.WriteLine("Chao ban C-LTM/K2"); Console.ReadLine(); } } Bài Biên dịch chạy chương trình: - Sử dụng chức Build Solution: F6 - Sử dụng chức Run with Debug: F5 - Sử dụng chức Run without Debug: Ctrl + F5 Bài 2: Cơ ngôn ngữ C# Giới thiệu Bài thảo luận hệ thống kiểu liệu, phân biệt kiểu liệu xây dựng sẵn (như int, bool, string…) với kiểu liệu người dùng định nghĩa (lớp hay cấu trúc người lập trình tạo ) Một số khác lập trình tạo sử dụng biến liệu hay đề cập với cấu trúc liệt kê, chuỗi, định danh, biểu thức cậu lệnh Mục tiêu bài: Nhằm trang bị cho người học: - Kiến thức kiểu liệu dựng sẵn C# - Kiến thức kỹ việc sử dụng biến, biểu thức - Kiến thức kỹ toán tử - Kiến thức dẫn biên dịch - Kiến thức kỹ việc sử dụng cấu trúc điều khiển Nội dung: I/ Kiểu liệu C# ngơn ngữ lập trình mạnh kiểu liệu, ngôn ngữ mạnh kiểu liệu phải khai báo kiểu đối tượng tạo (kiểu số nguyên, số thực, kiểu chuỗi, kiểu điều khiển ) trình biên dịch giúp cho người lập trình khơng bị lỗi cho phép loại kiểu liệu gán cho kiểu liệu khác Kiểu liệu đối tượng tín hiệu để trình biên dịch nhận biết kích thước đối tượng (kiểu int có kích thước byte) khả (như đối tượng button vẽ, phản ứng nhấn, ) C# phân tập hợp kiểu liệu thành hai loại: Kiểu liệu giá trị (value) kiểu liệu tham chiếu (reference) Việc phân chi khác lưu kiểu liệu giá trị kiểu liệu tham chiếu nhớ Đối với kiểu liệu giá trị lưu giữ kích thước thật nhớ cấp phát stack Trong địa kiểu liệu tham chiếu lưu stack đối tượng thật lưu nhớ heap Nếu có đối tượng có kích thước lớn việc lưu giữ chúng nhớ heap có ích, chương trình bày lợi ích bất lợi 6/ Tốn tử ba ngơi Hầu hết tốn tử địi hỏi có tốn hạng tốn tử (++, ) hay hai toán hạng (+,-,*,/, ) Tuy nhiên, C# cịn cung cấp thêm tốn tử có ba tốn hạng (?:) Tốn tử có cú pháp sử dụng sau: ? : Toán tử xác định giá trị biểu thức điều kiện, biểu thức điều kiện phải trả giá trị kiểu bool Khi điều kiện thực hiện, cịn ngược lại điều kiện sai thực Có thể diễn giải theo ngơn ngữ tự nhiên tốn tử có ý nghĩa : “Nếu điều kiện làm cơng việc thứ nhất, cịn ngược lại điều kiện sai làm công việc thứ hai” VII/ Namespace Việc sử dụng đặc tính namespace ngơn ngữ C#, nhằm tránh xung đột việc sử dụng thư viện khác từ nhà cung cấp Ngoài ra, namespace xem tập hợp lớp đối tượng, cung cấp định danh cho kiểu liệu đặt cấu trúc phân cấp Việc sử dụng namespace lập trình thói quen tốt, cơng việc cách lưu mã nguồn để sử dụng sau Ngoài thư viện namespace MS.NET hãng thứ ba cung cấp, ta tạo riêng cho namespace C# đưa từ khóa using đề khai báo sử dụng namespace chương trình: using < Tên namespace > Để tạo namespace dùng cú pháp sau: namespace { < Định nghĩa lớp A> < Định nghĩa lớp B > 32 } VIII/ Các dẫn biên dịch Đối với ví dụ minh họa phần trước, biên dịch tồn chương trình biên dịch Tuy nhiên, có yêu cầu thực tế muốn phần chương trình biên dịch độc lập, ví dụ debug chương trình xây dựng ứng dụng Trước mã nguồn biên dịch, chương trình khác gọi chương trình tiền xử lý thực trước chuẩn bị đoạn mã nguồn để biên dịch Chương trình tiền xử lý tìm mã nguồn kí hiệu dẫn biên dịch đặc biệt, tất dẫn biên dịch bắt đầu với dấu rào (#) Các dẫn cho phép định nghĩa định danh kiểm tra tồn định danh Định nghĩa định danh Câu lệnh tiền xử lý sau: #define DEBUG Lệnh định nghĩa định danh tiền xử lý có tên DEBUG Mặc dù thị tiền xử lý khác đặt đâu chương trình, với thị định nghĩa định danh phải đặt trước tất lệnh khác, bao gồm câu lệnh using Để kiểm tra định danh định nghĩa ta dùng cú pháp #if Do ta viết sau: #define DEBUG // Các đoạn mã nguồn bình thường, khơng bị tác động trình tiền xử lý #if DEBUG // Các đoạn mã nguồn khối if debug biên dịch #else // Các đoạn mã nguồn không định nghĩa debug không biên dịch #endif // Các đoạn mã nguồn bình thường, khơng bị tác động trình tiền xử lý 33 IX/ Bài tập Bài tập 1: Nhập vào, biên dịch chạy chương trình Hãy cho biết chương trình làm điều gì? class BaiTap3_1 { public static void Main() { int x = 0; for(x = 1; x < 10; x++) { System.Console.Write(“{0:03}”, x); } } } Bài tập 2: Tìm lỗi chương trình sau? sửa lỗi biên dịch chương trình class BaiTap3_2 { public static void Main() { for(int i=0; i < 10 ; i++) System.Console.WriteLine(“so :{1}”, i); } } Bài tập 3: Tìm lỗi chương trình sau Sửa lỗi biên dịch lại chương trình using System; class BaiTap3_3 { public static void Main() { double myDouble; decimal myDecimal; myDouble = 3.14; myDecimal = 3.14; Console.WriteLine(“My Double: {0}”, myDouble); Console.WriteLine(“My Decimal: {0}”, myDecimal); 34 } } Bài tập 4: Tìm lỗi chương trình sau Sửa lỗi biên dịch lại chương trình class BaiTap3_4 { static void Main() { int value; if (value > 100); System.Console.WriteLine(“Number is greater than 100”); } } Bài tập 5: Viết chương trình Tính tổng dãy số C# Bài tập 6: Viết Chương trình để hiển thị bảng cửu chương C# Bài tập 7: Viết chương trình Kiểm tra số nguyên tố C# 35 Bài 3: Xử lý ngoại lệ Giới thiệu Bài học giới thiệu giải thích cách bắt giữ ngoại lệ Ý nghĩa cách sử dụng câu lệnh throw, catch, finally Mục tiêu: Nhằm trang bị cho người học: - Kiến thức lỗi phát sinh ngoại lệ tầm ảnh hưởng đến chương trình - Kiến thức kỹ sử dụng lớp đối tượng ngoại lệ - Kiến thức kỹ việc tạo, sử dụng lớp ngoại lệ riêng cho chương trình Nội dung: I/ Phát sinh bắt giữ ngoại lệ Trong ngôn ngữ C#, phát sinh (throw) đối tượng có kiểu liệu System.Exception, hay đối tượng dẫn xuất từ kiểu liệu Namespace System CLR chứa số kiểu liệu xử lý ngoại lệ mà sử dụng chương trình Những kiểu liệu ngoại lệ bao gồm ArgumentNull- Exception, InValidCastException, OverflowException, nhiều lớp khác 1/Câu lệnh throw Để phát tín hiệu khơng bình thường lớp ngơn ngữ C#, phát sinh ngoại lệ Để làm điều này, sử dụng từ khóa throw Dịng lệnh sau tạo thể System.Exception sau throw nó: throw new System.Exception(); Khi phát sinh ngoại lệ tức khắc làm ngừng việc thực thi CLR tìm kiếm trình xử lý ngoại lệ Nếu trình xử lý ngoại lệ khơng tìm thấy phương thức thời, CLR tiếp tục tìm phương thức gọi tìm thấy Nếu CLR trả lớp Main() mà khơng tìm thấy trình xử lý ngoại lệ nào, kết thúc chương trình Ví dụ: namespace Programming_CSharp { using System; public class Test 36 { 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 ”); } } } Ví dụ minh họa đơn giản viết hình console thơng tin nhập vào hàm chuẩn bị từ hàm Hàm Main() tạo thể kiểu Test sau gọi hàm Func1() Sau in thông điệp “Enter Func1”, hàm Func1() gọi hàm Func2() Hàm Func2() in thông điệp phát sinh ngoại lệ kiểu System.Exception Việc thực thi ngưng tức khắc, CLR tìm kiếm trình xử lý ngoại lệ hàm Func2() Do khơng tìm thấy đây, CLR tiếp tục vào stack lấy hàm gọi trước tức Func1 tìm kiếm trình xử lý ngoại lệ Một lần Func1 khơng có đoạn xử lý ngoại lệ Và CLR trả hàm Main Tại hàm Main khơng có, nên CLR gọi trình mặc định xử lý ngoại lệ, việc đơn giản xuất thông điệp lỗi 2/ Câu lệnh catch Trong C#, trình xử lý ngoại lệ hay đoạn chương trình xử lý ngoại lệ gọi khối catch tạo với từ khóa catch try { // Câu lệnh thực phát sinh lỗi } catch(Type x) 37 { // Câu lệnh xử lý gặp lỗi } Trong ví dụ sau, câu lệnh throw thực thi bên khối try, khối catch sử dụng để công bố lỗi xử lý Ví dụ 3.2: namespace Programming_CSharp { using System; 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 ”); try { Console.WriteLine(“Entering try block ”); throw new System.Exception(); Console.WriteLine(“Exiting try block ”); } catch { Console.WriteLine(“Exception caught and handled.”); } Console.WriteLine(“Exit Func2 ”); } } } Ví dụ 3.2 tương tự ví dụ minh họa ví dụ 1.1 ngoại trừ chương trình thêm vào khối try/catch Thơng thường đặt khối try bao quanh đoạn chương trình tiềm ẩn gây nguy hiểm, việc truy cập file, cấp phát nhớ Theo sau khối try câu lệnh catch tổng quát Câu lệnh catch ví dụ tổng qt khơng xác định loại ngoại lệ mà bắt giữ 38 Trong trường hợp tổng quát khối catch bắt giữ ngoại lệ phát sinh Sử dụng câu lệnh catch để bắt giữ ngoại lệ xác định thảo luận phần sau chương Trong ví dụ này, khối catch đơn giản thông báo ngoại lệ bắt giữ xử lý Trong ví dụ giới thực, đưa hành động để sửa chữa vấn đề mà gây ngoại lệ Ví dụ, người sử dụng cố mở tập tin có thuộc tính đọc, gọi phương thức cho phép người dùng thay đổi thuộc tính tập tin Nếu chương trình thực thiếu nhớ, phát sinh cho người dùng hội để đóng bớt ứng dụng khác lại Thậm chí trường hợp xấu ta khơng khắc phục khối catch in thơng điệp lỗi để người dùng biết Thử kiểm tra kỹ lại chương trình trên, thấy xuất đoạn mã vào hàm Main(), Func1(), Func2(), khối try Chúng ta khơng thấy khối lệnh try (tức in thông báo “Exiting try block ”, hay thực lệnh này), thoát theo thứ tự Func2(), Func1(), Main() Chuyện xảy ra? Khi ngoại lệ phát sinh, việc thi hành bị tạm dừng việc thi hành chuyển qua khối lệnh catch Nó khơng trả luồng thực ban đầu, tức lệnh sau phát ngoại lệ khối try không thực Trong trường hợp không nhận thông báo “Exiting try block ” Khối lệnh catch xử lý lỗi sau chuyển việc thực thi chương trình đến lệnh tiếp sau khối catch 3/ Câu lệnh finally Trong số tình huống, việc phát sinh ngoại lệ unwind stack tạo số vấn đề Ví dụ mở tập tin hay trường hợp khác xác nhận tài nguyên, cần thiết hội để đóng tập tin giải phóng nhớ đệm mà chương trình chiếm giữ trước Ghi chú: Trong ngơn ngữ C#, vấn đề xảy chế thu dọn tự động C# ngăn ngừa ngoại lệ phát sinh từ việc thiếu nhớ Tuy nhiên, có số hành động mà cần phải quan tâm ngoại lệ phát sinh ra, việc đóng tập tin, có hai chiến lược để lựa chọn thực Một hướng tiếp cận đưa hành động nguy hiểm vào khối try sau thực việc đóng tập tin hai khối catch try 39 Tuy nhiên, điều gây đoạn chương trình khơng đẹp sử dụng trùng lắp lệnh Ngôn ngữ C# cung cấp thay tốt khối finally try { // Câu lệnh thực phát sinh lỗi } catch(Type x) { // Câu lệnh xử lý gặp lỗi } finally { // Câu lệnh ln thực thi } Đoạn chương trình bên khối catch đảm bảo thực thi mà khơng quan tâm đến việc ngoại lệ phát sinh Phương thức TestFunc() ví dụ sau minh họa việc mở tập tin hành động nó, sau phương thức thực vài phép toán toán học, sau tập tin đóng Có thể q trình mở tập tin đóng tập tin chương trình phát sinh ngoại lệ Nếu xuất ngoại lệ, tập tin cịn mở Người phát triển biết khơng có chuyện xảy ra, cuối phương thức tập tin đóng Do chức đóng tập tin di chuyển vào khối finally, thực thi mà khơng cần quan tâm đến việc có phát sinh hay khơng ngoại lệ chương trình Ví dụ : namespace Programming_CSharp { using System; public class Test { public static void Main() { Test t=new Test(); t.TestFunc(); } //chia hai số xử lý ngoại lệ có public void TestFunc() { try{ 40 Console.WriteLine(“Open file here”); { double a=5; double b=0; Console.WriteLine(“{0}/{1}={2}”,a,b,DoDivide(a,b)); Console.WriteLine(“This line may or not print”); } catch(System.DivideByZeroException) { Console.WriteLine(“DivideByZeroException caught!”); } catch { Console.WriteLine(“Unknown exception caught”); } finally { Console.WriteLine(“Close file here”): } } //thực chia hợp lệ public double DoDivide(double a,double b) { if(b==0) { throw new System.DivideByZeroException(); } if(a==0) {throw new System.ArithmeticException(); } return a/b; } } } Trong ví dụ khối catch loại bỏ thêm vào khối finally Bất ngoại lệ có phát sinh hay khơng khối lệnh bên finally thực thi Do nên hai trường hợp ta thấy xuất thông điệp “Close file here” II/ Những đối tượng lớp ngoại lệ Đối tượng System.Exception cung cấp số phương thức thuộc tính hữu dụng Thuộc tính Message cung cấp thơng tin ngoại lệ, lý ngoại lệ phát sinh Thuộc tính Message thuộc tính đọc, đoạn chương trình phát sinh ngoại lệ thiết lập thuộc tính Message đối mục cho 41 khởi dựng ngoại lệ Thuộc tính HelpLink cung cấp liên kết để trợ giúp cho tập tin liên quan đến ngoại lệ Đây thuộc tính đọc Thuộc tính StackTrace thuộc tính đọc thiết lập CLR Trong ví dụ 1.3 thuộc tính Exception.HelpLink thiết lập truy cập để cung cấp thông tin cho người sử dụng ngoại lệ DivideBy-ZeroException Thuộc tính StackTrace ngoại lệ sử dụng để cung cấp thông tin stack cho câu lệnh lỗi Một thông tin stack cung cấp hàng loạt gọi stack phương thức gọi mà dẫn đến ngoại lệ phát sinh Ví dụ: namespace Programming_CSharp { using System; public class Test { public static void Main() { Test t=new Test(); t.TestFunc(); } //chia hai số xử lý ngoại lệ public void TestFunc() { try { Console.WriteLine(“Open file here”); Double a=12; Double b=0; Console.WriteLine(“{0}/{1}={2}”,a,b,DoDivide(a,b)); Console.WriteLine(“This line may or not print”); } catch{ Console.WriteLine(“\n DivideByZeroException! Msg:{0}”,e.Message); Console.WriteLine(“\n HelpLink:{0}”,e.HelpLink); Console.WriteLine(“\n Here’s a stack trace:{0}\n”,e.StackTrace); } catch { Console.WriteLine(“Unknown exception caught”); } } //thực phép chia hợp lệ public double DoDivide(double a,double b) { if(b==0) { 42 DivideByZeroException e=new DivideByZeroException(); e.HelpLink=”http://www.agvc.edu.vn”); throw e; } if(a==0) { throw new ArithmeticException(); } Return a/b; } Bảng sau mô tả số lớp ngoại lệ chung khai báo bên namespace System CÁC LỚP NGOẠI LỆ Tên ngoại lệ Mô tả MethodAccessException Lỗi truy cập, truy cập đến thành viên hay phương thức không truy cập ArgumentException Lỗi tham số đối mục ArgumentNullException Đối mục Null, phương thức truyền đối mục null không chấp nhận ArithmeticException Lỗi liên quan đến phép tốn ArrayTypeMismatchException Kiểu mảng khơng hợp, cố lưu trữ kiểu khơng thích hợp vào mảng DivideByZeroException Lỗi chia zero FormatException Định dạng khơng xác đối mục IndexOutOfRangeException Chỉ số truy cập mảng khơng hợp lệ, dùng nhỏ số nhỏ hay lớn số lớn mảng InvalidCastException Phép gán không hợp lệ MulicastNotSupportedException Multicast không hỗ trợ, việc kết hợp hai delegate không NotFiniteNumberException Không phải số hữu hạn số không hợp lệ NotSupportedException Phương thức không hỗ trợ, gọi phương thức không tồn bên lớp NullReferenceException Tham chiếu null không hợp lệ OutOfMemoryException Out of memory OverflowException Lỗi tràn phép toán StackOverflowException Tràn stack 43 TypeInitializationException Kiểu khởi tạo sai, khởi dựng tĩnh có lỗi III/Phát sinh ngoại lệ Giả sử muốn khối catch thực vài hành động sau phát sinh lại ngoại lệ bên khối catch (trong hàm gọi) Chúng ta phép phát sinh lại ngoại lệ hay phát sinh lại ngoại lệ khác Nếu phát sinh ngoại lệ khác, phải nhúng ngoại lệ ban đầu vào bên ngoại lệ để phương thức gọi hiểu lai lịch nguồn gốc ngoại lệ Thuộc tính InnerException ngoại lệ cho phép truy cập ngoại lệ ban đầu Bởi InnerException ngoại lệ, nên có ngoại lệ bên Do vậy, toàn dây chuyền ngoại lệ đóng tổ (nest) ngoại lệ với ngoại lệ khác Ví dụ: namespace Programming_CSharp { using System; //tạo ngoại lệ riêng public class MyCustomException:System.Exception { public MyCustomException(string message, Exception inner):base(message,inner){} } public class Test { public static void Main() { Test t=new Test(); t.TestFunc(); } //chia hai số xử lý ngoại lệ public void TestFunc() { try { DangerousFunc1(); } catch(MyCustomException e) { Console.WriteLine(“\n{0}”,e.Message); Console.WriteLine(“Rẻtieving exception history….”); Exception inner=e.InnerException; While(inner!=null) { Console.WriteLine”{0}”,inner.Message); Inner=inner.InnerException; } } 44 } public void DangerousFunc1() { try { DangerousFunc2(); } catch(System.Exception e) { MyCustomException ex=new MyCustomException (“E3-Custom Exception Situattion”,e); throw ex; } } public void DangerousFunc2() { try { DangerousFunc3(); } catch(System.DivideByZeroException e) { Exception ex=new Exception(“E2-Func2 caught divide by zero”,e); Throw ex; } } public void DangerousFunc3() { try { DangerousFunc4(); } catch(System.ArithmeticException) { throw; } catch(System.Exception) { Console.WriteLine(“Exception handled here”); } } public void DangerousFunc4() { throw new DivideByZeroException (“E1- DivideByZero Exception”); } } IV/ Bài tập Bài 1: Hãy viết đoạn lệnh để thực việc bắt giữ ngoại lệ liên quan đến câu lệnh sau đây: Ketqua = Sothu1 / Sothu2; 45 Bài 2: Chương trình sau có vấn đề Hãy xác định vấn đề phát sinh ngoại lệ chạy chương trình Và viết lại chương trình hồn chỉnh gồm lệnh xử lý ngoại lệ: using System; public class Tester { public static void Main() { uint so1=0; int so2, so3; so2 = -10; so3 = 0; // tính giá trị lại so1 -= 5; so2 = 5/so3; // xuất kết Console.WriteLine("So 1: {0}, So 2:{1}", so1, so2); } } Bài 3: Chương trình sau dẫn đến ngoại lệ hay khơng? Nếu có cho biết ngoại lệ phát sinh Hãy viết lại chương trình hồn chỉnh có xử lý ngoại lệ cách đưa thông điệp ngoại lệ phát sinh using System; using System.IO; public class Tester { public static void Main() { string fname = "test3.txt"; string buffer; StreamReader sReader = File.OpenText(fname); while ( (buffer = sReader.ReadLine()) !=null) { Console.WriteLine(buffer); } } } 46 ... triển khai báo cáo 10 8 IV/ Bài tập 11 0 TÀI LIỆU THAM KHẢO 11 2 GIÁO TRÌNH MƠ ĐUN Tên mơ đun: XÂY DỰNG ỨNG DỤNG QUẢN LÝ CƠ BẢN Mã số môn học: MĐ 22 I VỊ TRÍ, TÍNH... lập trình Windows Form, lập trình kết nối sở liệu - Mô đun tảng giúp người học xây dựng ứng dụng quản lý Windows Form II MỤC TIÊU MÔ ĐUN: Sau học xong mơ đun này, người học có thể: - Tạo ứng dụng. .. Windows - Tạo ứng dụng sở liệu Windows - Lập trình sử dụng đối tượng NET - Tạo ứng dụng sở liệu với báo cáo CrystalReport - Tạo ứng dụng MDI - Rèn luyện kỹ làm việc cẩn thận, nghiêm túc Bài 1: Visual