Ngày nay công nghệ thông tin (CNTT) là ngành khoa học đã nhanh chóng khẳng định vị trí của mình với những tính ưu việt mà không ai có thể phủ nhận được. Từ những năm cuối thế kỷ 20, CNTT ở Việt Nam đã phát triển mạnh mẽ và ứng dụng hầu hết các lĩnh vực khoa học kỹ thuật, kinh tế, văn hóa, xã hội.Trong công cuộc đổi mới đất nước, cùng với các lĩnh vực khác, ngành Giáo dục và đào tạo đã và đang từng bước áp dụng những tiến bộ khoa học kỹ thuật của CNTT và ngành. Những phần mền quản lý, những phần mền hỗ trợ sự dạy và học với sự trợ giúp của máy tính đã và đang phát huy hết tác dụng góp phần không nhỏ vào sự nghiệp giáo dục nước nhà. Đặc biệt là trong công tác quản lý tin học lam giảm nhẹ sức lực của người quản lý tin học và thuận tiện hơn rất nhiều so với thực hiện công việc quản lý đặc biệt là thu hẹp không gian lưu trữ, tránh được thất lạc dữ liệu từng bước tự động hóa và cụ thể hóa lượng thông tin theo yêu cầu của người quản lý, có thể tìm kiếm, tra cứu thông tin nhanh một cách đầy đủ và chính xác hơn.Hiện nay việc quản lý nhân khẩu ở địa phương là một trong những vấn đề gây ra nhiều khó khăn, cản trở đối với cả cơ quan chức năng và cuộc sống của người dân, thậm chí đến cả sự phát triển của nền kinh tế đất nước. Mô hình quản lý hộ khẩu, nhân khẩu hiện tại không còn phù hợp với sự phát triển của nền kinh tế và xã hội hiện nay. Một trong những vấn đề gặp phải đó là vấn đề quản lý theo số hộ khẩu và kèm theo quá nhiều giấy tờ gây rắc rối, khó quản lý. Điều này cấp thiết phải được thay thế bằng một hình thức quản lý khác hợp lý và hiệu quả hơn.Với đề tài này em mong muốn xây dựng được một hệ thống quản lý hộ khẩu cấp phường một cách thật hiệu quả. Chương trình Quản lý hộ khẩu cấp phường này được viết dưới dạng một phần mềm tin học dùng để ứng dụng trong một phường, xã.Chương trình Quản lý hộ khẩu cấp phường có các chức năng được phân cấp rõ ràng theo từng cấp để bất cứ ai làm công tác quản lý cũng có thể sử dụng được, có phần Help để giúp cho người sử dụng có thể tra cứu bất cứ lúc nào. Mặt khác, chương trình còn cho phép người sử dụng quản trị hệ thống mạnh, tìm kiếm thông tin nhanh chóng, chính xác. Song bên cạnh đó vì thời gian có hạn nên chương trình này của em còn chứa đựng rất nhiều hạn chế mà em chưa có thời gian khắc phục. Nhờ sự tận tâm theo sát hướng dẫn của thầy Trần Văn Lộc, trong bước đầu em đã nghiên cứu và vận dụng kiến thức đã học để xây dựng được chương trình quản lý đáp ứng tương đối một số các yêu cầu đặt ra như trên. Tuy nhiên, do kiến thức còn hạn chế nên chương trình chắc chắn không tránh khỏi các thiếu sót. Vì vậy, em rất mong nhận được sự đóng góp ý kiến của tất cả các thầy cô và các bạn để có thể từng bước xây dựng chương trình ngày càng hoàn thiện và hiệu quả hơn.Em xin chân thành cảm ơn thầy giáo hướng dẫn Trần Văn Lộc và các thầy cô giáo Khoa Công Nghệ Thông Tin đã giúp em hoàn thành đồ án này.
Trang 1MỤC LỤC
LỜI NÓI ĐẦU 2
Chương 1: LÝ THUYẾT CƠ SỞ DỮ LIỆU 4
I TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU 4
1.Khái niệm về cơ sở dữ liệu 4
II.LÝ THUYẾT VỀ CƠ SỞ DỮ LIỆU QUAN HỆ 5
2.1 Nguồn gốc của.NET 20
2.2 VB.NET 21
2.3 Những khác biệt giữa VB.NET với VB6 24
2.4 Namespaces 25
2.5 Local và Global Namespaces 27
2.6 Truy cập Variable/Class/Structure 34
2.7 Tạo một Class mới 44
Phần 2: XÂY DỰNG CHƯƠNG TRÌNH 49
Chương 1: GIỚI THIỆU HỆ THỐNG 49
Chương 2: KHẢO SÁT HỆ THỐNG 52
Chương 3: PHÂN TÍCH HỆ THỐNG VỀ DỮ LIỆU 67
Chương 4 :PHÂN TÍCH THIÊT KẾ HỆ THỐNG 81
1 Cơ sở dữ liệu: Bảng “NHÂN KHẨU”: 81
2 Cơ sở dữ liệu: Bảng “HỘ KHẨU”: 82
3 Cơ sở dữ liệu: Bảng “KHAI SINH”: 82
KẾT LUẬN 111
Trang 2LỜI NÓI ĐẦU
Ngày nay công nghệ thông tin (CNTT) là ngành khoa học đã nhanh chóng khẳng định vị trí của mình với những tính ưu việt mà không ai có thể phủ nhận được Từ những năm cuối thế kỷ 20, CNTT ở Việt Nam đã phát triển mạnh mẽ
và ứng dụng hầu hết các lĩnh vực khoa học kỹ thuật, kinh tế, văn hóa, xã hội.Trong công cuộc đổi mới đất nước, cùng với các lĩnh vực khác, ngành Giáo dục và đào tạo đã và đang từng bước áp dụng những tiến bộ khoa học kỹ thuật của CNTT và ngành Những phần mền quản lý, những phần mền hỗ trợ sự dạy
và học với sự trợ giúp của máy tính đã và đang phát huy hết tác dụng góp phần không nhỏ vào sự nghiệp giáo dục nước nhà Đặc biệt là trong công tác quản lý tin học lam giảm nhẹ sức lực của người quản lý tin học và thuận tiện hơn rất nhiều so với thực hiện công việc quản lý đặc biệt là thu hẹp không gian lưu trữ, tránh được thất lạc dữ liệu từng bước tự động hóa và cụ thể hóa lượng thông tin theo yêu cầu của người quản lý, có thể tìm kiếm, tra cứu thông tin nhanh một cách đầy đủ và chính xác hơn
Hiện nay việc quản lý nhân khẩu ở địa phương là một trong những vấn đề gây ra nhiều khó khăn, cản trở đối với cả cơ quan chức năng và cuộc sống của người dân, thậm chí đến cả sự phát triển của nền kinh tế đất nước Mô hình quản
lý hộ khẩu, nhân khẩu hiện tại không còn phù hợp với sự phát triển của nền kinh
tế và xã hội hiện nay Một trong những vấn đề gặp phải đó là vấn đề quản lý theo số hộ khẩu và kèm theo quá nhiều giấy tờ gây rắc rối, khó quản lý Điều này cấp thiết phải được thay thế bằng một hình thức quản lý khác hợp lý và hiệu quả hơn
Với đề tài này em mong muốn xây dựng được một hệ thống quản lý hộ khẩu cấp phường một cách thật hiệu quả Chương trình Quản lý hộ khẩu cấp phường này được viết dưới dạng một phần mềm tin học dùng để ứng dụng trong một phường, xã
Chương trình Quản lý hộ khẩu cấp phường có các chức năng được phân cấp
rõ ràng theo từng cấp để bất cứ ai làm công tác quản lý cũng có thể sử dụng
Trang 3được, có phần Help để giúp cho người sử dụng có thể tra cứu bất cứ lúc nào Mặt khác, chương trình còn cho phép người sử dụng quản trị hệ thống mạnh, tìm kiếm thông tin nhanh chóng, chính xác Song bên cạnh đó vì thời gian có hạn nên chương trình này của em còn chứa đựng rất nhiều hạn chế mà em chưa có thời gian khắc phục
Nhờ sự tận tâm theo sát hướng dẫn của thầy Trần Văn Lộc, trong bước đầu
em đã nghiên cứu và vận dụng kiến thức đã học để xây dựng được chương trình quản lý đáp ứng tương đối một số các yêu cầu đặt ra như trên Tuy nhiên, do kiến thức còn hạn chế nên chương trình chắc chắn không tránh khỏi các thiếu sót Vì vậy, em rất mong nhận được sự đóng góp ý kiến của tất cả các thầy cô và các bạn để có thể từng bước xây dựng chương trình ngày càng hoàn thiện và hiệu quả hơn
Em xin chân thành cảm ơn thầy giáo hướng dẫn Trần Văn Lộc và các thầy
cô giáo Khoa Công Nghệ Thông Tin đã giúp em hoàn thành đồ án này
Hà nội, ngày 22 tháng 4 năm 2009
Sinh viên thực hiện
Nguyễn Thị Hoài Thu
Trang 4Phần 1: CƠ SỞ LÝ THUYẾT
Chương 1: LÝ THUYẾT CƠ SỞ DỮ LIỆU
I TỔNG QUAN VỀ CƠ SỞ DỮ LIỆU
1.Khái niệm về cơ sở dữ liệu
Cơ sở dữ liệu(CSDL) là một tập hợp sắp xếp các thông tin, dữ liệu về một vấn
đề nào đó, nhằm giúp cho người sử dụng dễ dàng tra cứu, sử dụng và cập nhật.Đặc điểm chủ yếu của CSDL là cách tổ chức, sắp xếp thông tin, các dữ liệu có liên quan với nhau sẽ được lưu trong các tệp tin hay trong các bảng Nói cách khác nhau nó là tập hợp các dữ liệu có quan hệ với nhau
2.Sự cần thiết của cơ sở dữ liệu
Ngày nay, nhu cầu tích lũy, lưu trữ và xử lý dữ liệu đã có mặt trên mọi lĩnh vực, trong mọi hoạt động của con người Nhưng thông tin ngày càng lớn và phức tạp, buộc con người phải sắp xếp các thông tin ssao cho nó khoa học, vì vậy đòi hỏi họ phải sử dụng CSDL
3.Hệ quản trị cơ sở dữ liệu
Là một công cụ cho phép quản lý và tương tác với cơ sở dữ liệu như cho phép
xử lý, thay đổi, truy xuất CSDL Theo nghĩa này, hệ quản trị CSDL có nhiệm vụ rất quan trọng như là một bộ phận diễn dịch với ngôn ngữ bậc cao nhằm giúp người sử dụng có thể dùng được hệ thống mà ít nhiều không cần quan tâm đến thuật toán chi tiết hoặc biểu diễn dữ liệu trong máy tính Hầu hết các hệ quản trị CSDL đều thực hiện các chức năng sau:
- Lưu trữ dữ liệu
- Tạo và duy trì cấu trúc dữ liệu
- Hỗ trợ bảo mật và riêng tư
- Cho xem và xử lý các dữ liệu lưu trữ
- Cung cấp một cơ chế chỉ mục(index) hiệu quả để truy cập nhanh các dữ liệu lựa chọn
- Cung cấp tính nhất quán giữa các bản ghi khác nhau
Trang 5- Bảo vệ dữ liệu khỏi mất mát bằng các quá trình sao lưu (backup) và phục hồi
dữ liệu(recovery)
Trong hệ quản trị CSDL quan hệ giữa các bảng được tổ chức thành các bảng, các bảng bao gồm các trường và các trường chứa các bản ghi Mỗi trường tương ứng với một mục dữ liệu, hai hay nhiều bảng có thể liên kết nếu chúng có một hay nhiều trường chung
II.LÝ THUYẾT VỀ CƠ SỞ DỮ LIỆU QUAN HỆ
1 Khái niệm cơ bản về cơ sở dữ liệu quan hệ
Khái niệm CSDL quan hệ: là loại CSDL cho phép ta truy cập đến dữ liệu thông qua mối quan hẹ đến các dữ liệu khác giống như các bảng tính Để truy cập thông tin ta có thể dùng một ngôn ngữ đặc biệt để truy vấn, đó là SQL(Structure Query Language) nó là ngôn ngữ truy vấn có cấu trúc
2 Thành phần của CSDL
a Các trường dữ liệu (Data fields)
Trường dữ liệu chứa dữ liệu nhỏ nhất(dữ liệu nguyên tố), ví dụ bảng HSSV chứa thông tin về sinh viên: trường MSSV chứa mã sinh viên, trường ngaysinh chứa thông tin về ngày tháng năm sinh của sinh viên trong trường…
Tất cả các trường tạo ra sẽ chứa một CSDL đơn Tuy rằng ta có thể chứa hơn một thành phần dữ liệu trong một trường(Field) đơn,nhưng gặp trở ngại khi cập nhật hay sắp xếp thứ tự
b Các bản ghi dữ liệu
Các bản ghi dữ liệu (Record) là tập hợp các trường dữ liệu có liên quan Một
số bản ghi sinh viên bao gồm các thông tin về sinh viên như: họ tên, ngày sinh, quê quán, hộ khẩu thường trú, giới tính
c Bảng dữ liệu(DataTable)
Bằng cách kết hợp field dữ liệu và record dữ liệu đã tạo ra nguyên tố chung nhất của CSDL quan hệ là bảng dữ liệu Nguyên tố này chứa nhiều bản ghi
Trang 6dữ liệu, mỗi bản ghi chứa nhiều trường dữ liệu Cũng như mỗi bản ghi chứa các trường có quan hệ,mỗi bảng dữ liệu chứa các bản ghi có quan hệ Các bảng dữ liệu nên đặt tên theo đúng ý nghĩa để giúp người dùng dễ nhớ nội dung bản ghi và trường.
Mô hình CSDL quan hệ yêu cầu mỗi hang trong một bảng phải là duy nhất
Để đảm bảo tính duy nhất cho một hang bằng cách tạo ra một khóa chính(primary key) một cột hay kết hợp nhiều cột để xác định duy nhất một hang Một bảng ghi chỉ có thể có một khóa chính, mặc dù có thể có một số cột hay tổ hợp các cột khác có thể tạo ra các giá trị duy nhất Những cột hay
tổ hợp các cột giá trị duy nhất trong bảng được xem như là khóa dự tuyển của khóa chính Cho đến nay, không có một nguyên tắc tuyệt đối nào để xác định khóa dự tuyển nào là tốt nhất Các tính chất đề nghị cả khóa dự tuyển tốt nhất là: nhỏ nhất.(minimality – chọn một số cột cần thiết ít nhất) ổn định(stability – chọn khóa ít thay đổi nhất) và đơn giản/ thân thiện(simplicity/familiaty – chọn một khóa vừa đơn giản vừa quyen thuộc)
• Khóa ngoại lai(Foreign key): Mặc dù các khóa chính là thành phần của các bảng riêng biệt, nếu ta chỉ dùng các bảng độc lập mà không
có quan hệ, ta rất ít sử dụng khóa chính để trở nên thiết yếu khi ta tạo ra các quan hệ để liên kết các bảng trong CSDL quan hệ
Một trường được gọi là khóa ngoại lai của một bảng A nếu nó không phải là khóa chính của bảng A và liên kết với một bảng B qua khóa chính của bảng B
để xác định duy nhất một bản ghi của bảng B
d Các mỗi quan hệ trong (Relationship)
Trong CSDL quan hệ, quan hệ được xác lập rên từng cặp bảng,những cặp bảng này quan hệ với nhau theo từng một trong 3 loại sau 1-1,1-∞, ∞-∞
• Quan hệ 1-1(one - to - one)
Hai bảng được gọi là quan hệ 1-1 nếu với mọi hang trong bảng thứ nhất chỉ có nhiều nhất một hàng trong bảng thứ hai Trên thực tế quan
hệ này ít xảy ra Loại quan hệ này thường được tạo ra để khắc phục
Trang 7một số giới hạn của các phần mền quản lý CSDL hơn là mô hình hóa một trạng thái của thế giới thực Trong Microsoft Access, các quan hệ 1-1 có lẽ cần thiết trong một CSDL quan hệ khi tách một bảng thành hai hay nhiều bảng do tính bảo mật hay hiệu quả.
• Quan hệ 1-∞(one – to – many )
Hai bảng có quan hệ một nhiều (one – to – many ) nếu đối với bảng thứ nhất có thể không có, hay có một hay nhiều trong bảng thứ hai Quan hệ một nhiều còn được gọi là quan hệ cha con hay là quan hệ chính phục Loại quan hệ này được dùng rất nhiều trong CSDL quan hệ
• Quan hệ ∞-∞.(many – to – many )
Hai bảng có quan hệ many – to – many khi đối với mọi hàng trong bảng thứ nhất có thể có nhiều hàng trong bảng thứ hai và đối với mọi bảng trong bảng thứ hai có thể có nhiều hàng trong bảng thứ nhất Các quan hệ ∞-∞ không thể mô hình hóa trong nhiều phần mềm CSDL trong đó có cả Microsoft Assecc Những quan hệ này cần được tách ra thành nhiều quan hệ 1- ∞
3 Lý thuyết thiết kế cơ sở dữ liệu quan hệ
Trong phần lớn các ứng dụng chúng ta đều phải tạo ra CSDL Do các nguyên nhân đặc biệt có một số ứng dụng không thể xây dựng được CSDL từ đầu hoặc phải sử dụng một số cơ sở có sẵn không ở dạng thích hợp cho cơ sở dữ liệu quan hệ Một trong những dạng thường gặp nhất của ta là chuyển dữ liệu chứa ở dạng dữ liệu bảng tính thành các bảng của CSDL quan hệ
Có 3 bước thiết kế CSDL:
- Tạo ra các lớp thực thể
- Chuẩn hóa các CSDL
- Thực hiện phi chuẩn
Mô hình cơ sở dữ liệu quan hệ
Trang 8Quan hệ là một tập hợp con của tích Đề - Các của một hay nhiều miền Di Như vậy miền quan hệ là vô hạn Luôn luôn giả thiết rằng, quan hệ là một tập hữu hạn.
Một hàng của quan hệ gọi là một bộ
Quan hệ là tập con của tích Đề - Các D1*D2… D3 gọi là quan hệ n
Khi đó mối quan hệ có n thành phần (n cột) Các tiêu đề cột của quan hệ
là thuộc tính Ta có thể định nghĩa quan hệ như sau:
Cho R = { a1,a2,….an } là một tập hợp hữu hạn, không rỗng các thuộc tính Mỗi thuộc tính ai có một miền giá trị là Dai Khi đó r – một tập hợp các bộ { h1,h2,….hm } được gọi là một quan hệ trên R với hj (j = 1,2…., m) là một hàm:
*Hệ tiêu đề Armstrong trong phụ thuộc hàm :
Gọi F là tất cả các phụ thuộc hàm với lược đồ quan hệ R (U) và X->Y là một phụ thuộc hàm,trong đó X,Y ⊆ U Khi đó ta có F+ là tập hợp tất cả các phụ thuộc hàm được sinh ra từ F khi sử dụng tiêu đề Armstrong được gọi là bao đóng của F
Hệ tiêu đề Armstrong : Gọi R(U) là lược đồ quan hệ với U = { A1,….,An }
là tập tất cả các thuộc tính X,Y, X,T ⊆ U Khi đó ta có :
Trang 9- Tính phản xạ : nếu Y ⊆ X thì X->Y
- Tính tẳng trưởng : nếu Z ⊆ U và X->Y thì XZ -> YZ,trong đó XZ
là tập của hai tập X và Y,YZ là tập hợp của hai tập Y và Z
- Tính bắc cầu : nếu X->Y và Y->Z thì X->Z
*Khóa
a) Định nghĩa
Khóa của quan hệ r trên tập thuộc tính U = { A1, A2….,An } là tập con của
K ⊆ U sao cho bất kỳ hai bộ khác nhau, 1, t2 ∈ r luôn thỏa mãn t1 (K) ≠ t2 (K) Tập K là siêu khóa (khóa tối thiểu) của quan hệ r nếu K là một khóa của quan hệ
r và mọi tập con thực sự K’ của K đều không phải là tập khóa
b)Các thuật toán tìm khóa tối tiểu
* Thuật toán tìm khhoas tối thiểu của một sơ đồ quan hệ:
Vào: Sơ đò quan hệ s = < R,F > trong đó:
Ra là một khóa tối tiểu
Thuật toán thực hiện như sau:
+Bước 1: K0 = R = { A1, … ….,An }
+Bươc i:
+ i-1 i i-1 i i
Trang 10• Thuật toán tìm khóa tối tiểu của quan hệ:
Cho trước R = { h1, … ….,hm } là một quan hệ trên tập thuộc tính
R = { a1, … ….,an } Thuật toán thực hiện như sau:
K = Bn là khóa tối tiểu
Cũng như thuật toán trên , nếu ta thay đổi thứ tự các thuật toán của R bằng thuật toán này chúng ta có thể tìm được một khó tối tiểu khác
Trang 11- A-> {a } không đúng trong r.
* Các phép tính toán trên cơ sở dữ liệu
- Phép chèn: là phép them một bộ t {d1, , d n} vào quan hệ r { A1,….An} Ký hiệu r ∪ t Trong đó Ai với i=1,…,n là tên các thuộc tính và d1 ∈ dom (Ai) là các giá trị thuộc miền giá trị tương ứng của thuộc tính Ai
- Phép loại bỏ: là phép xóa một bộ ra khỏi một quan hệ cho trước ký hiệu r- t, tuy nhiên không phải lúc nào phép loại bỏ cũng cần đầy đủ thông tin về cả bộ cần loại bỏ
* Giới thiệu về SQL(Structure Query Language) ngôn ngữ hỏi có cấu trúc, là một công cụ sử dụng để tổ chức, quản lý và truy xuất dữ liệu được lưu trữ trong các cơ sở dữ liệu SQL là môt hệ thống ngôn ngữ bao gồm tập các câu lệnh sử dụng để tương tác với CSDL quan hệ
Tên gọi ngôn ngữ hỏi có cấu trúc phần nào làm chúng ta liên tưởng đến một công cụ (ngôn ngữ) dùng để truy xuất dữ liệu trong các cơ sở dữ liệu Thực
sự mà nói, khả năng của SQL vượt xa so với một công cụ truy xuất dữ liệu, mặc dù đây là mục đích ban đầu khi SQL được xây dựng nên và truy xuất dữ liệu vẫn còn là một trong những chức năng quan trọng của nó SQL được sử dụng để điều khiển tất cả các chức năng mà một hệ quản trị cơ sở dữ liệu cung cấp cho người dùng bao gồm:
• Định nghĩa dữ liệu: SQL cung cấp khả năng định nghĩa các cơ sở dữ
liệu,các cấu trúc lưu trữ và tổ chức dữ liệu cũng như mối quan hệ giữa các thành phần dữ liệu
• Truy xuất và thao tác dữ liệu: Với SQL, người dùng có thể dễ dàng thực
Trang 12dữ liệu.
• Điều khiển truy cập: SQL có thể được sử dụng để cấp phát và kiểm soát các
thao tác của người sử dụng trên dữ liệu, đảm bảo sự an toàn cho cơ sở dữ liệu
• Đảm bảo toàn vẹn dữ liệu: SQL định nghĩa các ràng buộc toàn vẹn trong cơ
sở dữ liệu nhờ đó đảm bảo tính hợp lệ và chính xác của dữ liệu trước các thao tác cập nhật cũng như các lỗi của hệ thống
Như vậy, có thể nói rằng SQL là một ngôn ngữ hoàn thiện được sử dụng trong các hệ thống cơ sở dữ liệu và là một thành phần không thể thiếu trong các hệ quản trị cơ sở dữ liệu Mặc dù SQL không phải là một ngôn ngữ lập trình như C, C++, Java, song các câu lệnh mà SQL cung cấp có thể được nhúng vào trong các ngôn ngữ lập trình nhằm xây dựng các ứng dụng tương tác với cơ sở dữ liệu Khác với các ngôn ngữ lập trình quen thuộc như C, C++, Java, SQL là ngôn ngữ có tính khai báo Với SQL, người dùng chỉ cần mô tả các yêu cầu cần phải thực hiện trên cơ sở dữ liệu mà không cần phải chỉ ra cách thức thực hiện các yêu cầu như thế nào Chính vì vậy, SQL là ngôn ngữ dễ tiếp cận và dễ sử dụng
* Vai trò của SQL
Bản thân SQL không phải là một hệ quản trị cơ sở dữ liệu, nó không thể tồn tại độc lập SQL thực sự là một phần của hệ quản trị cơ sở dữ liệu, nó xuất hiện trong các hệ quản trị cơ sở dữ liệu với vai trò ngôn ngữ và là công cụ giao tiếp giữa người sử dụng và hệ quản trị cơ sở dữ liệu Trong hầu hết các hệ quản trị cơ
sở dữ liệu quan hệ, SQL có những vai trò như sau:
• SQL là ngôn ngữ hỏi có tính tương tác: Người sử dụng có thể dễ dàng
thông qua các trình tiện ích để gởi các yêu cầu dưới dạng các câu lệnh SQL đến
cơ sở dữ liệu và nhận kết quả trả về từ cơ sở dữ liệu
• SQL là ngôn ngữ lập trình cơ sở dữ liệu: Các lập trình viên có thể nhúng
các câu lệnh SQL vào trong các ngôn ngữ lập trình để xây dựng nên các chương trình ứng dụng giao tiếp với cơ sở dữ liệu
• SQL là ngôn ngữ quản trị cơ sở dữ liệu: Thông qua SQL, người quản trị cơ
sở dữ liệu có thể quản lý được cơ sở dữ liệu, định nghĩa các cấu trúc lưu trữ dữ
Trang 13liệu, điều khiển truy cập cơ sở dữ liệu,
• SQL là ngôn ngữ cho các hệ thống khách/chủ (client/server): Trong các
hệ thống cơ sở dữ liệu khách/chủ, SQL được sử dụng như là công cụ để giao tiếp giữa các trình ứng dụng phía máy khách với máy chủ cơ sở dữ liệu
• SQL là ngôn ngữ truy cập dữ liệu trên Internet: Cho đến nay, hầu hết các
máy chủ Web cũng như các máy chủ trên Internet sử dụng SQL với vai trò là ngôn ngữ để tương tác với dữ liệu trong các cơ sở dữ liệu
• SQL là ngôn ngữ cơ sở dữ liệu phân tán: Đối với các hệ quản trị cơ sở dữ
liệu phân tán, mỗi một hệ thống sử dụng SQL để giao tiếp với các hệ thống khác trên mạng, gởi và nhận các yêu cầu truy xuất dữ liệu với nhau
• SQL là ngôn ngữ sử dụng cho các cổng giao tiếp cơ sở dữ liệu: Trong
một hệ thống mạng máy tính với nhiều hệ quản trị cơ sở dữ liệu khác nhau, SQL thường được sử dụng như là một chuẩn ngôn ngữ để giao tiếp giữa các hệ quản trị cơ sở dữ liệu
* Tổng quan về cơ sở dữ liệu quan hệ
a Mô hình dữ liệu quan hệ
Mô hình dữ liệu quan hệ được Codd đề xuất năm 1970 và đến nay trở thành mô hình được sử dụng phổ biến trong các hệ quản trị cơ sở dữ liệu thương mại Nói một cách đơn giản, một cơ sở dữ liệu quan hệ là một cơ sở dữ liệu trong đó tất
cả dữ liệu được tổ chức trong các bảng có mối quan hệ với nhau Mỗi một bảng bao gồm các dòng và các cột: mỗi một dòng được gọi là một bản ghi (bộ) và mỗi một cột là một trường (thuộc tính)
b.Bảng (Table)
Như đã nói ở trên, trong cơ sở dữ liệu quan hệ, bảng là đối tượng được sử dụng
để tổ chức và lưu trữ dữ liệu Một cơ sở dữ liệu bao gồm nhiều bảng và mỗi bảng được xác định duy nhất bởi tên bảng Một bảng bao gồm một tập các dòng
và các cột: mỗi một dòng trong bảng biểu diễn cho một thực thể (trong hình 1.1,
Trang 14cột biểu diễn cho một tính chất của thực thể (chẳng hạn cột NGAYSINH trong bảng SINHVIEN biểu diễn cho ngày sinh của các sinh viên được lưu trữ trong bảng).Như vậy, liên quan đến mỗi một bảng bao gồm các yếu tố sau:
• Tên của bảng: được sử dụng để xác định duy nhất mỗi bảng trong cơ sở dữ
liệu
• Cấu trúc của bảng: Tập các cột trong bảng Mỗi một cột trong bảng được
xác định bởi một tên cột và phải có một kiểu dữ liệu nào đó (chẳng hạn cột
NGAYSINH trong bảng SINHVIEN ở hình trên có kiểu là DATETIME).Kiểu
dữ liệu của mỗi cột qui định giá trị dữ liệu có thể được chấp nhận trên cột đó
• Dữ liệu của bảng: Tập các dòng (bản ghi) hiện có trong bảng.
c Khóa của bảng
Trong một cơ sở dữ liệu được thiết kế tốt, mỗi một bảng phải có một hoặc một tập các cột mà giá trị dữ liệu của nó xác định duy nhất một dòng trong một tập các dòng của bảng Tập một hoặc nhiều cột có tính chất này được gọi là khoá của bảng Việc chọn khoá của bảng có vai trò quan trọng trong việc thiết kế và cài đặt các cơ sở dữ liệu quan hệ Các dòng dữ liệu trong một bảng phải có giá trị khác nhau trên khoá Bảng MONHOC trong hình dưới đây có khoá là cột MAMONHOC
Một bảng có thể có nhiều tập các cột khác nhau có tính chất của khoá (tức là giá trị của nó xác định duy nhất một dòng dữ liệu trong bảng) Trong trường hợp
này, khoá được chọn cho bảng được gọi là khoá chính (primary key) và những khoá còn lại được gọi là khoá phụ hay là khoá dự tuyển (candidate key/unique
key).
Trang 15Mối quan hệ và khóa ngoài
Các bảng trong một cơ sở dữ liệu không tồn tại độc lập mà có mối quan hệ mật thiết với nhau về mặt dữ liệu Mối quan hệ này được thể hiện thông qua ràng
buộc giá trị dữ liệu xuất hiện ở bảng này phải có xuất hiện trước trong một
bảng khác Mối quan hệ giữa các bảng trong cơ sở dữ liệu nhằm đàm bảo được
tính đúng đắn và hợp lệ của dữ liệu trong cơ sở dữ liệu.Này đòi hỏi giá trị cột MAKHOA của một dòng (tức là một lớp) trong bảng LOP phải được xác định từ cột MAKHOA của bảng KHOA
Mối quan hệ giữa các bảng trong một cơ sở dữ liệu thể hiện đúng mối quan
hệ giữa các thực thể trong thế giới thực Trong hình 1.3, mối quan hệ giữa hai bảng LOP và KHOA không cho phép một lớp nào đó tồn tại mà lại thuộc vào
một khoa không có thật.Khái niệm khoá ngoài (Foreign Key) trong cơ sở dữ liệu
quan hệ được sử dụng để biểu diễn mối quan hệ giữa các bảng dữ liệu Một hay
Trang 16của một bảng khác được gọi là khoá ngoài Trong hình trên, cột MAKHOA của bảng LOP được gọi là khoá ngoài của bảng này, khoá ngoài này tham chiếu đến khoá chính của bảng KHOA là cột MAKHOA.
e Sơ lược về SQL
SQL chuẩn bao gồm khoảng 40 câu lệnh Bảng 1.1 liệt kê danh sách các câu lệnh thường được sử dụng nhất trong số các câu lệnh của SQL Trong các hệ quản trị cơ sở dữ liệu khác nhau, mặc dù các câu lệnh đều có cùng dạng và cùng mục đích sử dụng song mỗi một hệ quản trị cơ sở dữ liệu có thể có một số thay đổi nào đó Điều này đôi khi dẫn đến cú pháp chi tiết của các câu lệnh có thể sẽ khác nhau trong các hệ quản trị cơ cơ sở dữ liệu khác nhau
Tạo bảngXoa bảngSửa đổi bảngTạo khung nhìnSửa đổi khung nhìn Xoá khung nhìnTạo chỉ mụcXoá chỉ mụcTạo lược đồ cơ sở dữ liệuXoá lược đồ cơ sở dữ liệuTạo thủ tục lưu trữ
Trang 17Xoá hàmTạo trigger Sửa đổi trigger Xoá trigger
Cấp phát quyền cho người sử dụngThu hồi quyền từ người sử dụng
Uỷ thác (kết thúc thành công) giao tácQuay lui giao tác
Đánh dấu một điểm trong giao tác
Khai báo biến hoặc định nghĩa con trỏ
Mở một con trỏ để truy xuất kết quả truy vấnĐọc một dòng trong kết quả truy vấn (sử dụng con trỏ)
Đóng một con trỏThực thi một câu lệnh SQL
Các câu lệnh của SQL đều được bắt đầu bởi các từ lệnh, là một từ khoá cho biết chức năng của câu lệnh (chẳng hạn SELECT, DELETE, COMMIT) Sau từ lệnh
là các mệnh đề của câu lệnh Mỗi một mệnh đề trong câu lệnh cũng được bắt đầu bởi một từ khoá (chẳng hạn FROM, WHERE, )
Ví dụ 1.1: Câu lệnh:
Trang 18FROM sinhvienWHERE malop=’C24102’
dùng để truy xuất dữ liệu trong bảng SINHVIEN được bắt đầu bởi từ lệnh SELECT, trong câu lệnh bao gồm hai mệnh đề: mệnh đề FROM chỉ định tên của bảng cần truy xuất dữ liệu và mệnh đề WHERE chỉ định điều kiện truy vấn dữ liệu
CHAR (n) Kiểu chuỗi với độ dài cố định NCHAR (n) Kiếu chuỗi với độ dài cố định hỗ trợ UNICODE VARCHAR (n) Kiểu chuỗi với độ dài chính xác
NVARCHAR (n) Kiểu chuỗi với độ dài chính xác hỗ trợ
UNICODEINTEGER Số nguyên có giá trị từ -231đến 231 - 1 INT Như kiểu Integer
TINYTINT Số nguyên có giá trị từ 0 đến 255
SMALLINT Số nguyên có giá trị từ -215đến 215 – 1BIGINT Số nguyên có giá trị từ -263đến 263-1
NUMERIC (p,s) Kiểu số với độ chính xác cố định.
DECIMAL (p,s) Tương tự kiểu Numeric
FLOAT Số thực có giá trị từ -1.79E+308 đến 1.79E+308REAL Số thực có giá trị từ -3.40E + 38 đến 3.40E + 38MONEY Kiểu tiền tệ
BIT Kiểu bit (có giá trị 0 hoặc 1)
Trang 19DATETIME Kiểu ngày giờ (chính xác đến phần trăm của giây)SMALLDATETIME Kiểu ngày giờ (chính xác đến phút)
TIMESTAMPBINARY Dữ liệu nhị phân với độ dài cố định (tối đa 8000 bytes)VARBINARY Dữ liệu nhị phân với độ dài chính xác (tối đa 8000 bytes)
f Giá trị NULL
Một cơ sở dữ liệu là sự phản ánh của một hệ thống trong thế giới thực, do đó các giá trị dữ liệu tồn tại trong cơ sở dữ liệu có thể không xác định được Một giá trị không xác định được xuất hiện trong cơ sở dữ liệu có thể do một số nguyên nhân sau:
• Giá trị đó có tồn tại nhưng không biết
• Không xác định được giá trị đó có tồn tại hay không
• Tại một thời điểm nào đó giá trị chưa có nhưng rồi có thể sẽ có
• Giá trị bị lỗi do tính toán (tràn số, chia cho không, )
Những giá trị không xác định được biểu diễn trong cơ sở dữ liệu quan hệ bởicác giá trị NULL Đây là giá trị đặc biệt và không nên nhầm lẫn với chuỗi rỗng (đối với dữ liệu kiểu chuỗi) hay giá trị không (đối với giá trị kiểu số) Giá trị NULL đóng một vai trò quan trọng trong các cơ sở dữ liệu và hầu hết các hệ quản trị cơ sở dữ liệu quan hệ hiện nay đều hỗ trợ việc sử dụng giá trị này
Trang 20Chương 2: GIỚI THIỆU VB.NET
2.1 Nguồn gốc của.NET
Đầu năm 1998, sau khi hoàn tất version 4 của Internet Information Server (IIS), một đội lập trình ở Microsoft nhận thấy họ còn rất nhiều sáng kiến để kiện toàn IIS Họ bắt đầu thiết kế một architecture mới dựa trên những ý đó và project đuợc đặt tên là Next Generation Windows Services (NGWS) Sau khi Visual Basic 6 đuợc trình làng vào cuối năm 1998, dự án kế tiếp mang tên Visual Studio 7 đuợc xáp nhập vào NGWS Đội ngũ COM+/MTS góp vào một universal runtime cho tất cả các ngôn ngữ lập trình trong Visual Studio, mà
họ có ý định cho ngay cả các ngôn ngữ lập trình của công ty khác dùng luôn Công việc được giữ bí mật mãi đến hội nghị Professional Developers' Conference ở Orlando vào tháng 7/2000 Đến tháng 11/2000 thì Microsoft cho phát hành Beta 1 của.NET gồm ba CD Tính đến lúc ấy thì Microsoft đã làm việc trên dự án ấy gần ba năm rồi Điều ấy cắt nghĩa tại sao Beta 1 version tương đối rất vững chải
.NET mang dấu tích những sáng kiến đã được áp dụng trước đây như
p-code trong UCSD Pascal cho đến Java Virtual Marchine Có điều Microsoft
góp nhặt những sáng kiến của người khác, kết hợp với những sáng kiến của chính mình để làm nên một sản phẩm ăn rơ từ trong ra ngoài Có lẽ cuối năm
2001 hay đầu năm 2002 Microsoft mới phát hành.NET Có người hỏi Microsoft xem.NET quan trọng như thế nào Các "xếp" của Microsoft cho biết 80% tài khóa Research & Development (Nghiên cứu và Triển khai) của Microsoft trong năm 2001 được dành cho.NET, và tối hậu, tất cả sản phẩm của Microsoft đều sẽ được dọn nhà qua.NET platform
.NET gồm có hai phần: Framework và Integrated Development Environment (IDE) Framework cung cấp tất cả những gì cần thiết căn bản
Chữ Framework có nghĩa là cái Khung hay khung cảnh trong đó ta dùng những
hạ tầng cơ sở theo một qui ước nhất định để công việc trôi chảy Còn IDE cung
Trang 21cấp một môi trường giúp ta triển khai dễ dàng, nhanh chóng hơn Nếu không có IDE ta cũng có thể dùng Notepad và line commands để triển khai nhưng nó chậm hơn Do đó, nếu có chỗ nào IDE genareted code có vẽ quá rắc rối, bạn nên trở về Framework để xem mình thật sự tối thiểu cần những thứ gì Vì nói cho cùng, Framework là quan trọng nhất, còn IDE bất quá chỉ là một công cụ gắn lên
phía trên Framework thôi Trong.NET, C# và VB.NET đều dùng cùng một IDE.
2.2 VB.NET
VB.NET (còn được gọi là VB7)chẳng qua là C# viết theo lối Visual Basic Nay VB7 đã hoàn toàn là Object Oriented, tức là cho ta dùng lại classes/forms theo cách thừa kế thật thoải mái, nên nó khác VB6 nhiều lắm
• Tất cả đều là Object như trong Java
• Dùng Namespace để Import classes từ các component vào chương trình
• Các Visual components của Winform đều được chứa dưới dạng Designer Generated Code giống như Delphi, chớ không phải chứa trong phần đầu
của.frm file như trong VB6
• Integer types bây giờ gồm có Byte, Short, Integer và Long
• Có thể dùng các Arithmetic Operators mới như:
X += 4 tương đương với X = X + 4
Mess &= " text" tương đương với Mess = Mess & " text"
• VB.NET có cả Byte và Char data type Byte với trị số 0-255 có thể được dùng cho ASCII character Char với trị số 0-65535 của 2 bytes được dùng cho Unicode
• String trong VB.NET khác với String trong VB6 rất nhiều vì nó đến từ System.String class Ý niệm fixed-length string của VB6 như khai báo Dim MyString as string * 30
đã bị dẹp bỏ
• Option Strict bắt buộc ta phải tự mình convert data type chớ VB.NET không làm dùm như trong VB6
Trang 22• Những control tàn hình như Timer, Menu (không còn dùng Menu Editor như trong VB6 nữa) được chứa riêng trong Component tray (mâm)
• VB.NET không có variant data type nhưng thay vào đó là Object data type
• Tất cả array đều zero-based VB.NET dùng block-level scope, do đó một variable declared trong một IF THEN END IF block sẽ biến mất khi qua khỏi END IF
• Short Circuit trong IF THEN Statement
Trong VB6, nếu ta viết:
Dim myInt as Integer
myInt = 0
If (myInt <> 0) and (17 \ myInt < 5 ) then
Thì sẽ bị Division by Zero error, vì mặc dầu phần (myInt <>0) là False, nhưng VB6 vẫn tiếp tục tính phần (17\myInt<5)
• Trong VB.NET, khi (myInt <>0) là False thì nó không tính thêm nữa Ðặc tính nầy gọi là Short Circuit (đi tắt)
• Thêm vào Collection và Dictionary class sẽ có ArrayList, BitArray, Hashtable, ObjectList, Queue, SortedList, Stack và StringCollection
• Không còn Set statement cho Object Trong VB6 ta có thể viết:
Set x = New Product
Trang 23Nếu trong VB6 ta viết:
Private _description as String
Public Property Let Description (Value As String)
Private _description As String
Public Property Description() As String
• Bây giờ nếu Property là ReadOnly hay WriteOnly ta sẽ viết:
Public ReadOnly Property Age() As Integer
Get
Age = 3
End Get
End Property
Private _data As Integer
Public WriteOnly Property Data() As Integer
Set
_data = Value
End Set
End Property
Trang 24• Có thể dùng Reserved Word làm Procedure Name bằng cách để nó giữa ngoặc vuông, thí dụ như:
Public Function [Compare] (ByVal v1 as Integer, ByVal v2 as Integer)
as Boolean
• Dùng Structure TRY CATCH FINALLY END TRY để xử lý error
Thí dụ như trong bài toán chia dưới đây, nếu bị Division by 0 error thì ta
2.3 Những khác biệt giữa VB.NET với VB6
VB.NET, còn gọi là VB7, chẳng qua là C# viết theo lối Visual Basic Nay
VB7 đã hoàn toàn là Object Oriented, tức là cho ta dùng lại (reuse)
classes/forms theo cách thừa kế thật thoải mái, nên nó khác VB6 nhiều lắm Dầu vậy, đối với VB6 programmers học VB.NET không khó Lý do là VB.NET
không cho thêm nhiều từ mới (reserved words) Nói chung các ý niệm mới
trong VB.NET đều dễ lĩnh hội, nhất là khi đem ra áp dụng cách thực tế Đó là
nhờ Microsoft vẫn giữ nguyên tắc dấu và làm sẵn (của VB6) những gì rắc rối
phía sau sân khấu, để ta có thể tập trung vào việc tìm kiếm một giải pháp, thay
vì quá bận tâm vào cách thức làm một việc gì Chính nguyên tắc ấy đã giúp Microsoft chiêu mộ được 3 triệu VB6 programmers trên khắp thế giới VB.NET cống hiến cho VB programmers một công cụ rất hữu hiệu để dùng cho mọi hoàn
Trang 25cảnh, từ database, desktop, distributed, internet cho đến real-time hay mobile (pocket PC)
Những ưu điểm (features) của VB.NET đến từ chức năng của.NET
Framework Nó mang đến phương tiện lập trình cho mạng cách Object
Oriented như XML, Remoting, Streaming, Serialisation, Threading v v Những thứ nầy tuy lạ nhưng không khó học, ngược lại sẽ tiết kiệm rất nhiều thì giờ Mặc dầu VB6 là một ngôn ngữ lập trình trưởng thành và hiệu năng, chắc chắn hãy còn tồn tại trong nhiều năm nữa, nhưng học thêm VB.NET là một đầu
tư tương đối ít tốn kém và đảm bảo huê lợi gấp bao nhiêu lần trong hàng thập niên tới
Trong bài nầy ta sẽ bàn về những điểm khác nhau giữa VB6 và VB.NET
từ quan điểm ngôn ngữ lập trình Trong một bài khác ta sẽ bàn về những chức năng Đối tượng (Object Oriented) của VB.NET
2.4 Namespaces
Namespaces là một cách đặt tên để giúp sắp đặt các Classes ta dùng trong
program một cách thứ tự hầu dễ tìm kiếm chúng Tất cả code trong.NET, viết bằng VB.NET, C# hay ngôn ngữ nào khác, đều được chứa trong một namespace Điểm nầy cũng áp dụng cho code trong.NET system class libraries Chẳng hạn, các classes của WinForms đều nằm trong System.Windows.Forms namespace Và các classes dùng cho collections như Queue, Stack, Hashtable v v đều nằm trong System Collections namespace
Tất cả code ta viết trong program của mình cũng đều nằm trong các namespaces Trước đây trong VB6, mỗi khi nhắc đến một Class trong một COM
tên CompName ta viết CompName.classname (còn gọi là PROGID), tức là
cũng dùng một dạng namespace
Tuy nhiên phương pháp nầy có một vài giới hạn:
• Địa chỉ của class bị buộc cứng vào component đang chứa nó
Trang 26• Những classes không nằm trong một COM component thì không có
"namespace"
• Cách gọi tên PROGID chỉ có một bậc thôi, không có bậc con, bậc cháu
• Tên của Component luôn luôn có hiệu lực trên khắp cả computer
Namespaces trong.NET khắc phục được mọi giới hạn nói trên trong VB6
Nhiều assemblies có thể nằm trong cùng một namespace, nghĩa là classes khai
báo trong các components khác nhau có thể có chung một namespace Điều nầy cũng áp dụng xuyên qua các ngôn ngữ, giúp cho một class viết trong VB.NET
có thể nằm trong cùng một namespace với một class viết trong C#, hơn nữa, trong một assembly có thể có nhiều namespaces, dù rằng thông thường ta chỉ dùng một namespace duy nhất cho tất cả các classes trong ấy
Theo mặc định, tên của project được dùng làm namespace Nếu bạn right
click lên project name NETListbox trong Solution Explorer của program Demo, rồi chọn Properties trong popup menu, IDE sẽ hiển thị Property Pages dialog
Namespaces có thể được phân chia thứ bậc giống như Folders trong một File Directory Nó sẽ giúp user sắp đặt các classes theo đúng nhóm cho trong sáng và dễ đọc Thí dụ bạn đang viết một program cho một hảng sản xuất, bạn
sẽ dùng namespace NhàSảnXuất ở root level Bên trong namespace ấy bạn sẽ
tạo thêm các nhánh của chương trình như:
vì khi ta viết tên của một class với cả namespace của nó thì có thể phân biệt với một class khác với cùng tên
Trang 272.5 Local và Global Namespaces
Khác với COM components với "namespace" của chúng áp dụng cho khắp cả computer, namespaces của.NET thông thường là Local, chỉ có application program của nó thấy mà thôi NET cũng hổ trợ Global namespace, nhưng phải được ký tên (digitally signed) và đăng ký với.NET runtime để chứa
nó trong global assembly cache
Dùng Namespaces
Ta có thể dùng namespaces bằng cách nói thẳng ra (explicitly) với nguyên tên (Direct Addressing) hay hàm ý (implicitly) với Import keyword Nhưng điều tiên quyết là ta phải reference cái assembly chứa namespace mà ta muốn dùng
Ta thực hiện việc ấy với Menu command Project | Add References Khi Add References dialog hiện ra, chọn Tab.NET cho standard.NET components hay Tab Projects cho DLL của một.NET project khác, highlight DLL bạn muốn rồi click Select button, đoạn click OK
Chẳng hạn ta muốn read và write từ stdio (cái console input/output stream) Cái namespace ta cần sẽ là System.Console Trong cách Direct Addressing ta sẽ code như sau để viết hàng chữ "Chào thế giới":
System.Console.WriteLine ("Hello world!")
Nếu ta dùng Import keyword bằng cách nhét vào câu Imports System.Console ở đầu code module, ta có thể code gọn hơn:
WriteLine ("Hello world!")
Dưới đây là một số namespaces thông dụng:
Namespace Chức năng Classes điển hình
System.IO Đọc/Viết files và các
Trang 28System.Collection Tạo và quản lý các loại
collections
ArrayList, BitArray, Queue, Stack, HashTable
System.Math Tính toán Sqrt, Cos, Log, Min
System.Diagnostics Debug Debug, Trace
System.XML
Làm việc với XML, Document Object Model
XMLDocument, XMLElement, XMLReader, XMLWriter
System.Security Cho phép kiểm soát an
ninh Cryptography, Permission, PolicyAliasing Namespaces (dùng bí danh)
Khi hai namespaces trùng tên, ta phải dùng nguyên tên (kể cả gốc tích) để phân biệt chúng Điển hình là khi ta dùng những namespaces liên hệ đến VB6 như Microsoft.Visualbasic Thay vì code:
' Root Namespace là NhàSảnXuất
Trang 29Một thay đổi lớn cho Data Type của VB.NET, là những variables dùng Data Type địa phương như Integer, Single, Boolean,.v.v đều là những Objects Chúng đều được derived (xuất phát) từ Class căn bản nhất tên Object trong VB.NET
Trong.NET, Integer có bốn loại: Byte (8 bits, không có dấu, tức là từ 0 đến 255), Short (16 bits, có dấu cộng trừ, tức là từ -32768 đến 32767), Integer (32 bits, có dấu) và Long (64 bits, có dấu) Như vậy Integer bây giờ tương đương với Long trong VB6, và Long bây giờ lớn gấp đôi trong VB6
Floating-Point Division (Chia số dấu phảy động)
Việc chia số dấu phảy động (Single, Double) trong VB.NET được làm theo đúng tiêu chuẩn của IEEE Do đó nếu ta viết code như sau:
Dim dValueA As Double
Dim dValueB As Double
Dim dValueA As Double
Dim dValueB As Double
Trang 30để cho thật chính xác Hể càng nhiều digits nằm bên phải dấu chấm thì tầm trị số của Decimal càng nhỏ hơn
về String của VB.NET trong một bài riêng
Ý niệm fixed-length (có chiều dài nhất định) String trong VB6 không còn dùng nữa Do đó ta không thể declare:
Dim myString as String * 25
Object thay thế Variant
Một trong những data types linh động, hiệu năng và nguy hiểm trong VB6
là Variant Một variable thuộc data type Variant có thể chứa gần như thứ gì cũng được (trừ fixed-length string), nó tự động thích nghi bên trong để chứa trị số mới Cái giá phải trả cho sự linh động ấy là program chạy chậm và dễ có bugs tạo ra bởi sự biến đổi từ data loại nầy qua loại khác không theo dự tính của ta
VB.NET thay thế Variant bằng Object Vì trên phương diện kỹ thuật tất
cả data types trong.NET đều là Object nên, giống như Variant, Object có thể chứa đủ thứ Nói chung, dầu Object giống như Variant, nhưng trong.NET ta phải nói rõ ra (explicitly) mình muốn làm gì Ta thử xem một thí dụ code trong VB6 như sau:
Private Sub Button1_Click()
Dim X1 As Variant
Trang 31Dim X2 As Variant
X1 = "24.7"
X2 = 5
Debug.Print X1 + X2 ' Cộng hai số với operator +
Debug.Print X1 & X2 ' Ghép hai strings lại với operator &
Trang 32Dim X As Object
X = New Product()
' Treat X like an actual product
CType(X, Product).Description = "Soft Drink"
Console.WriteLine(CType(X, Product).Description)
End Sub
Mặc dù X được instantiated như một Product, nó vẫn được xem như một Object variable Do đó mỗi khi muốn dùng nó như một Product ta phải nhờ đến CType Từ chuyên môn trong programming gọi đó là Type Casting
Thay đổi trong cách khai báo Variables
Khai báo nhiều Variables
Trong VB6 ta có thể Declare nhiều variables trên cùng một hàng như:Dim i, j, k as Integer
Kết quả là chỉ có k là Integer, còn i và j là Variant (có thể đó là điều bạn không ngờ) Trong VB.NET thì cả ba i, j và k đều là Integer, và như thế hợp lý hơn
Khai báo trị số khởi đầu
Trong VB6, sau khi declare variable ta thường cho nó một trị số khởi đầu như:
Dim X as Integer
X = 12
Bây giờ trong VB.NET ta có thể gọp chung hai statements trên lại như sau: Dim X as Integer = 12
Khai báo Constants
Khi khai báo Constants trong VB.NET ta phải khai rõ Data type của nó là String, Integer, Boolean v v.:
Public Const myConstantString as String = "happy"
Public Const maxStudent as Integer = 30
Dim As New
Trong VB6 ta được khuyên không nên code:
Trang 33Dim X as New Customer
vì VB6 không instantiate một Object Customer cho đến khi X được dùng đến - chuyện nầy rất nguy hiểm vì có thể tạo ra bug mà ta không ngờ
Trong VB.NET ta có thể yên tâm code:
Dim X as New Customer()
vì statement nói trên lập tức tạo ra một Object Customer
Khai báo Variable trong Scope của Block
Trong thí dụ dưới đây, variable X được declared trong một IF THEN END IF block Khi execution ra khỏi IF block ấy, X sẽ bị hủy diệt
Do đó, VB.NET sẽ than phiền là X undefined vì nó không thấy X bên ngoài IF block Luật nầy cũng áp dụng cho những Blocks khác như DO LOOP, WHILE END WHILE, FOR NEXT, v v
Private Sub Button1_Click(ByVal sender As System Object, ByVal e As System.EventArgs) Handles Button1.Click
Trang 34mỗi iteration ta muốn instantiate một Object mới Khi ấy ta cần Declare một Object variable, instantiate Object, rồi chứa nó vào một collection chẳng hạn
Protected Protected Class
ClassForMyHeirs
Cho phép các classes con, cháu được dùng
Ta chỉ có thể dùng Protected ở mức độ Class
Friend
Friend StringForThisProject
As Integer
Cho phép code trong cùng module, class, hay structure được dùng Lưu ý là Dim coi như tương đương với Private, do đó ta nên dùng Private cho dễ đọc
Ngoài ra, nhớ là nếu container (Object chứa) của một Variable/Class/Structure là Private thì dù ta có khai báo một Variable/Class/Structure nằm bên trong
container là Public ta cũng không thấy nó từ bên ngoài
Thay đổi trong Array
Array index từ 0
Trong VB.NET không có Option Base và mọi Array đều có index bắt đầu
từ 0 Khi bạn khai báo một array như:
Trang 35Dim myArray(10) as integer
Kết quả là một array có 11 elements và index từ 0 đến 10 UBound của array nầy là 10 và LBound của tất cả arrays trong VB.NET đều là 0
Khai báo Array với những trị số khởi đầu
Bạn có thể khai báo Array với những trị số khởi đầu như sau:
Dim myArray() as Integer = { 1, 5, 8, 16 } ' Note the curly brackets
Statement làm hai chuyện: quyết định size của array và cho các elements trị số khởi đầu Để dùng feature nầy, bạn không được nói rõ size của array, mà
để cho program tự tính
ReDim Preserve
Trong VB.NET bạn cũng có thể tiếp tục dùng Preserve keyword để giữ nguyên trị số của các elements trong một array khi bạn ReDim nó Tuy nhiên có một giới hạn cho array với hơn một dimension - bạn chỉ có thể resize dimention cuối (bên phải), nên những hàng code sau đây hợp lệ:
Dim myArray(, ) As String
ReDim myArray(5, 5)
ReDim Preserve myArray(5, 8)
Thay đổi trong User-Defined Type
Ý niệm User-Defined Type (UDT) rất tiện cho ta gom các mảnh data liên
hệ lại thành một data type có cấu trúc Trong VB6 ta dùng nó như sau:
Public Type UStudent
Public Structure UStudent
Public FullName as String
Public Age as Integer
Trang 36Lưu ý các Structure Members (như FullName, Age ) cần phải được Declared với keyword Dim, Public, Private hay Friend, nhưng không thể dùng Protected vì Structure không thể Inherit từ một Structure khác Sở dĩ, có dùng Private là vì bên trong Structure có thể có Property, Sub/Function v v
Thay đổi trong Collections
VB6 hổ trợ Collection và sau nầy Windows Scripting Host Library cho ta collection kiểu Dictionary VB.NET cho ta một thành phần collection rất hùng hậu trong Namespace System.Collections Vì Collection là một trong những công cụ rất thông dụng và hiệu năng trong VB.NET nên ta sẽ có một bài dành riêng cho collection sau nầy
Dưới đây là danh sách các collections ta sẽ dùng thường xuyên:
Collection Chức năng
ArrayList Dynamic Array tự động lớn lên khi elements được bỏ vào
BitArray Array chứa trị số Boolean (True/False)
HashTable Collection chứa những cặp key-value data, cho ta dùng làm tự điển
Queue Chứa một FIFO (First In, First Out) structure.Element có thể là bất
cứ Object loại nào
Stack Chứa một LIFO (Last In, First Out) structure
SortedList Chứa một danh sách những cặp key-value data được sắp theo thứ tự
Arithmetic Operators mới
VB.NET cho ta thêm cách viết Arithmetic Operator mới mà C programmers quen từ lâu nay
X += 4 tương đương với X = X + 4
Mess &= " text" tương đương với Mess = Mess & " text"
Arithmetic Operation Trong VB6 Cách viết tắc mới
Trang 37Nhân X = X * 7 X *= 7
Ghép Strings X = X & "more text" X &= "more text"
Ta vẫn có thể tiếp tục dùng cách viết trong VB6, nhưng bây giờ có thêm một cách viết gọn hơn
Short Circuit trong IF THEN Statement
Trong VB6, nếu ta viết:
Dim myInt as Integer
myInt = 0
If (myInt <> 0) And (17 \ myInt < 5 ) Then
Thì sẽ bị Division by Zero error, vì mặc dầu phần (myInt <>0) là False, nhưng VB6 vẫn tiếp tục tính phần (17 \ myInt < 5 ), và tạo ra error vì 17 chia cho một
số 0
Trong vài ngôn ngữ lập trình khác, khi (myInt <>0) là False thì nó không tính thêm nữa, tức là nó nói rằng khi một phần của AND là False thì nhất định kết quả của Logical Statement trong IF phải là False Ðặc tính nầy gọi là Short-Circuit (đi tắt)
Nếu ta dùng code nói trên trong VB.NET, nó vẫn cho Division by Zero error giống như VB6 Tuy nhiên, nếu ta muốn dùng đặc tính Short-Circuit thì ta chỉ cần thay thế chữ And bằng AndAlso như sau:
Dim myInt as Integer
myInt = 0
If (myInt <> 0) AndAlso (17 \ myInt < 5 ) Then
Short-Circuit cũng áp dụng cho Logical OR khi ta thay thế chữ Or bằng OrElse
để nói rằng khi phần đầu của OR là True thì nhất định kết quả của Logical
Statement trong IF phải là True
Trang 38Bây giờ ta không cần phải nhớ dùng chữ Set khi nói đến Object
Thay đổi trong cách viết Property routines
Dùng một Property duy nhất
Nếu trong VB6 ta viết:
Private mdescription as String
Public Property Let Description (Value As String)
Trong VB.NET Let và Get đuợc hợp lại trong một Property routine duy nhất và
ta lại dùng chữ Set thay cho chữ Let (mặc dầu chữ Set không còn dùng cho
Object như mới nói ở trên) như sau:
Private mdescription As String
Public Property Description() As String
Set (ByVal Value As String)
Trang 39End Property
ReadOnly và WriteOnly property
Bây giờ nếu Property là ReadOnly ta sẽ viết:
Public ReadOnly Property Age() As Integer
Get
Age = 3
End Get
End Property
hay WriteOnly ta sẽ viết:
Private _data As Integer
Public WriteOnly Property Data() As Integer
Set (ByVal Value As String)
_data = Value
End Set
End Property
Default Properties
Ta dùng Default keyword để tạo ra Default Property như sau:
Default Public Property Item(ByVal Index As Integer) as String
VB.NET bắt buộc ta phải ít nhất một parameter cho Default Property
Dùng Reserved Word làm Procedure Name
Trong VB.NET ta có thể dùng Reserved Word làm Procedure Name bằng cách
để nó giữa ngoặc vuông Giả tỉ ta muốn dùng chữ Compare làm tên một
Function, ta sẽ viết như sau:
Public Function [Compare] (ByVal v1 As Integer, ByVal v2 As Integer) As Boolean
Structured Error Handling
TRY CATCH FINALLY
VB.NET cho ta Structure TRY CATCH FINALLY END TRY để xử lý
error Thí dụ như trong bài toán chia dưới đây, nếu bị Division by 0 error thì ta
sẽ cho kết quả bằng 0 Dù có error hay không, program vẫn hiển thị kết quả
Trang 40trong Output Window qua statement Console WriteLine( result) trong phần
Nếu muốn nhảy ra khỏi Try Structure bất cứ lúc nào ta có thể dùng Exit Try,
Những cách CATCH error
Ta có thể dùng Catch giống như Select Case để có một cách xử lý cho mỗi
error:
Try
' Main code goes here
Catch When Err.Number=5
' handle Error 5
Catch
' handle other errors
End Try