Giáo trình ASP
Microsoft Active Server Pages (ASP) là một môi trường kịch bản dựa trên server
(server-side scripting) cho phép tạo hoặc xây dựng các ứng dụng Web mạnh chứa các
thẻHTML, văn bản và các lệnh script hay các ứng dụng Web động, giao tiếp giữa
Client và server một cách hiệu quả. Các trang ASP có thểgọi các thành phần ActiveX
đểthực hiện các công việc nhưkết nối với một database hoặc thực hiện một tính toán
kinh doanh. Với ASP, bạn có thể đưa nội dung tương tác với các trang Web của bạn
hoặc xây dựng toàn bộcác ứng dụng Web sửdụng các trang HTML nhưgiao tiếp với
khách hàng của bạn.
Trang ASP:
Mỗi trang .asp có thểbao gồm một trong các thành phần sau: HTML, Script của ngôn
ngữVB Script hoặc Jscript, Text trong đó các tag HTML và Text sẽ được xửlý bình
thường như đối với các văn bản HTML (.html) thông thường, các script sẽ được một
bộphận (engine) của ASP thông dịch và thi hành trên server. Có thểxem trang ASP
nhưmột trang HTML có bổsung các ASP Script Command
Hoạt động của trang ASP:
Sau khi môi trường ASP thực hiện việc thực thi các file .asp xong nó sẽtrảlại kết quả
ởdạng HTML cho Web Server, tiếp theo Browser sẽnhận được nội dung cần trình
bày từWeb Server thông qua giao thức HTTP. Một trang ASP cũng sẽ được Brower
tham khảo tới bình thường nhưlà nó đã tham khảo tới một trang HTML của Web.
(tên_tham_số) hoặc là objCmd.Parameters(tên_tham_số) Ví dụ: để lấy giá trị của tham số State và 128 ở ví dụ trên, ta có thể sử dụng các Cú pháp objCmd.Parameters.Item(0) hoặc objCmd.Parameters(0) hoặc objCmd.Parameters.Item(“State”) hoặc là objCmd.Parameters(“State”) tương tự objCmd.Parameters.Item(1) hoặc objCmd.Parameters(1) hoặc objCmd.Parameters.Item(128) hoặc là objCmd.Parameters(128) Đọc và hủy bỏ các tham số Chúng ta có thể sử dụng vòng lặp For…Each để xuất ra tên và giá trị của tất cả các tham sốtrong Parameter collection và đặt chúng trong trang hiện hành sử dụng phương thức Response.Write Ví dụ: <% For Each objParam In objCmd.Parameters Response.Write “Parameter name = ” & objParam.Name & “” Response.Write “Parameter value = ” & objParam.Value Next %> Để hủy bỏ một tham số trong Parameter collection, sử dụng phương thức Delete. Ví dụ: xoá tham số tên State, chúng ta có thể sử dụng tên hoặc chỉ mục của nó objCmd.Parameters.Delete “State” objCmd.Parameters.Delete 0 3. Đối tượng Recordset. Bằng cách sử dụng các đối tượng Connection và Command ta có thể thực thi các query để thêm vào, cập nhật hay xóa một record trong data source. Tuy nhiên trong các ứng dụng thì ta cũng phải thực hiện việc lấy ra một số các record từ ADO, để hiển thị giá trị của chúng ta phải sử dụng đối tượng Recordset. Sử dụng Recordset để hiển thị các record Một Recordset có thể được sử dụng để tượng trưng cho các record trong một bảng database. Nó có thể chứa một hoặc nhiều record (hàng), mỗi record có thể chứa một 41 hoặc nhiều field (cột). Để tạo một thực thể (instance) của đối tượng Recordset, sử dụng phương thức Server.CreateObject: Set objRs = Server.CreateObject("ADODB.Recordset") Sau khi đã có biến đối tượng Recordset, ta có thể khởi tạo giá trị cho nó bằng cách lưu kết quả trả về mỗi khi thực thi phương thức Execute của đối tượng Connection hay Command. Để hiển thị các record trong Recordset, sử dụng vòng lặp thông qua các record. Ví dụ: <% Set objConn = Server.CreateObject(“ADODB.Connection”) ‘tạo một thực thể (instance) của đối tượng Connection Set objRs = Server. CreateObject(“ADODB.Recordset”) objConn.Open "DSN=student;uid=student;pwd=magic" Set objRs = objConn.Execute(“SELECT * FROM MyTable” ) Do While objRs.EOF Response.Write objRs(“Name”) & “” objRs.MoveNext Loop Set objRs.Close Set objConn.Close %> Làm việc với Fields Collection. Mỗi đối tượng Recordset có một Fields collection chứa dữ liệu và thông tin về mỗi trường (field) trong record hiện hành. Sử dụng Fields collection để lấy mỗi record trong Recordset. Phương thức Mô tả Refresh Cập nhật collection để phản ánh sự thay đổi tới giá trị các field. Property Mô tả Count Trả về số field trong collection. Item Lấy lại nội dung của các field trong collection. Để hiển thị giá trị của cột trong bảng, bạn có thể sử dụng tên của trường (cột) hoặc khi bạn không biết tên của trường (cột) thì ta có thể sử dụng chỉ mục của trường đó để hiển thị. Chú ý: chỉ số của cácfiled trong record được đánh số từ 0 cho tới giá trị objRs.Fields.Count-1. 42 Ví dụ: hiển thị tất cả các hàng và cột trong một bảng Dislay Database Example <% whichDSN="DSN=student;uid=student;pwd=magic" Mysql="Select * From MyTable " Set objConn = Server.CreateObject("ADODB.Connection") Conn.Open whichDSN Set objRs = Server.CreateObject("ADODB. Recordset") Mysql="Select * From MyTable " objRs = objConn. Execute("Select * From MyTable ") howmanyfields= objRs.Fields.Count –1 ‘chứa số field trong Recordset %> ‘hiển thị tên của các field ‘hiển thị tất cả các field trong Recordset <% objRs.movenext Loop objRs.close set objRs=nothing objConn.close set objConn=nothing %> Các kiểu con trỏ (Cursor) và khóa (Locking) Recordset 43 Một cursor xác định kiểu thao tác có thể thực hiện và kiểu thay đổi mà các user khác khi mở một Recordset. Còn kiểu locking xác định database sẽ xử lý trường hợp nhiều user cố gắng thay đổi một record trong cùng một lúc. Để thực hiện việc này, đầu tiên bạn tạo một thực thể (instance) của đối tượng Recordset, sau đó sử dụng phương thức Open để mở một Recordset. Cú pháp objRs.Open Source, ActiveConnection, CursorType, LockType, Options với các tham số: Source: Một đối tượng Command, câu lệnh SQL, tên bảng hoặc thủ tục lưu trữ sẵn (stored procedure). ActiveConnection: Tên của dt Connection đã được mở kết nối với cơ sở dữ liệu cần làmviệc. CursorType: Kiểu của con trỏ được sử dụng khi mở Recordset. CursorType sử dụng các kiểu cursor khi mở Recordset là: AdOpenForwardOnly: (Mặc định)Với tham số này bạn chỉ có thể duyệt các record trong Recordset theo một chiều từ đầu đến cuối. AdOpenKeyset: Recordset được mở có khả năng cho phép ta cập nhập các record (xóa, thay đổi). Tuy nhiên, nếu user khác thêm một record mới, record này sẽ không xuất hiện trong Recordset. AdOpenDynamic: Có thể duyệt theo tất cả các chiều (lên, xuống) trong Recordset. Phản ánh tất cả những thay đổi (thêm vào, sửa đổi, loại bỏ) record trong Recordset do user thực hiện. AdOpenStatic: Bạn có thể duyệt theo tất cả các chiều (lên, xuống) trong Recordset. Không phản ánh tất cả những thay đổi record trong Recordset do user thực hiện. LockType: Kiểu locking sử dụng khi mở Recordset. LockType sử dụng các kiểu locking khi mở Recordset là: adLockReadOnly: Mặc định. Không thể thay đổi các record trong Recordset. adLockOptimistic: Một record chỉ bị lock (khóa) ngay sau khi thay đổi dữ liệu trên Recordset trên data source. adLockPessimistic: Một record chỉ bị lock (khóa) khi bạn gọi phương thức Update của Recordset. adLockBatchOptimistic: Các record sẽ được cập nhật theo bó (batch update). Options: Kiểu của query hoặc bảng đại diện bởi Source. Ví dụ: Cursor and Locking Example 44 <% Set objConn = Server.CreateObject(“ADODB.Connection”) Set objRs = Server.CreateObject(“ADODB.Recordset”) objConn.Open "DSN=student;uid=student;pwd=magic" MySql=(“Select * From MyTable”) objRs.Open Mysql, objConn, adOpenForwardOnly, adLockReadOnly, adCmdText objRs.close set objRs=nothing objConn.close set objConn=nothing %> Sửa đổi các record trong Recordset Bạn có thể sử dụng một số phương thức của Recordset để sửa đổi các record trong một Recordset. Phương thức Mô tả AddNew Thêm một record mới vào Recordset. Close Đóng lại đối tượng Recordset và các đối tượng con của nó. Delete Xoá record hiện hành trong Recordset. Requery Thực hiện lại query. Update Lưu các thay đổi trên record hiện hành. Ví dụ: sử dụng phương thức AddNew để thêm một record vào Recordset AddNew Database Example <% Set objConn = Server.CreateObject(“ADODB.Connection”) Set objRs = Server.CreateObject(“ADODB.Recordset”) objConn.Open "DSN=student;uid=student;pwd=magic" MySql=(“Select Name From MyTable”) objRs.Open Mysql, objConn, adOpenForwardOnly, adLockReadOnly, adCmdText objRs.addNew(“Name”)=“David” objRs.Update objRs.close set objRs=nothing 45 objConn.close set objConn=nothing %> Duyệt các record trên Recordset. Đối tượng Recordset bao gồm một số phương thức để dịch chuyển qua các record trong một Recordset, record mà nó dịch chuyển tới là record hiện hành. Khi mở một Recordset thì kiểu CursorType mặc định là adOpenForwardOnly nghĩa là chúng ta chỉ có thể dịch chuyển về phía trước, còn nếu muốn dịch chuyển quanh một Recordset thì ta cần mở Recordset với kiểu CursorType là adOpenStatic (hoặc adOpenDynamic, adOpenKeyset). Move: Dịch chuyển vị trí của record hiện hành. MoveFirst: Dịch chuyển về record đầu tiên. MoveLast: Dịch chuyển về record cuối cùng. MoveNext: Dịch chuyển về record kế tiếp. MovePrevious: Dịch chuyển về record trước đó. Khi ta đã có một Recordset, để hiển thị truy xuất tới mỗi Recordset trong đó ta có thể sử dụng các phương thức duyệt như: MoveFirst, MoveLast, MoveNext, MovePrevious sẽ õ lấy được nội dung của record đầu tiên, cuối cùng, kế tiếp hay record phía trước. Khi sử dụng các phương thức để dịch chuyển các vị trí không xác định. Nếu record hiện hành là record là record cuối cùng trong Recordset thì khi gọi phương thức MoveNext thì sẽ gây ra lỗi. Để tránh trường hợp này thì ta sử dụng các property của Recordset như BOF, EOF để xác định record hiện hành là đầu tiên hay là cuối cùng. Các property này có ý nghĩa như sau: BOF property có giá trị TRUE nghĩa là con trỏ đang ở vị trí đầu Recordset, khi Recordset mới được mở thì BOF luôn có giá trị này. EOF property có giá trị TRUE nghĩa là con trỏ đang ở vị trí cuối cùng của Recordset. Nếu không có record nào trong Recordset thì cả BOF lẫn EOF đều là TRUE. Ví dụ: sử dụng một vòng lặp và phương thức MoveNext để duyệt các record trong Recordset. AddNew Database Example <% Set objConn = Server.CreateObject(“ADODB.Connection”) Set objRs = Server.CreateObject(“ADODB.Recordset”) objConn.Open "DSN=student;uid=student;pwd=magic" MySql=(“Select Name From MyTable”) objRs.Open Mysql, objConn, adOpenDynamic, adCmdText 46 objRs.MoveLast Do While Not objRs.BOF Response.Write “” & objRs(“Name”) objRs.MovePrevious Loop objRs.Close set objRs=Nothing objConn.Close set objConn=Nothing %> Lưu ý: BOF và EOF có các điểm sau: Nếu Recordset không chứa record nào khi bạn mở nó cả BOF và EOF là TRUE. Khi BOF và EOF là TRUE, thuộc tính vẫn còn là TRUE cho đến khi bạn di chuyển tới một record đang tồn tại, ở thời điểm này giá trị BOF hay EOF sẽ trở thành FALSE. Khi BOF hay EOF là FALSE và record duy nhất trong recordset bị xóa, thuộc tính vẫn giữ FALSE cho tới khi bạn cố di chuyển tới 1 record khác, ở thời điểm này cả BOF và EOF trở thành TRUE. Vào lúc bạn tạo hay mở một Recordset có chứa ít nhất một record, record đầu tiên là record hiện hành và cả BOF và EOF là FALSE. 47
File đính kèm:
- Giáo trình ASP (2).pdf