Tự Học
Microsoft ASP.NET

 

Vovisoft Home Page    Bài số 5  Bài số 7 ASP.NET Course Index

Bài 06

ASP.NET và VB.NET


Cùng góp bàn tay thương yêu nhau rồi
Ngô khoai hai mùa ngát một niềm vui chung vui
Cho thơm hương đời lúa vàng tình ơ
Ngày mai hạnh phúc nơi nơi reo cười
Quê hương thôi đau sầu ngăn sông núi cách chia
Ta đem yêu thương về cho phương Bắc
(Khúc Hát Ân Tình - Xuân Tiên)
 

Ta đã biết ASP.NET nằm trong cấu trúc nền của .NET framework và dùng .NET programming language tỷ như VB.NET (một trong 25 ngôn ngữ lập trình .NET hiện nay) để phát triển trang Web, do đó ta cũng cần biết sơ lượt về .NET framework cùng ngôn ngữ lập trình VB.NET dùng cho các trang ASP.NET.

Chi tiết phương pháp lập trình theo khuynh hướng đối tượng (Object Oriented Programming) và VB.NET, xin tham khảo các bài viết về OOP và Visual Basic.NET do thầy Lê Ðức Hồng soạn và trình bày.

Trong bài 'ASP.NET và VB.NET', ta sẽ lần lượt tìm hiểu:

  • Giới thiệu tổng quát về .NET Framework
  • Sơ lượt về ngôn ngữ lập trình VB.NET và cú pháp
  • Functions và SubRoutines
  • Classes
  • Phương pháp (method) lập trình tổng quát

.NET Framework

Một cách tổng quát, .NET Framework là kiểu mẫu lập trình cách mạng cho tất cả những gì liên quan đến nền Windows.

Nhìn lại hơn 10 năm, Microsoft đã từng bước một cải tiến nền Windows (Windows platform) hết sức nghiêm túc, đạt nhiều thành công rực rỡ với những API (Application Programming Interface) cho mọi ứng dụng, với hàng loạt công cụ phát triển và lập trình (developer tools) hết sức thuận lợi cho các Kỹ Sư Tin Học cũng như cho những ai yêu thích các sản phẩm của Microsoft. Ngoài ra, ta còn chứng kiến sự xuất hiện của COM, rồi DCOM, COM+ với mục tiêu tái sử dụng các nguồn mã hay nhu liệu tương ứng. Thêm nữa, nào là ODBC (Open Database Connection), DAO, OLEDB tới ADO (Active Data Object) với rất nhiều phiên bản (versions) cho việc nối kết các cơ sở dữ liệu (Database) gồm đủ loại đủ cỡ. Về phương diện mạng năng động (dynamic web sites), ta có nhiều phiên bản ASP cổ điển hay về ngôn ngữ lập trình với C++, J++, Visual Basic cùng các ngôn ngữ lập trình scripting như VBScript, ...

Nhưng ...

Mặc dù, các công cụ cũng như các ngôn ngữ lập trình với nhiều phiên bản khác nhau như vừa nêu trên, yểm trợ những gì công nghệ thông tin đang đòi hỏi - chúng càng lúc càng trở nên phức tạp và rắc rối cho các Chuyên Gia hay Kỹ Sư Tin Học, không những không theo kịp đà tiến triển hiện nay mà còn không tạo được một nền tảng hùng mạnh cho việc phát triển hay đáp ứng sự thay đổi nhanh chóng cuả công nghệ thông tin cho kỹ nghệ, thương mại, đời sống trong tương lai.

Chẳng hạn một Kỹ Sư Tin Học giàu kinh nghiệm muốn học về COM - 1 phương pháp hết sức hùng mạnh để gói ghém các nguồn mã cho việc tái sử dụng - cần tối thiểu 6 tháng hay cả năm để làm quen hay nắm vững. Còn nếu muốn học về DCOM hay COM+, ta phải biết COM trước. Ðó cũng là lý do tại sao nhiều Kỹ Sư Tin Học chán nãn vì quá nhiều vá víu hoặc nhiều thêm thắt cho các ứng dụng mà ngay từ thữa ... 'hồng hoang' đã phác thảo một cách nghèo nàn ảnh hưởng từ hoàn cảnh xã hội và công nghệ lúc bấy giờ.

Microsoft biết điều đó nên xoá ... 'cờ làm lại từ đầu'. Việc đầu tư vào .NET Framework với mọi tài nguyên mà Microsoft (hay ... trên trái đất này) có được, cho thấy sự xuất hiện của .NET Framework không phải là chuyện tầm ... 'cở' đâu, ủa quên, ... 'tầm thường' đâu. 

.NET Framework phác thảo bắt đầu từ con số 0 với tham vọng bao trùm đủ mọi thứ và cũng không quên ... nâng đỡ 'bạn xưa' nên các nguồn mã ... 'cũ kỷ' của ta vẫn được yểm trợ. Không những thế mà Microsoft đã và còn lắng nghe mọi nguyện vọng của .. các Kỹ Sư Tin Học hay của ta trong việc kế hoạch và phác thảo cấu trúc nền .NET qua đó đem lại nhiều lợi ích thiết thực cho người lập trình hay phát triển và tạo vận hội mới phát triển nền Công Nghệ Tin Học.

Việc tường trình về .NET Framework làm ta nhớ lại sự xuất hiện của Linux trước đây. Nhìn lại 10 năm vừa qua, Linus Torvalds (cha đẻ Linux) cũng đã quá chán nãn với sự giới hạn và khuyết điểm của Unix mà viết lại Operating System này từ con số 0 thay vì cố gắng sửa đổi hay vá víu. Việc làm lại từ đầy đó chỉ với mục đích là theo kịp các đòi hỏi, nếu không muốn nói là vạch hướng đi cho tương lai Tin Học. Nếu ta ví sự phổ thông và nổi tiếng của nền Windows với Microsoft (Bill Gates) như là phái Thiếu Lâm thì Linux sẽ là 'Thái Cực Quyền' của phái Võ Ðang với Trương Tam Phong (Linus Torvalds) và mặc dù chỉ chiếm 0.25% thị trường desktop trên thế giới (trích Next Handbooks - Operating in Linux by Paul Robinson and Dan Corkery - 2002) nhưng cũng đã góp phần làm cho Công Nghệ Thông Tin thêm phần đặc sắc và muôn màu muôn vẻ. Mỗi system đều có cái hay và dỡ khác nhau khó lòng so sánh tỷ như tuy Linux 'free OS' (và Open Source) ràng buộc bởi GPL (GNU Public Licence by Richard Stallman) nhưng gần đây lại chia thành nhiều phe nhóm - Nam Tông (United Linux) gồm có SuSe, Caldera, Connectiva and Turbo Linux, ... và Bắc Tông (Unbreakable Linux) với Red Hat, Oracle, ... nên đủ thứ phiên bản Linux khác nhau có thể làm ta ... 'ngất ngư' chẳng biết theo ai, còn Windows (Close Source) với .NET Framework rất hùng mạnh nhưng ... lại 'tốn tiền', nếu có nhiều ứng dụng 'free' tỷ như Web Matrix ... 'cho không biếu không' thì tốt cho cộng đồng .NET biết bao nhiêu.

Tuy nhiên, ở đây không phải diễn đàn để ... 'Hoa Sơn Luận Kiếm' giữa Windows, Linux hoặc MAC OS nên ta gác lại để chỉ bàn về .NET Framework và các lợi ích của nó. Thật sự, mỗi nền đều có cái hay của nó và là những bông hoa đẹp, hiếm quý trong vườn Tin Học mà ta luôn luôn trân trọng - tất cả đều là sản phẩm trí óc tuyệt vời của con người, nếu bạn có khã năng và thời giờ thì ... học càng nhiều càng tốt.

Lợi ích của .NET Framework

Ở đây, ta không kể xiết hay đào sâu chi tiết lợi ích của .NET Framework mà chỉ tóm lược vài điểm chính yếu sau:

  • Mọi chuyện ... 'trên trời dưới đất' mà ta muốn thực hiện trên nền Windows, tỷ như data access, windowing, nối mạng hay ngay cả mọi công dụng đa dạng của Win32 API (Application Programming Interface) đều có thể vận dụng dễ dàng qua kiểu mẫu đối tượng (objects) rất đơn giản (simple object model).

  • Ngôn ngữ lập trình VB.NET đã được hiện đại hóa, bao gồm nhiều classes và mọi đặc trưng (features) của 1 ngôn ngữ lập trình kiểu OOP, không thua kém gì C++, J++ hay C#, ...

  • Việc quản lý memory được nâng cấp và tinh vi hơn nhằm bảo đảm các ứng dụng bị té hay cư xử tệ bạt (badly behaved component or application) không ảnh hưỡng gì đến các ứng dụng khác.

  • ASP.NET được dùng để thay thế ASP, đồng thời cung cấp các trang Web được biên dịch giúp tiến trình xử lý các yêu cầu từ Client browser hiệu quả hơn. Hơn nữa, còn bao gồm nhiều thành phần soạn sẵn (pre-written components) gọi là Server Control dùng trong các HTML Form và giao diện (user interface) làm việc phát triển mạng thêm dễ dàng và đầy hứng thú.

  • Các ngôn ngữ lập trình được phác thảo để làm việc gần nhau hơn, do đó nguồn mã của VB.NET, C++, C#, ... có thể sử dụng trộn lẫn với nhau rất thoải mái, tỷ như ta có thể viết mã cho 1 class với VB.NET rồi kế thừa 1 class khác mà mã là C# hay C++, ... sau đó vẫn 'debug' ngon lành giữa các ngôn ngữ lập trình khác nhau đó.

  • Thành phần (components) được gói kỹ trong 1 đơn vị gọi là assembly có thể tự xác minh lý lịch và công dụng làm việc bố trí hay triển khai rất dễ dàng.

Phương pháp làm việc của .NET Framework

Ðiều kỳ thú nhất trong cấu trúc .NET Framework là các nguồn mã của VB.NET hay C# không biên dịch thành mã thi hành gốc (native executable code) mà lại qua trung gian một ngôn ngữ khác gọi là IL (Intermediate Language) trước khi chạy thật sự. Nguồn mã có thể biên dịch thành IL đó còn được gọi là managed code, điều này khiến cho các ngôn ngữ lập trình của .NET hoạt động (hay tác động) qua lại (hổ tương - interoperation) với nhau, cho phép ta vận dụng mọi đặc trưng của .NET mà không cần phải viết lại các nguồn mã dùng ngôn ngữ lập trình khác.

Nguyên tắc của IL cũng tương tự như Java, nhưng khác ở chổ Java là cross-platform independence còn .NET là cross-language independence. Cũng cần phải nhắc ở đây, Microsoft vẫn mở rộng vòng tay cho việc phát triển .NET trên các nền (platform) khác trong tương lai.

Sơ Lược về VB.NET

VB.NET được dùng để tạo ra các trang Web đầy năng động với tất cả khả năng của ASP.NET (hay của .NET Framework). Ở đây, ta tìm hiểu tổng quát về cú pháp, cấu trúc và phương pháp lập trình với VB.NET có liên hệ ít nhiều đến các trang ASP.NET và hy vọng gặt hái được vài khái niệm cơ bản để việc lập trình xuông sẽ hơn.

Phần này, ta sẽ sơ lược qua các vần đề sau:

  • Ðại khái về VB.NET
  • Variables và Arrays
  • Operators
  • Các điều kiện (conditional), looping và branching logic
  • Functions và Subroutines
  • Event Handler
  • Classes
  • Vài ứng dụng ích lợi thường dùng

Ðại khái về VB.NET

VB.NET là một trong 25 ngôn ngữ lập trình của .NET được yểm trợ bởi .NET Framework và CLR. VB.NET khác hẳn VB6 và thật sự chuyển mình thành 1 ngôn ngữ lập trình OOL chính yếu không khác gì với mọi ngôn ngữ lập trình khác tỷ như C#, C++, J++, ... trong môi trường xây dựng đủ mọi ứng dụng cho nền Windows và quan trọng hơn cả là việc học VB.NET dễ dàng hơn nhiều (its learning curve is not very steep). Do đó, VB.NET được chọn là ngôn ngữ lập trình cho các trang ASP.NET của khóa tự học này. Nếu bạn thích, bạn có thể dùng C# hay C++ thay vì VB.NET cho mọi bài tập trong khóa, chuyện đổi qua đổi lại giữa các ngôn ngữ lập trình chỉ là chuyện ... nhỏ, vì sự khác biệt phần lớn là về cú pháp (syntax) chứ nguyên tắc và cấu trúc lập trình thì giống y chang. Nhớ là dù ta dùng bất cứ ngôn ngữ lập trình nào, khi biên dịch vẫn phải qua ngôn ngữ trung gian Intermediate Language (IL) và quản lý bởi CLR.

Variables và Arrays

Variables

Variables là từ tổng quát gọi là biến số dùng lưu trữ dữ kiện (data) trong bộ nhớ (memory) của máy vi tính. Ta phải tuyên bố (declare) biến số trước khi dùng với keyword Dim tỷ như declare myVariable với loại (Data Type) String:

'Kiểu explicit declaration - VB.NET được báo cho biết ta muốn lưu trữ 1 string trong memory location đó
Dim myVariable As String

Data Types chia ra làm 5 categories gồm 10 loại cơ bản gọi là primitive types:

Type Category Description
 Byte  Integers  1 byte (được biết như System.Int)
 Short  Integers  2 bytes (System.Int16)
 Integer  Integers  4 bytes (System.Int32)
 Long  Integers  8 bytes (System.Int64)
 Single  Floating-ppints  4 bytes với decimal point (System.Single)
 Double  Floating-ppints  8 bytes (System.Doublel)
 Decimal  Floating-ppints  12 bytes (System.Decimal)
 Char  String  single Unicode character (System.Char)
 Date  Dates  ngày giờ (Ssytem.DateTime)
 Boolean  Boolean  Có/Không hay Ðúng/Sai , True/False (System.Boolean)

Arrays

Arrays là 1 tập hợp các biến số được liên hệ riêng biệt qua chỉ số (index) của Arrays.

Nhớ là Arrays dùng trong VB.NET bắt đầu với index bằng số 0 - nghĩa là món hàng (item) đầu tiên được lưu trữ ở index 0, từ đó, suy ra chỉ số (index) món hàng sau cùng sẽ là tổng số các món hàng trừ đi một.

Mọi biến số trong Array phải cùng loại dữ kiện (same data type), không thể trộn lẫn nhiều loại khác nhau.

Array được tuyên bố (declare) như thí dụ sau đây:

'Tuyên bố array gồm 9 phần tử (hay thành phần - elements) thuộc loại Integer
Dim myArray(9) As Integer

'Tuyên bố array gồm 12 phần tử với giá trị mặc định (default) thuộc loại String
Dim yourArray( ) As String = { "Tý", "Sữu", "Dần", "Mão", "Thìn", Tỵ", _
                                             "Ngọ", "Mùi", "Thân", "Dậu", "Tuất", "Hợi" }

Operators (Ký hiệu Toán)

Operators là các ký hiệu dùng để thi hành 1 công việc thuộc phạm vi Toán Học, tỷ như dấu = dùng để ấn định (assign) 1 giá trị chẳng hạn như:

strSkills = "Thái Cực Quyền"

Ðể dễ dàng trong việc vận dụng các dấu Toán Học này, say đây là bảng liệt kê:

Công dụng (Function) Operators (Các dấu Toán Học)
 Exponentiation  ^
 Unary negation (tỷ như -9)   +, -
 Multiplication, division  *, \
 Division by (tỷ như 6/2 = 3)   /
 Modulus (tỷ như 6 Mod 4 = 2)  Mod
 Addition, Substraction  +, -
 Bitwise NOT, AND, OR và XOR  BitNot, BitAnd, BitOr, BitXor
 Concatenation (for string)  &, +
 Equal to, not equal to, less than, greater than  =, <>, <, >
 Less than or equal to, greater than or equal to  <=, >=
 Relational  TypeOf ... Is, Is, Like
 Assigment  =, ^=, *=, /=, =, +=, -=, &=
 Logical NOT, AND, OR và XOR  NOT, AND, OR, XOR

Ðiều kiện (conditional), looping và branching logic

Ta sẽ tham khảo cú pháp 3 logic sau:

  • Conditional Logic
  • Looping Logic
  • Branching Logic

Conditional Logic

Conditional Logic cho phép ta chỉ định nguồn mã nào được thi hành tùy theo điều kiện đặt ra có phù hợp hay không. Có nhiều phương pháp (method) để quản lý conditional logic như sau:

  • Phương pháp (method) dùng If statements
  • Phương pháp (method) dùng Case statements

If statements

Tổng cộng 3 kiểu cú pháp như sau:

If (condition) Then
   (your code)
   ...
   ...
End If

Như vậy, nếu điều kiện được thoả mản (condition =  True), nguồn mã giữa If và End If sẽ được thi hành hoặc:

If (condition) Then
   (your code for condition = True)
   ...
   ...
Else
   (your code for condition = False)
   ...
   ...
End If

để thi hành nguồn mã khi condition = True hoặc False và

If (condition 1) Then
   (your code for condition 1 = True)
   ...
   ...
ElseIf (condition 2) Then
   (your code for condition 2 = True)
   ...
   ...
Else
   (ngoài ra, thi hành code ở đây - your code for condition 1 and condition 2 = False)
   ...
   ...
End If

để thi hành nguồn mã khi condition 1 = True hoặc condition 2 = True hoặc khi cả hai condition 1 và condition 2 = False.

Case statements

Case statement thường gọi là Select statement giống như trường hợp If với nhiều ElseIf nhưng Case chỉ kiểm tra một biến số và tùy theo giá trị của biến số mà đáp ứng sao cho thích hợp. Cú pháp như sau:

Select Case variable
   Case option 1
      Code for option 1
   Case option 2
      Code for option 2
   Case Else
      Code
End Select

Looping Logic

Looping logic cho phép ta tái thi hành (hay lập đi lập lại) 1 công việc nào đó cho tới khi thoả mản điều kiện đã định trước. Kiểu này gồm có 3 loại:

  • While
  • Do
  • For

While Loops

Rất tiện lợi trong trường hợp ta không biết trước phải lập đi lập lại công việc bao nhiêu lần. Như vậy, kiểu loop này cơ bản dựa trên biểu thức có điều kiện (conditional expressions) và loop tái thi hành cho đến khi điều kiện định trước trở thành False. Cú pháp của 1 While loop như sau:

While condition
   Your Code
End While

Thí dụ ta muốn bố trí 1 máy đếm (counter) từ 1 đến 9 và hiển thị (display) kết quả bằng số ở browser:

'Bố trí counter loại Integer với giá trị 1
Dim intCounter As Integer = 1

'Bố trí While loop và hiển thị (display) giá trị của counter ở browser
While
intCounter < 10
   Response.Write(intCounter & "<br>")
   intCounter += 1
End While

Ta nhận thấy khi giá trị của intCounter bằng 9, loop sẽ hiển thị (display) số 9 và sau đó cộng 1 vào intCounter thành ra 10 sẽ khiến cho điều kiện intCounter < 10 sẽ trở thành False, mã sẽ nhảy ra (exit) khỏi loop (loop exit), do đó ta chỉ thấy browser hiển thị (display) các số từ 1 đến 9 mà thôi.

Do Loops

Do loop cũng tương tự như while loop, chỉ khác ở chổ Do loop thi hành công việc trước rồi mới kiểm tra điều kiện xem có phù hợp không? Kiểu này có thể gọi là kiểu ... 'tiền trảm hậu tấu' khác với While loop là ... 'tiền tấu hậu trảm' (?). Cú pháp như sau:

'Bố trí counter loại Integer với giá trị 1
Dim intCounter As Integer = 1

'Bố trí Do loop và hiển thị (display) giá trị của counter ở browser
Do

   Response.Write(intCounter & "<br>")
   intCounter += 1
Loop While intCounter < 10

Lần này có sự khác biệt so với While loop vì Do loop hiển thị (display) giá trị của intCounter trước, cộng thêm 1 rồi mới kiểm tra điều kiện. Ta phải lưu ý thứ tự thi hành trong trường hợp này, tỷ như ta bố trí giá trị của intCounter = 10 chẳng hạn, ta thấy browser sẽ hiển thị (display) 10 trước khi loop kiểm tra điều kiện là intCounter phải nhỏ hơn (<) 10 và mã nhảy ra khỏi loop sau đó.

For Loops

Ta dùng For loop khi biết trước sẽ lập đi lập lại việc thi hành nguồn mã bao nhiêu lần. Máy đếm trong trường hợp này (tự động tăng hay giảm tùy theo cách bố trí) sẽ thông báo chính loop của nó khi nào chấm dứt. Cú pháp như sau:

For intCounter = 1 to 10
   Response.Write(intCounter & "<br>")
Next

hoặc là:

For intCounter = 10 to 1 Step -1
   Response.Write(intCounter & "<br>")
Next

For loop còn có 1 dạng khác là For each ... loop, thường dùng để vận dụng các thành phần (hay yếu tố - elements) trong 1 bộ sưu tập (collection) tỷ như Array chẳng hạn:

'Bố trí 1 Array gồm các ngày trong tuần
Dim arrayWeekDays( ) As String = {"Mon", "Tue", "Wed", "Thu", "Fri"}

For each strDay in arrayWeekDays
   Response.Write(strDay & "<br>")
Next

Thay vì dùng số như trường hợp máy đếm intCounter trong 2 dạng For loop trên, ở đây For each ... in  dùng 'strDay' để ấn định từng elements một theo thứ tự 'Mon', 'Tue', .... cho tới 'Fri' trong bộ sưu tập array mang tên 'arrayWeekDays'. Do đó, ta thấy browser sẽ hiển thị (display) 5 hàng chữ, mỗi hàng là ngày trong tuần.

Infinite Loop

Ðể ý coi chừng trong khi dùng các loop mà ta phải tự quản lý việc tăng hay giảm máy đếm cho loop, nếu không khéo, ta sẽ rơi vào ... 'mê hồn trận' không có lối thoát gọi là infinite loop. Ðây cũng là 1 trường hợp ngẫu nhiên mà lần đầu tiên bà con khám phá ra virus vì infinite loop nhanh chóng tiêu hao hay làm kiệt quệ các tài nguyên trong mạng và đôi khi có thể kéo cả mạng té bất ngờ (cause the site to crash).

Nếu ta muốn nhảy ra khỏi loop trước loop chấm dứt, ta có thể dùng keyword Exit Do (trong Do loop) hay Exit For (trong For loop), tỷ như:

'Bố trí counter loại Integer với giá trị 1
Dim intCounter As Integer = 1

'Bố trí Do loop và hiển thị (display) giá trị của counter ở browser
Do
   Response.Write(intCounter & "<br>")
   intCounter += 1
   If intCounter = 8 then
      Exit Do
   End If

Loop While intCounter < 10

hay

For intCounter = 1 to 10
   Response.Write(intCounter & "<br>")
   If intCounter = 8 then
      Exit For
   End If

Next

Branching Logic

Branching logic cho phép nguồn mã thi hành ở những hướng khác nhau, tỷ như ta muốn nguồn mã tái thi hành ở một vị thế khác và có thể được dùng đi dùng lại nhiều lần trong các tình huống khác nhau.

Tổng quát có 2 loại barnching logic:

  • Functions

  • Subroutines

Ðể phân biệt, ta để ý Functions tính toán các giá trị còn Subroutines thi hành các công việc (Functions compute values and Subroutines perform actions), như vậy Functions sẽ trả lại thông tin đã tính toán về nơi gọi Functions, ngược lại Subroutines thi hành công tác nào đó nhưng không trả lại gì hết (return nothing).

Functions

Cú pháp như sau:

Function FunctionName (Parameter1 As Type, ... , ParameterN As Type) As ReturnType
   'you code here
   Return ReturnValue
End Function

Vài VB.NET Function tiện dụng:

Sau đây là vài VB.NET Functions đã soạn sẳn trong .NET Framework ta có thể dùng trong trang Web của khóa:

Các functions về Date và Time

 Function  Phần diễn tả công dụng
 date(datetime) Trả lại 1 số từ 1 tới 31 biểu thị ngày trong tháng.
 dayofweek Trả lại 1 số từ 0 (Sunday) tới 6 (Saturday) biểu thị ngày trong tuần.
 dateDiff(dateinterval, date1,date2[,
    firstdayofweek[, dirstdayofyear]])
Trả lại 1 số diễn tả khoãng thời gian cách biệt giữa 2 ngày: ngày 1 (date1) và ngày 2 (date2). Số này có thể ở dưới dạng yyyy (year), q (quarter), m (month - tháng), y (day of year), d (day), w (weekday), ww (week), h(hour), n (minute) hay s (second).
 hour(time) Trả lại 1 số từ 0 tới 23 biểu thị giờ trong ngày.
 isdate(datetime) Trả lại 1 số Boolean xác minh datetime có phải là 1 ngày hợp lệ không?
 minute(time) Trả lại 1 số từ 0 tới 59 biểu thị phút trong giờ.
 month(datetime) Trả lại 1 số từ 1 tới 12 biểu thị tháng trong datetime.
 now( ) Trả lại dưới dạng datetime ngày giờ hiện thời
 second(time) Trả lại 1 số từ 0 tới 59 biểu thị giây trong phút.
 year(datetime) Trả lại 1 số biểu thị cho năm (có giá trị từ 1 tới 9999)

Các Functions về Toán Học

 Function  Phần diễn tả công dụng
 abs(value) Trả lại giá trị tuyệt đối (absolute) của value.
 atan(value) Trả lại số arctangent của value.
 cos(value) Trả lại số cosin của value.
 exp(value) Trả lại số exponent của value.
 fix(value) Trả lại phần integer của value, rounding up cho các số âm (negative numbers).
 hex(value) Trả lại số hexadecimal của value (base 10 to base 16).
 int(value) Trả lại phần integer của value, rounding down cho các số âm (negative numbers).
 log(value) Trả lại số nature logarithm của value.
 oct(value) Trả lại số octal của value (base 10 to base 8).
 rnd Trả lại số ngẫu nhiên.
 round(value [, dec]) Trả lại số rounds to integer or with dec (decimal places) với của value.
 sin(vlaue) Trả lại số sin của value.
 sqrt(value) Trả lại số căn 2 (squareroot) của value.
 tan(value) Trả lại số tangent của value.

Các Functions về hành chữ (Strings)

 Function  Phần diễn tả công dụng
 instr(start, ]string1, string2[, compare) Trả lại số biểu thị vị trí 1 của string 2 trong string 1, ngoài ra trả lại số 0. Compare có thể dưới dạng 0 (=BinaryCompare) hay 1 (=TextCompare).
 left(string, length) Trả lại 1 string chứa 1 số chữ (dài = length) bắt đầu từ phía bên trái của hàng chữ.
 len(string | variable) Trả lại 1 số biểu thị chiều dài của string hay tổng số bytes mà variable chứa đựng.
 mid(string, start[, length]) Trả lại 1 string chứa trong 1 string khác, bắt đầu từ vị trị start kéo dài với giá trị của length.
 replace(expression, find, replace[,
    start[, count[, compare]]])
Thay thế giá trị find trong biểu thức expression bằng giá trị replace bắt đầu cở vị trí start với số lần thay thế count. Lưu ý già trị mặc định của count là -1 - nghĩa là thay thế tất cả gì truy tìm được, compare dùng dưới dạng 0 hay 1 như trong phần instr.
 right(string, length) Trả lại 1 string chứa 1 số chữ (dài = length)  bắt đầu từ phía bên phải của hàng chữ.

Subroutines

Cú pháp như sau:

Sub SubroutineName (Parameter1 As Type, ... , ParameterN As Type)
   'you code here 
End Sub

Thí dụ subroutine Page_Load rất phổ thông mà ta thường dùng trong các trang ASP.NET :

Sub Page_Load (Obj As object, e As eventargs)
   'you code here 
End Sub

Các biến số (variables) trong ( ) gọi là thông số (parameters hay arguments), nếu họp thành 1 nhóm, ta gọi parameter list. Subroutine chuyển và vận dụng các giá trị của thông số vào bên trong subroutine để thi hành 1 công tác nào đó.

Bài tập 1:

Mục đích:

Làm quen cách viết và sử dụng parameters cho Subroutine toán nhân với 2 số chẳng hạn.

1. Chạy ứng dụng Notepad và gõ hàng mã sau:

<%@Page Language="VB" %>

<script runat="server">
   sub Page_Load(obj as object,e as eventargs)
      MultiplyNumbers(2,2)
      MultiplyNumbers(18,28)
      MultiplyNumbers(300,200)
   end sub

   sub MultiplyNumbers(intA as integer,intB as integer)
      Response.Write(intA *intB &“<br>")
   end sub
</script>

<html>
<body>
   Testing subroutines 'MultiplyNumber' completed.
</body>
</html>

2. Lưu trữ tập tin với tên multiply.aspx ở folder 'D:\Net\Vovisoft ASPNET\Bai06\Multiply' và chạy IE với URL như sau: http://cantho/VovisoftASPNET/Bai06/Multiply/Multiply.aspx

Phần ChúThích:

Ta nhận thấy khi gọi (call) 1 subroutine, ta chỉ cần dùng tên của subroutine kèm với các thông số (parameters) ta muốn gởi vào và vận dụng trong subroutine. Trong mã trên, ta gọi subroutine 'MultiplyNUmber' 3 lần, trong đó ta sẽ vận dụng các thông số vào bài toán nhân và hiển thị (display) kết quả trong browsers với đối tượng (Object) Response và phương pháp (method) Write.

Lưu ý:

Trong VB.NET và ASP.NET , ta bắt buộc dùng parentheses ( ) khi gọi các subroutines, khác với VBSCript hay VB6 không cần dùng parentheses. Nếu ta gọi subroutine MultiplyNumber theo cú pháp sau, sẽ tạo lỗi:

MultiplyNumber 2, 2

Event Handler

Nếy để ý, ta thấy 1 trong những thông số (parameters) sử dụng ở bài tập trên là thông số về sự cố (EventArgs). Trong các trang Web của ASP.NET , sự cố có thể xảy ra bất cứ lúc nào, tỷ như user nhấp mũi chuột vào 1 nút nào đó trên Form hoặc nhấp vào 1 hình ảnh, do đó ta cần chuẩn bị và tạo ra cái gọi là event handler để có thể đáp ứng lại các sự cố đó. Cú pháp của event handler giống y chang như cú pháp của subroutine, sự khác biệt là nằm ở parameters list với thông số chỉ riêng cho loại EventArgs. Khi 1 sự cố khởi động, sự cố đó sẽ tạo ra các biến số nhằm diển tả việc gì đã xảy ra và event handler sẽ dựa trên các biến số đó để phản ứng sao cho thích hợp.

Bài tập 2:

Mục đích:

Tạo 1 trang ASP.NET với nút bấm Submit và event OnClick liên hệ với Subroutine Button_Click để ... 'bắt quả tang' user vừa mới nhấp mũi chuột vào nút bấm đó.

1. Chạy ứng dụng Notepad và gõ hàng mã sau:

<%@ Page Language="VB" %>

<script runat="server">
   Sub Button_Click(obj As Object, e As EventArgs)
      Response.Write("You clicked the button named: " & obj.Text)
   End Sub
</script>

<html>
<body>

   <form runat="server">
   <asp:button id="btSubmit" Text="Submit" runat=server
      OnClick="Button_Click"/><p>
   </form>

</body>
</html>

2. Lưu trữ tập tin với tên events.aspx ở folder 'D:\Net\Vovisoft ASPNET\Bai06\Events' và chạy IE với URL như sau: http://cantho/VovisoftASPNET/Bai06/Events/Events.aspx

Phần Chú Thích:

1. Thông số đầu tiên ở subroutine Button_Click là loại Object data type, obj As Object đại diện cho đối tượng (Object) gây ra sự cố, ở đây chính là nút bấm (button) mang tên 'btSubmit'.

2. Thông số thứ 2 là sự cố 'e' loại EventArgs, thông số này chứa mọi thông tin đặc trưng cho biến cố đang, sẽ hay đã xảy ra.

3. Trước khi user nhấp mũi chuột vào nút bấm này (lý lịch của nút bấm - ID là 'btSubmit') thì thông số 'e' trống rỗng, sau khi user nhấp vào nút bấm, 'e' chứa đủ thứ trong đó có sự cố 'Click'. Trong Form, ta đã xắp xếp nguồn mã để báo cho nút bấm 'btSubmit' hay rằng bất cứ khi nào sự cố Click khởi động, lập tức thi hành subroutine 'Button_Click', và như vậy, ta đã định nghĩa và xây dựng 1 event handler thành công.

Classes

Classes là phần ta xác định hay định nghĩa các đối tượng (Object) tỷ như để định nghĩa 1 cái đồng hồ, ta diễn tả kim giờ, kim phút, kim giây cùng các con số chỉ giờ, cách bố trí giờ giấc hay ngày tháng năm, ... Tương tự như thế, class định nghĩa đối tượng (Object) qua các đặc tính (properties) và các phương pháp (method) biểu thị đặc trưng cho class.

Ta nên nhớ rõ 1 điều: 'Mọi thứ trong .NET Framework hay VB.NET đều đại biểu cho classes'.

Cú pháp như sau:

Class classname
   properties
   subroutines
   functions
End Class

Trước khi dùng, nhớ instantiate class ra 1 đối tượng (Object).

Có hằng hà sa số Base Classes trong .NET Framework ta không thể nào kể ra xiết ở đây, tổng quát có thể gom vào những loại (catogories) sau:

  • String

  • Collections và Arrays: tỷ như Arrays, Lists, Maps, Linked Lists, ...

  • WinForms: dùng hiển thị (display) Windows và các Controls tỷ như Text Boxes, Combo Boxes, List Boxes, File Dialogs, ...

  • Web Forms: phác thảo dùng cho mạng, ta sẽ đào sâu chi tiết ở bài kế.

  • File Handling: dùng lướt qua lại (navigate) các file system trong máy hay trong mạng, kiểm tra đặc tính (properties) của files, read, modify hay write cũng như chuyển (move) và sao chép (copy) các tập tin hay folders.

  • Registrry Access: lướt qua lại, đọc hay viết nội dung của registry.

  • Internet: nối vào mạng, tải lên hay tải xuống các tập tin.

  • ADO.NET: nối vào các cơ sở dữ liệu (database) và vận dụng các records với 1 khái niệm mới về disconnected data cũng như sử dụng XML để chuyển data đi khắp mọi nơi mọi chỗ.

Inheritance

Inheritance nắm vai trò quan trọng trong classes và OOP (Object-Oriented Programming) vì tính chất kế thừa của nó. Ta không cần phải tạo ra 1 class mới hoàn toàn khi đã có 1 class tương tự như cái ta muốn (who wants to re-invent the wheel?) mà chỉ cần tạo ra nhánh (giống như nhánh cây) dựa vào gốc (base class). Trở lại trường hợp cái đồng hồ, tỷ như ta đã tạo ra 1 class gọi là Clock, rồi sau đó mới sực nhớ ra có 2 loại đồng hồ: analog và digital. Thay vì quẳng cái Clock class đi và tạo ra 2 cái mới Analog class  và Digital class, ta có thể xây dựng class mới lấy Clock class làm cơ bản (base class) và thêm vào đó những gì đặc trưng đến hay liên hệ đến loại của Clock là Analog hay Digital. Tính chất kế thừa này đem lại vận hội mới cho các Kỹ Sư Tin Học khi xây dựng các ứng dụng vì làm cho việc phát triển, triển khai và bảo trì trở nên dễ dàng hơn, đỡ bị ... nhứt 'đầu' hay bạc ... 'râu'.

Cú pháp như sau với thí dụ về AnalogClock:

Class AnalogClock: Inherit Clock
   private ClockWound ASP.NET Boolean = False
   Sub WindClock( )
      ClockWound = True
   End Sub
End Class

Phương pháp (method) lập trình tổng quát

Ngoài việc nắm vững kỹ thuật và cú pháp lập trình, thiết tưởng, ta cũng nên bàn 1 cách tổng quát về phương pháp (method) xây dựng tiêu chuẩn cho việc lập trình các ứng dụng (nói chung) và ASP.NET (nói riêng). Nhớ đây chỉ là  một số khái niệm cơ bản khi ta muốn phát triển các dự án ứng dụng lập trình VB.NET cho các trang ASP.NET trong khoá học này. Các tiến trình được nhắc đến ở đây nhằm mục đích hiểu rõ các bước cần thiết trong việc lập trình khi áp dụng cho một dự án thực tế trong công ty của mình.

1. Requirement Specifications (Ðặc điểm kỹ thuật cần thiết)

Mặc dù khi trình bày các đề tài trong khoá này, ta chỉ sơ lược về các đặc điểm kỹ thuật cho các bài tập, bài làm ở nhà hay dự án nhưng ta có thể dựa vào đó mà linh động xắp xếp các đặc điểm kỹ thuật cần thiết phù hợp cho dự án của ta trong tương lai. Ngoài ra, ta có thể thêm bớt sao cho dự án của mình được thêm nhiều công dụng thích hợp yêu cầu đòi hỏi của khách hàng. Trên thực tế, Software Consultant phải phỏng vấn nhiều người trong công ty để có một hình ảnh đầy đủ vấn đề về Requirement Specifications.

2. Design (Thiết kế)

Từ Requirement Specifications bước qua giai đoạn Thiết kế. Lúc nầy ta sẽ thấy có nhiều điểm không được nêu rõ trong Requirement Specifications và cần làm cho sáng tỏ (clarification) hơn. Công việc nầy do Systems Analyst thực hiện. Nếu dự án lớn thì có Software Architect thiết kế tổng quát trước khi chia ra các Team Leaders ( thường thường là Systems Analysts). Trong giai đoạn nầy có khi phải làm Prototype (thử mô hình mẫu) để biết chắc kỹ thuật mình dùng có đủ khả năng và thích hợp với nhu cầu dự án không. Thiết kế là giai đoạn quan trọng nhất trong chu kỳ phát triển một nhu liệu. Chẳng những ta nghĩ cách xây dựng nhu liệu, mà còn kế hoạch chi tiết cách thử lúc nào, ở đâu trong code. Ta phải tưởng tượng mọi hoàn cảnh bất thường (unusual scenarios) nhưng có thể xãy ra để tìm giải pháp đối phó. Trong các công ty nhỏ hoặc trung (small business), Web Master sẽ làm mọi chuyện từ ... 'cây kim' cho tới ... 'phi thuyền' khi thiết kế các trang ASP.NET.

3. Coding hay Implementation (Thảo chương)

Ðây là giai đoạn thảo chương và debug. Trong phần Debug thì có Unit Test (thử từng bộ phận) và Integration Test (thử chung). Mỗi khi có sửa đổi một chút thì phải thử lại nhiều thứ nên nếu có thể viết Test Script để tự động hóa công việc thử nầy (gọi là Regression Test) thì tiết kiệm rất nhiều thời giờ. Nếu nhu liệu phải phản ứng nhanh chóng (good response) trong khi chạy Real-Time thì phải thử nó trong hoàn cảnh phải giải quyết nhiều thỉnh cầu cùng một lúc (gọi là Stress Test).

4. Acceptance Test (Chạy Thử)

Khái niệm tổng quát về việc kiểm tra Functional and Acceptance Testing như sau:

Sự kiểm tra Functional and Acceptance Testing cũng đóng góp một phần rất quan trọng trong việc lập trình. Một cách tổng quát, trong nhiều kiểu kiểm tra thì sự kiểm tra về mặt chức năng (Functional Testing) giúp người triển khai kiểm soát lại xem phần lập trình ứng dụng đó có phù hợp với mọi chức năng đặt ra trước theo yêu cầu của dự án. Còn sự kiểm tra về mặt thừa nhận (Acceptance Testing) là để kiểm soát xem ứng dụng đó có phù hợp với hoàn cảnh hay môi trường sử dụng hay không, tỷ như chạy thử trong các nền Windows khác nhau, trong các phiên bản Browser khác nhau, trong các loại Browser khác nhau hay cùng phiên bản nhưng screen resolution khác nhau, ...

Trong nhiều trường hợp ở tại công ty của khách hàng, Software Consultant chứng kiến các giai đoạn chạy thử để xem nhu liệu xử lý mọi chuyện đúng như liệt kê trước đây. Các công chuyện xử lý chạy có nhanh đủ không, nhất là trong trường hợp nhu liệu phải giải quyết rất nhiều thỉnh cầu cùng một lúc. Trong những hoàn cảnh bất bình thường, nhu liệu có đứng vững không hay 'té' bất ngờ. Nếu dự án lớn, trước Acceptance Test còn có thêm một giai đoạn gọi là Factory Test khi Software Consultant đến tận công ty để chứng kiến ta chạy thử.

5. Commissioning, Roll-Out (Áp dụng)

Khi cho áp dụng rồi là bắt đầu giai đoạn Bảo đảm (Warranty) và Bảo trì (Maintenance). Bảo trì là thăm viếng lại nhu liệu để chửa trị Bug (fixing bugs) hay sửa đổi (modification) hay làm thêm (enhancement). Lúc bấy giờ ta sẽ thấy giá trị của một nhu liệu được chú thích tỉ mĩ. Thường thường nhu liệu ta bảo trì là do người khác viết hoặc do chính mình viết từ lâu rồi, không còn nhớ nữa, nên nếu có kèm documentation và được chú thích rõ ràng thì công việc bảo trì sẽ dễ dàng hơn rất nhiều.

Khi lập trình cho một công việc hay dự án nhỏ, có khi ta không chú ý nhiều đến giai đoạn Requirement Specifications. Sau nầy lúc đã viết code rồi mới khám phá ra việc mình làm không đúng như điều khách hàng muốn thì rất phiền. Nếu Specifications đã viết rõ ràng thì ta có thể xin thêm tiền thay đổi (variation), nhưng có khi khách hàng vẫn trách là ta không chuyên nghiệp (professional) và có thể mình mất khách trong tương lai.

Tiến trình 6 là trở lại tiến trình ban đầu
nhằm mục đích kiểm tra Chu Kỳ Phát Triển Nhu Liệu nhiều lần để giảm thiểu lỗi và nhất là khi có sự thay đổi trong phần specifications hầu có thể nâng cấp 1 cách hiệu quả.


Tóm tắt

Ở bài này, ta đã bàn sơ lược về .NET Framework và tham khảo vài chi tiết về cú pháp của ngôn ngữ lập trình VB.NET cùng phương pháp (method) lập trình để giúp ta xây dựng và phát triển các trang Web một cách hiệu quả.

Tổng quát, ta có 5 loại biến số (variables) và 3 loại logic. Các logic Conditional, Looping và Branching này rất cần thiết trong việc giúp ta tái thi hành các nguồn mã một khi thoả mản điều kiện đã định trước. Ta cũng phân biệt được sự khác nhau giữa Functions và Subroutines và lướt sơ qua khái niệm cùng cách vận dụng các event cũng như classes và khái niệm Inheritance trong OOP.

Trong bài kế 'Web Form - Part I', ta sẽ tham khảo về Web Form và vai trò của nó trong ASP.NET . Web Form là 1 khái niệm mới và hấp dẫn trong môi trường mạng vì Web Form cho phép ta kiểm soát ... 'động tịnh' của user qua các objects hiển thị (display) trong User Interface nhưng lại xử lý ở phiá Server. Thật là ... 'kỳ bí'.


Download Source Code

Nguồn mã bài tập 1
Nguồn mã bài tập 2
 


Bài làm ở nhà

Câu hỏi 1: Is VB.NET case sensitive?

Câu hỏi 2: Trong VB6 ta có biến số variant, chuyện gì đã xảy ra cho variant ở VB.NET?

Cây Hỏi 3: Khi nào ta dùng For loop và khi nào dùng While loop?

Bài làm 1: Tạo 1 trang ASP.NET dùng class PERSON để biểu thị về người và object dại diện cho chính bạn với đặc tính (properties) giới tính (Nam/Nữ), màu tóc (xanh, đen, muối tiêu, bạc, ...), màu mắt (đen, đỏ, ...), màu da (ngâm, bánh mật, đen, ...) và ngày tháng năm sinh. Dùng đặc tính (properties) dayofweek của datetime để xác định ngày bạn sinh là ngày nào trong tuần và dùng 1 nút bấm Submit để gọi phương pháp (method) này cũn gnhư hiển thị (display) kết quả ở browser.

 

Vovisoft Home Page    Bài số 5  Bài số 7 ASP.NET Course Index

Trang được viếng thăm

Server object error 'ASP 0177 : 800401f3'

Server.CreateObject Failed

/aspnet/baihoc/Bai06/bai06.asp, line 1172

800401f3