CHƯƠNG 3 : TRUY XUẤT CƠ SỞ DỮ LIỆU TRONG ACTIVE
SERVER PAGE
Ở phần trên chúng ta đã biết về các khái niệm tổng quát về Active Server
Page và các thành phần cần có khi xây dựng một ứng dụng.Trong chương này
sẽ trình bày kỹ hơn về Active Data Object, đây chính là ưu điểm mạnh nhất
cho việc phát triển ứng dụng cơ sở dữ liệu trên web (Web Database).
Database Access Component
Một ứng dụng Web databse viết bằng ASP có thể truy xuất dữ liệu trong
một database, bằng cách sử dụng Component Database Access của ActiveX
hay còn gọi là thư viện ADO (Active DataObject).Đây cũng chính là điểm
mạnh nhất của ASP trong việc phát triển ứng dụng Web Database.
Các Object của ADO cung cấp có thể 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à 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 thành phần trong thư viện công cụ này.
ADO interface:
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, Oraccle,
SQl server…
Sự giao tiếp giữa ADO và các thành phần khác trong hệ thống có thể được mô
tả theo hình vẽ sau:
Active Server Pages
ODBC Driver
Active Database
Component
Active Data Object
Data Provider
Interface
DATA
Quá trình truy xuất cơ sở dữ liệu thông qua ODBC
Các Object trong ADO
Các Object chính trong đó là: Connection, RecordSet và Command, ngoài
ba Object chính này còn có các Object, tham số, thuộc tính,phương thức con.Sử
dụng Connection ta 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
cách sử dụng Command object. 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ó duyệt và lấy ra một
hay nhiều Record. Sau đậy ta xem xet cụ thể cấu tạo cũng như cách sử dụng
của từng của từng Object.
Tạo các custom component sử dụng trong ASP:
Ta có thể tạo một component để sử dụng trong môi trường Active Server
Pages, bằng bất cứ ngôn ngữ lập trình nào hổ trợ cho việc tạo Automation
Server. Các ngôn ngữ có hổ trợ kỹ thuật này hiện nay là Visual Basic, Visual
C++ từ các version 4.0 trở về sau. Việc chọn ngôn ngữ nào để hiện thực là tùy
thuộc vào người lập trình, phụ thuộc vào sự thân thiện với ngôn ngữ đó, các
công cụ hổ trợ, các kỹ thuật lập trình cũng như các kích thước của ứng dụng sau
khi biên dòch.
Hiện nay trong các tài liệu có liên quan đến các kỹ thuật lập trình theo cộng
nghệ ActiveX của Microsoft hầu hết đều đưa ra các công thức để hiện thực các
component này bằng Visual Basic 4.0 và 5.0. tuy nhiên trong việc lập trình
hướng tới đối tượng thật sự thì Visual C++ là một môi trường điển hình hơn, với
cấu trúc thừa kế của các thư viện chứa trong nó. Mặc dù việc hiện một code
Component chạy trên server, sử dụng trong ASP không là một công việc mới lạ
trong Visual Basic, nhưng việc hiện thực các component bằng Visual C++ lại
gần như không thấy tài liệu nào hướng dẫn một cách cụ thể, trong phấn này em
xin trình bày các bước để hiệb thực một component bằng môi trường Visual
C++ như là một cách hiện thực khác hơn trong đó sử dụng các khả năng của
công cụ ATL (Active Template Library).
Automation Server & Activex Component:
Automation Server có thể được coi là một thư viện các Object (Class), mà
khi nó đã được đăng ký trên server, nó có khả năng cho phép các ứng dụng khác
nhìn thấy và sử dựng các Class của mình. Bên trong của một component như
thế, có thể chứa một hay nhiều các Class, với Interface của nó, nhờ vào các
Interface này các ứng dụng khác có thể giao tiếp với các Object bên trong.
Thông thường các Interface này là Idispatch hoặc User Interface.
Automation Server có thể được thực hiện ở dạng in_process, thi hành trong
vùng hoạt động của controller, hoặc có thể ở dạng local, chỉ thực thi trong
không gian họat động của nó. Automation Server còn có thể thực hiện ở dạng
remote, sẽ thưcj thi trong vùng hoạt động của máy khác. Dạng biên dòch của
Automation Server có thể là DLL (Dynamic Link Library) hoặc EXE
(Excutable). dạng EXE nó chỉ có thể thực thi ở dạng local hoặc remote
Bằng Visual C++ ta có thể xây dựng các Component bằng cách viết thẳng
với C API và thiết lập bằng tay các Interface, dựa trên việc tạo và dòch các file
IDL (Interface Definition Language). Thật may là Visual C++ đã cung cấp cho
ta cộng cụ ATL, dùng để tạo ra các thư viện liên kết động, trong đó chứa các
Interface cho phép những ứng dụng khác sử dụng được các object của nó.
1. Đối tượng Connection:
Để sử dụng đối tượng Connection, trước tiên ta phải tạo ra một instance cho
nó, đây thực sự là một thể hiện của Object này trong trang ASP. Phát biểu tạo
inStance cho Connection có cú pháp như sau:
<%
Connection_name=Server.CreatObject(“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ả các trang thì khi đó ta sẽ đặt instance của Connection có tầm
vực ở mức Application bằng cách đưa phát biểu tạo instance ở trên vào các thủ
tục Application_onStart():
<%
Sub Application_onStart()
Set Connection_name =
Server.CreateObject(“ADODB.Connection”)
End Sub
%>
Hoặc thiết lập tầm vực cho Connection ở mức session như sau:
<%
Sub Session_onStart()
Set Connection_name=
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 user 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ở dữ liệu truyền thống đều tạo một mối liên kết 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 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 user 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 kết nối tớ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-traffic)
Phương pháp tiện lợi hơn 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 kết nối mới thì thực hiện việc kiểm tra xem có liên
kết nào rảnh không, nếu không có thì sẽ tạo kết nối mới, ngược lại sẽ lấy liên
kết rảnh này mà không tạo liên kết mới.Nếu có một liên kết rảnh nào trong
Connection Pool tồn tại quá 60s thì nósẽ tự động hủy 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 ConnectionPool về giá trò 0.
Các phương thức của đối tượng Connection
- Open method: Sử dụng để mở một kết nối với Database.Sau khi tạo một
instance cho Connection Object, ta có thể mở một kết nối với data source để có
thể truy xuất dữ liệu, cú pháp cho phương thức trong VBScript như sau:
Connection.Open ConnectionString User Password
Trong đó ConnectionString là chuỗi đònh nghóa tên của data Source
(DNS),tên này được khai báo trong ODBC. User và Password, Sẽ thực hiện việc
mở Data Source.
- Execute method: Phương thức này cho phép thực thi một câu lệnh, tác động
lên data Source.
Theo trình tự sau khi đã có một kết nối tới Datasource, ta có thể sử dụng
nó với phương thức Execite với cú pháp trong VBScript như sau:
Connection.Execute Commantext, RecordAffected, options
Trong đó thông số option có các giá trò khác nhau tương ứng với mỗi loại
CommanText.Các giá trò của Option theo bảng sau:
Giá trò Danh hiệu hằng tương ứng Mô tả CommanText
0 adCmdUnknown Giá trò này mặc đònh khi đònh
nghóa
1 adCmdText CommandText là một câu lệnh
(ví dụ như SQL)
2 adCmdTable Tên của Table mà tasẽ tạo một
RecordSet từ đó
3 adCmdStoredPro Một stored procedure trong
datasource
Thông thường các giá trò trên sẽ được gáncho tên (danh hiệu), hằng và
được đặt trong các file include.
-Close method: trong các trang ASP, sau khi đã xử lý xong dữ liệu trên data
source, trước khi kết thúc trang sử dụng phải đóng lại các kết nối đã mở. Việc
đóng kết nối thực hiện nhờ phương thức Close.
Cú pháp như sau:
Connection.Close
Nếu chương trình không thực hiện việc này thì ASP sẽ tự động đóng
Connection đã mở trong trang, mỗi khi người sử dụng tham khảo qua trang
khác (đi khỏi tầm vực của biến instance). Nếu ta tạo instance và mở kết nối
trong các thủ tục Application hoặc session On Start thì việc đóng các
Connection này sẽ được thể hiện trong thủ tục on End.
2. Đối tượng Command:
Thay vì phải sử dụng phương thức Execute của đối tượng Connection để query
hay update data source, 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.
Việc tạo một instance cho đối tượng Command cũng giống như đối tượng
Connection. Nghóa là cũng sử dụng phương thức Server.CreateObject.
Command_name= Server.CreateObject(“ADODB.Command”)
Tuy nhiên để sử dụng đối tượng này ta cần xem xét các phương thức và thuộc
tính kèm theo.
Các phương thức (Method):
- Create Paramater: Dùng để tạo một đối tượng (thông số) trong tập thông số
- Execute: Dùng để thực thi câu lệnh được đặt tả trong thuộc tính
CommandText.
Các thuộc tính (Properties):
- ActiveConnection:Chỉ đònh đối tượng Connection nào được sử dụng trong
đối tượng Command.
- CommandText: Chỉ đònh câu lệnh cần thực thi trên cơ sở dữ liệu.