VI. CÁC THAØ NH PHẦN (COMPONENT) CỦA ASP
Thà nh phầ n Database Access
Ta có thể tạo nhữ ng trang Web độ ng tá c độ ng lẫ n nhau bằ ng cá ch sử dụng cá c thà nh phần Server sau trong Script
Mộ t ứ ng dụng Web Database viế t bằ ng cá ch sử dụng thà nh phầ n Database Access củ a ActiveX hay còn gọi là thư việ n ADO (ActiveX Data Object). Đây cũ ng chính là mộ t điểm mạnh nhấ t củ a ASP trong việ c phá t triể n ứ ng dụng Web Database.
Cá c đố i tượng củ a ADO cung cấ p cơ chế tạo ra cá c kế t nố i (Connection) vớ i hầ u hế t các kiể u Database, cũ ng như việ c truy xuấ t, cậ p nhậ t cá c Database nà y.
Hiệ n nay thư việ n ADO là mộ t cô ng cụ mạnh nhấ t trong việc phá t triển cá c ứ ng dụng Database trê n Internet.
Trong phần nà y ta sẽ xem xé t cá c phầ n trong thư việ n cô ng cụ nà y. Giao diệ n ADO :
ADO được thiế t kế mộ t cá ch đơn giả n nhấ t, nó giao tiế p vớ i database thô ng qua phương thứ c ODBC (Open Database Connectivity), chú ng ta có thể sử dụng chú ng vớ i bấ t kỳ loại Database nà o nế u như ODBC có driver hỗ trợ. (Hiệ n nay tồ n tại Driver cho hầ u hế t cá c loại Database, như Foxpro, Access, oracle, Spl
server…tuy nhiê n các file cơ sở dữ kiệ u theo dạng bả ng như Exel, hoặc File text thì ODBC khô ng hỗ trợ ).
Cá c đố i tượng trong ADO
Cá c đố i tượng chính trong ADO đó là : Connection, Commmand và RecordSet. Ngoà i ba đố i tượng chính nà y cò n có các đố i tượng con củ a nó cù ng vớ i cá c tham số , property, phương thứ c bê n trong. Sử dụng Connection ta có thể thiế t lậ p sự liên kế t vớ i cơ sở dữ liệ u, thô ng qua đó ta có thể thực hiệ n cá c query để lấ y ra cá c record hoặ c cậ p nhậ t mộ t record bằ ng sử dụng đố i tượng Command. Kế t quả thực
hiệ n cá c query trê n database sẽ được lưu và o đố i tượng RecordSet, trên đố i tượng nà y ta có thể duyệ t và lấ y ra mộ t hay nhiề u Record.
1. Đố i tượng Connection
Để sử dụng đố i tượng Connection, trướ c tiê n ta phả i tạo ra mộ t thực thể (instance) cho nó , đây thực sự là thực thể củ a đố i tượng nà y trong trang ASP.
Để tạo mộ t thực thể (instance) đố i tượng Connection bạn có thể sử dụng đoạn script sau:
< %
Connection_name= Server.CreateObject (“ADODB.Connection”) % >
Thô ng thườ ng trong mộ t ứ ng dụng nế u ta cầ n có mộ t liê n kế t vớ i Data Source cố đị nh cho tấ t cả trang thì khi đó ta sẽ đặ t thực thể (instance) củ a Connection ở mứ c application scope bằ ng cá ch đưa phá t biể u tạo thực thể (instance) ở trê n và o sự kiệ n Application_OnStart:
<%
Sub Application_OnStart ()
Set objConn= Servcer.CreateObject (“ADODB.Connection”) End Sub
%>
hoặ c thiế t lậ p tầ m vực cho Connection ở mứ c Sesstion như sau : < %
Sub Session_OnStart ()
Set objConn = Server.CreateObject (“ADODB. Connection”) End Sub
%>
Tuy nhiê n ta có thể xem xé t thê m việ c tố i ưu cho cá c Connection trong mộ t ứ ng dụng có nhiề u ngườ i sử dụng truy xuấ t tớ i Database, đó là khả nă ng
Connection Pooling củ a ODBC 3.0. Connection Pooling
Cá c ứ ng dụng cơ sở ứ ng dụng truyề n thống đề u tạo mộ t nố i liê n kế t đơn tớ i Database mà nó sử dụng, cò n cá c ứ ng dụng Database trê n Web lại mở và đó ng cá c liê n kế t nà y ở mỗ i mộ t trang Web. Mộ t phương phá p cho cá c ứ ng dụng Database trê n Web là tạo mộ t sự liê n kết liê n tục vớ i cơ sở dữ liệ u của từ ng ngườ i sử dụng và lưu trữ trong đố i tượng Session.
Tuy nhiê n phương phá p nà y có thể là m gia tă ng số lượng các user có kế t nố i vớ i cơ sở dữ liệ u mà khô ng làm việ c và nó chỉ đạt được độ tin cậ y đố i vớ i cá c Web Site có sự lưu thô ng dữ liệ u thấ p (low-trafic)
Phương phá p tiệ n lợi trong việc quả n lý cá c kế t nối vớ i cơ sở dữ liệ u củ a ứ ng dụng Web là quả n lý bằng Connection Pool củ a ODBC 3.0, nhằ m giả m bớ t số lượng liê n kế t rả nh rỗ i, ODBC sẽ mở cá c kế t nố i và quả n lý cá c kế t nối nà y.
Mỗ i khi có mộ t yê u cầ u mớ i thì thực hiện việ c kiểm tra xem có liê n kế t nà o trong Connection Pool đang rảnh khô ng, nế u khô ng có thì sẽ tạo kế t nố i mớ i, nế u có thì nó sẽ lấ y liê n kế t rả nh nà y mà khô ng tạo liên kế t mớ i. Nế u mộ t liê n kế t rả nh nà o trong Connection Pool tồ n tại quá 60 giâ y thì nó sẽ tự độ ng loại bỏ .
Connection Pooling được kích hoạt mặ c nhiê n trong ASP, ta có thể loại bỏ bằ ng cá ch thiế t lậ p giá trị Register Entry Start Connection Pool về giá trị 0. Cá c phương thứ c và đặ c tính (property) củ a đố i tượng Connection
Phương thứ c Mô tả
Open Mở mộ t kế t nố i mớ i tớ i dữ liệu nguồ n. Close Đó ng lại mộ t kế t nố i .
Execute Thực thi mộ t query,SQL hoặ c mộ t thủ tục lưu trữ sẵ n.
Property Mô tả
CommandTimeout Số giâ y chờ đợi khi thực thi một lệ nh trước khi kế t thú c.
ConnectionString Thô ng tin dù ng để tạo kế t nố i tớ i nguồ n dữ liệ u.
ConnectionTimeout Số giâ y chờ đợi khi tạo ra mộ t kế t nố i trướ c khi kế t thú c.
1.1 Mở và đó ng mộ t kế t nố i Database
Để thiế t lậ p mộ t liê n nố i vớ i database thì bạn tạo thực thể (instance) củ a đố i tượng Connection, sau đó ta có thể mở mộ t kế t nố i tớ i dữ liệ u nguồn (DSN) để có thể truy xuấ t dữ liệ u .
Cú phá p :
trong đó
ConnectionString : Chuỗ i đị nh nghĩ a tên củ a Data Source Name (DSN), tê n nà y được khai bá o trong ODBC.
User : Tên ngườ i sử dụng đưa và o khi mở mộ t kế t nố i
Password : Mậ t mã đưa và o khi thiế t lập mộ t kế t nố i.
Ví dụ : mở một DSN có tê n là student,user="student" và password ="magic" <%
Set objConn=Server.CreateObject("ADODB.Connection") objConn .Open "DSN=student;uid=student;pwd=magic" objConn.Close
Set objConn=Nothing %>
Sau khi xử lý xong dữ liệ u trên data source, trướ c khi kế t thú c trang ta phả i đó ng lại cá c kế t nố i đã mở . Sử dụng phương thứ c Close củ a đố i tượng Connection để đó ng mộ t kế t nố i.
objConn.Close
Sau khi đó ng mộ t kết nố i, bạn khô ng thể sử dụng kế t nố i để giao tiế p vớ i database.
1.2Thực thi câ u lệ nh SQL vớ i kế t nố i Open:
Sau khi đã kế t nố i vớ i Data Source, để thực thi mộ t câ u lệ nh SQL hoặ c vớ i mộ t thủ tục, sử dụng phương thứ c Execute cho phép thực thi mộ t câ u lệ nh tá c độ ng
lê n Data Source. Phương thứ c nà y có 2 dạng : Mộ t dạng được sử dụng khi tìm kiếm kế t quả từ mộ t database và dạng khá c là được sử dụng khi khô ng có kế t quả nà o được trả về .
Set recordset = connection.Execute(CommandText, RecordsAffected, Options)
connection.Execute CommandText, RecordsAffected, Options trong đó
recordset : Mộ t biế n đố i tượng Recordset chứ a kế t quả truy vấ n. CommandText : Chứ a query để thực thi.
Connection : Mộ t biế n đố i tượng Connection.
RecordsAffected : chứ a số record mà lệ nh tá c động đế n.
Options : Có cá c giá trị khá c nhau tương ứ ng vớ i mỗ i loại CommandText.
Giá trị Hằ ng tương ứ ng Mô tả CommandText
0 AdCmdUnknown Unknown. Giá trị này là mặ c đị nh khi đị nh nghĩ a.
1 AdCmdText CommandText là mộ t câ u lệ nh như câ u lệ nh SQL.
2 AdCmdTable Tê n củ a bả ng tạo recordset .
3 AdCmdStoredProc Mộ t thủ tục trữ sẵ n (stored procedure) trong data source.
Trướ c khi bạn có thể sử dụng nhữ ng hằ ng số nà y trong mộ t trang ASP, bạn phả i include mộ t file đặ c biệ t gọi là ADOVBS.inc.
Ví dụ1 : sử dụng phương thứ c Execute để thực thi mộ t câ u lệ nh SQL mà khô ng tìm kiế m lại bấ t kỳ kế t quả nà o.
<!-- #include virtual="ADOVBS.INC"--> <%
‘tạo mộ t instance (thực thể ) củ a đố i tượng Connection
Set objConn = Server.CreateObject("ADODB.Connection") ‘mở kế t nố i tớ i Database
objConn.Open "DSN=student;uid=student;pwd=magic" ‘thực thi mộ t thủ tục lưu trữ sẵ n tê n là MyPro
objConn.Execute “MyProc”, adCmdStoredProc objConn.Close
Set objConn=Nothing %>
Ví dụ 2 : sử dụng phương thứ c Execute để trả kế t quả từ mộ t câ u truy vấ n SQL
<!-- #include virtual="ADOVBS.INC"--> <%
‘tạo mộ t thực thể của đố i tượng Connection
Set objConn = Server.CreateObject("ADODB.Connection") ‘Mở kế t nố i tớ i Database
objConn.Open "DSN=student;uid=student;pwd=magic" ‘thực thi câ u lệ nh SQL
SQLtemp="SELECT * FROM MyTable WHERE Name= 'John' " objConn.Execute SQLtemp, adCmdText
objConn.Close
Set objConn=Nothing %>
2. Đố i tượng Command.
Thay vì phả i sử dụng phương thứ c Execute củ a đố i tượng Connection để thực thi mộ t thủ tục lưu trữ sẵ n hoặ c mộ t câ u lệ nh SQL, ta có thể sử dụng đố i tượng Command để thi hà nh cá c thao tác vớ i cơ sở dữ liệ u như : thê m, xó a, cậ p nhậ t dữ liệ u hoặ c truy vấ n dữ liệ u trong mộ t bả ng.
Chú ý : Để thực thi mộ t truy vấ n khô ng sử dụng đố i tượng Command, đưa mộ t chuỗ i truy vấ n và o phương thức Execute củ a đố i tượng Connection hoặc là tớ i phương thứ c Open củ a đố i tượng Recordset. Tuy nhiê n, đố i tượng Command cầ n được sử dụng khi bạn muố n vẫn giữ lại lệ nh và thực thi lại nó , hoặ c sử dụng cá c tham số truy vấ n.
Việ c tạo mộ t thực thể (instance) cho đố i tượng Command cũ ng giố ng như đố i tượng Connection tứ c là ta cũ ng sử dụng phương thứ c Server.CreateObject.
Ví dụ:
Set objCmd = Server.CreateObject (“ADODB.Command”)
Tuy nhiê n để thực sự sử dụng biế n đố i tượng nà y ta phả i xem xé t cá c đặ c tính và phương thứ c đi kèm theo nó .
Phương thứ c Mô tả
CreateParameter Tạo mộ t đố i tượng Parameter trong Parameters collection.
Execute Thực thi câ u lệ nh SQL hoặ c thủ tục lưu trữ sẵ n chỉ đị nh trong CommandText property.
Property Mô tả
ActiveConnection Đố i tượng Connection nà o được sử dụng vớ i đố i tượng Command.
CommandText Chỉ đị nh câ u lệ nh cần thực thi.
CommandTimeout Xá c đị nh thờ i gian thực thi lệ nh, giá trị thờ i gian nà y tính theo giâ y.
CommandType Cho biế t kiể u củ a query chỉ đị nh trong CommandText.
Prepared Tạo ra lệ nh chuẩ n bị trướ c khi thực thi. 2.1Tạo mộ t kế t nố i Active Connection :
Sau khi đã có thực thể (instance) củ a đố i tượng Connection đã được kế t nố i vớ i cơ sở dữ liệ u và đố i tượng Command. Lú c này nế u muố n sử dụng đố i tượng Command ta phả i gán tê n củ a Connection thích hợp (Connection nà o kế t nố i tớ i cơ sở dữ liệ u cầ n là m việ c ) và o cho ActiveConnecttion củ a đố i tượng Command.
Cú phá p
name.ActiveConnection = Connection_name Ví dụ:
<%
Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open "DSN=student;uid=student;pwd=magic" objCmd.ActiveConnection = objConn.Open
Sau khi đã thiế t lậ p kế t nố i với đố i tượng Connection, ta có thể sử dụng phương thứ c Exexcute củ a đố i tượng Command gần giố ng như vớ i Connection . Tuy nhiê n, điể m khá c vớ i đố i tượng Connection là đố i vớ i đối tượng Command nế u ta có dự đị nh thi hà nh một lệ nh nà o thì ta sẽ phả i khở i tạo cá c giá trị cho CommandText, CommandType, ….
Ví dụ : đoạn chương trình thi hà nh mộ t câ u query trê n mộ t data source <%
Set objConn = Server.CreateObject("ADODB.Connection") Set objCmd = Server.CreateObject(“ADODB.Command”) ‘tạo kế t nố i
objConn.Open "DSN=student;uid=student;pwd=magic" objCmd.ActiveConnection = objConn.Open
objCmd.CommandText="SELECT * FROM Contact WHERE State=’LA’" ‘cho biế t CommandText là mộ t câ u lệ nh SQL
‘biê n dị ch câ u lệ nh
objCmd.Prepared = TRUE ‘thực thi câ u lệ nh
objCmd.Execute ‘giả i phóng tà i nguyê n đã sử dụng
Set objCmd.ActiveConnection = Nothing %>
Chú ng ta có thể thiế t lậ p giá trị CommandTimeout đầ u tiên để xá c đị nh khoả ng thờ i gian thực thi câ u lệ nh, mặ c đị nh là 30 giâ y, nế u để giá trị nà y là 0 thì ADO sẽ thực thi cho đế n khi tá c vụ được hoà n tấ t.
2.2 Sử dụng tham số cho cá c lệ nh SQL.
Nế u như query cầ n thực hiệ n có yê u cầ u cá c tham số , thì ta phả i thê m các tham số nà y và o Parameter collection trướ c khi thực hiệ n câ u lệ nh. Đố i vớ i phương thứ c Execute củ a đối tượng Connection khô ng có khả nă ng nà y.
Sử dụng phương thức Execute củ a đố i tượng Command thực thi câ u query chỉ đị nh trong CommandText property.
Cú phá p
Set recordset = command.Execute(RecordsAffected, Parameters, Options)
command.Execute RecordsAffected, Parameters, Options trong đó
command : Mộ t biến đố i tượng đại diệ n cho đố i tượng Command.
RecordAffected và Options có chứ c nă ng và giá trị giố ng như trong đố i tượng Connection.
Parameter là mộ t dãy cá c giá trị tham số được đưa và o vớ i mộ t câ u lệ nh SQL. Để tìm hiể u cá ch tạo ra danh sá ch cá c tham số của câ u lệ nh, ta hã y xem xé t cá c phương thứ c và property củ a Parameter collection.
Phương thứ c Mô tả
Append Thê m mộ t tham số và o collection. Delete Xoá mộ t tham số trong collection. Refresh Cậ p nhậ t collection để phả n ánh sự
thay đổ i cá c tham số .
Property Mô tả
Count Trả về số tham số trong collection. Item Lấ y lại giá trị củ a mộ t tham số trong
collection. Tạo và thê m tham số và o Collection
Mỗ i mộ t phầ n tử củ a Parameter collection có thể coi như một đố i tượng Parameter và chú ng cũ ng có cá c đặ c tính (property) riê ng củ a mình.
Property Mô tả
Direction Thể hiệ n kiể u dữ liệ u mà tham số là Input hay Output, hay là cả hai, hay nó là giá trị trả về từ mộ t thủ tục lưu trữ sẵ n (stored procedure).
Name Tê n củ a tham số .
NumericScale Số chữ số thậ p phâ n trong tham số kiể u số .
Precision Số chữ số củ a tham số kiể u số. Size Kích thước lớ n nhấ t, tính theo byte,
củ a giá trị tham số .
Type Kiể u dữ liệ u củ a tham số . Value Giá trị gán cho tham số .
Để tạo mộ t đố i tượng Parameter mớ i, sử dụng phương thứ c CreateParameter củ a đố i tượng Command
Cú phá p
Set pamareter = command.CreateParameter(Name,Type,Direction,Size,Value) Để thê m mộ t tham số mớ i vào Parameter collection. Trướ c tiê n ta phả i tạo mộ t thực thể (instance) cho đố i tượng Parameter, sau đó thiế t lậ p cá c giá trị property cho nó và cuố i cù ng sử dụng phương thứ c Append.
Ví dụ: tạo mộ t tham số mớ i và thê m tham số nà y và o Parameter collection. Set objParam = objCmd.CreateParameter ( “State” , 128 , 1 , 2 , ”Ny” ) objCmd.Parameters.Append objParam
Ví dụ: <%
‘tạo mộ t thực thể của đố i tượng Command
objCmd = Server.CreateObject(“ADODB.Command”) ‘tạo kế t nố i
objConn.Open "DSN=student;uid=student;pwd=magic" objCmd.ActiveConnection = objConn.Open
objCmd.CommandText="DeleteStateQuery" ‘cho biế t CommandText là mộ t thủ tục lưu trữ sẵ n objCmd.CommandType = 4
strValue=Request.Form(“txtState”) ‘khi submit từ mộ t form
Set objParam = objCmd.CreateParameter ( “State” ) ‘chỉ có tê n tham số ObjParam.Type=adChar ‘ kiể u tham số là chuỗ i
ObjParam.Direction=adParamInput ‘mộ t query đưa và o tham số ObjParam.Size=Len(strValue) ‘kích thướ c củ a chuỗ i
ObjParam.Value=strValue ‘giá trị chuỗ i
objCmd.Parameters.Append objParam ‘thê m tham số và o collection objCmd.Execute ‘thực thi câ u lệ nh
%>
Tham khảo cá c đố i tượng collection
Mỗ i khi chú ng ta có cá c tham số trong collection. Để lấ y giá trị củ a tham số trong collection ta có thể sử dụng Item property hoặ c sử dụng chỉ mục (index) hoặ c là tê n tham số .
Cú phá p
objCmd.Parameters.Item(index) hoặ c objCmd.Parameters(index)
hoặ c objCmd.Parameters.Item(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ử