Thà nh phầ n Database Access

Một phần của tài liệu Tìm hiểu về active server pages ASP (Trang 54 - 82)

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 (adsbygoogle = window.adsbygoogle || []).push({});

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. (adsbygoogle = window.adsbygoogle || []).push({});

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. (adsbygoogle = window.adsbygoogle || []).push({});

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. (adsbygoogle = window.adsbygoogle || []).push({});

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

%> (adsbygoogle = window.adsbygoogle || []).push({});

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ử

Một phần của tài liệu Tìm hiểu về active server pages ASP (Trang 54 - 82)