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

