3. 2.5.5 Một số Modul khỏc
4.2 Giới thiệu về Hệ quản trị cơ sở dữ liệu SQL Server
4.2.2 Truy xuất cơ sở dữ liệu trong ASP
Ở phần trờn chỳng ta đó biết về cỏc khỏi niệm tổng quỏt về ASP và cỏc thành phần cần cú khi xõy dựng một ứng dụng. Trong mục này sẽ trỡnh bày kỹ
hơn về Active Data Object - ADO, đõ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).
4.2.2.1 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 Data Object). Đõ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.
4.2.2.2 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 4.2
Active Server Pages
ODBC Driver Active Database Component Active Data Object Data rovider Interface DATA
4.2.2.3 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ú thể duyệt và lấy ra một hay nhiều Record.
4.2.2.4 Đố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.
Cỳ phỏp: <%
Connection_name=Server.CreatObject(“ADODB.Connection”) %>
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.
a. 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 JavaScript nhƣ sau:
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 (32bit). 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.
Theotrỡ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 Execute với cỳ phỏp 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ỏn cho 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: 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.
4.2.2.5 Đố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.
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.
CommandTimeOut: Xỏc định thời gian thực thi lệnh, giỏ trị thời gian thực thi đƣợc tớnh theo giõy.
CommandType :Cho biết kiểu của query đặc tả trong CommandText
4.2.2.6 Đối tượng RecordSet
Bằng cỏch sử dụng đối tƣợng Connection ta cú thể thực thi cỏc query để
thờm(add), cập nhật (update), hay xúa (delete) 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 cỏc Record từ ADO, để hiển thị giỏ trị chỳng trong trang web. Để lấy lại kết quả trả về từ cỏc Query, chỳng ta phải sử dụng đối tƣợng RecordSet, thực chất nú đƣợc hiểu nhƣ một bảng trong bộ nhớ, và nú cung cấp cho ta cỏc phƣơng thức (method), thuộc tớnh (properties) để dễ dàng truy xuất cỏc Record trong nú.
Cỏc method:
AddNew: Là phƣơng thức dựng để tạo ra một record trong Update recordset.
Close: đúng lại đối tƣợng Recordset và cỏc đối tƣợng con của nú.
Delete:Xúa đi record hiện hành trong Recordset.
Move: dich chuyển vị trớ Record hiện tại.
MoveNext Cỏc phƣơng thức dịch chuyển con trỏ
MovePrevious MoveLast
Open : Mở một record mới, sau khi mở xong thỡ con trỏ nằm ở Record đầu tiờn trong recordset.
Cỏc properties:
AbsolutePosition : Số thứ tự của Record hiện tại.
BOF(Begin Of File): Cú giỏ trị True nếu vị trớ con trỏ nằm ở record đầu tiờn. CursorType : Kiểu con trỏ đƣợc sử dụng trong RecordSet.
EOF (End Of File): Cú giỏ trị True nếu vị trớ con trỏ nằm ở record cuối cựng trong Recordset.
RecordCount: Trả về số record trong Recordset.
a. Tạo Recordset:
Để cú đƣợc một biến Recordset ta sử dụng phỏt biểu tạo instance cho nú nhƣ sau:
Recordset_name = Server.CreateObject (“ADODB.Recordset”);
Sau khi đó cú biến recordset rồi 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 thi hành cỏc phƣơng thức Execute của đối tƣợng Connection vớ dụ nhƣ :
Recordset_name=ConnetionObject.Execute(CommandText, Recordaffected, option);
Ta cũng cú thể tạo một recordset bằng cỏch sử dụng phƣơng thức Open theo cỳ phỏp sau:
Recordset_name.Open(Source,ActiveConnection,CursorType,LockType, Option);
Source là Command Object, hay một lệnh SQL, hoặc là một Stored procedure.
ActiveConnection là tờn của Connection đó đƣợc mở kết nối với cơ sở dữ liệu cần làm việc.
CursorType là kiểu của con trỏ sử dụng khi mở Recordset, thụng số này cú kiểu số, và đƣợc đặt bằng cỏc tờn hằng tƣơng ứng nhƣ :
adOpenForwardOnly = 0 là giỏ trị mặc định, khi chọn thụng số này thỡ Record đƣợc mở ra chỉ để cho phộp ta duyệt cỏc record trong nú theo một chiều từ đầu đến cuối, tựy chọn này cũng khụng cho phộp ta cập nhật hay xúa bỏ cỏc record trong đú.
adOpenKeyset = 1 Khi mở recordset ở chế độ này, recordset đƣợc mở cú khả năng cho phộp ta cập nhật cỏc record, tuy nhiờn nú ngăn cản sự truy xuất tới một record mà User khỏc thờm vào Recordset.
adOpenKeyset = 2 Chế độ này cho phộp tất cả cỏc thao tỏc nhƣ thờm vào, loại bỏ, sửa đổi record trong recordset. Cho phộp thấy đƣợc sự thay đổi đú trờn record do user khỏc thực hiện. Ở chế độ này cho phộp ngƣời sử dụng duyệt theo tất cả cỏc chiều (lờn xuống) trong recordset.
adOpenStatic= 3Gần giống nhƣ chế độ OpenForwardOnly
LockType là kiểu Locking sử dụng khi mở Recordset. Bao gồm cỏc giỏ trị sau:
adLockReadOnly = 1 ta khụng thể thay đổi dữ liệu khi mở bằng chế độ khúa này.
AdLockpessimistic = 2 cho phộp thay đổi dữ liệu trờn record, sự thay đổi này sẽ cú tỏc dụng tức thời ngay trờn data source.
AdLockOpetimistic = 3 sẽ khúa record mỗi khi ta update.
AdLockBatchOptimistic = 4 Thực hiện việc cập nhật theo bú (Batch update)
Sau khi sử dụng xong một Recordset, hay trƣớc khi mở lại ta phải thực hiện việc đúng recordset lại bằng phƣơng thức Close với cỳ phỏp:
Recordset_name.Close()
c. Duyệt qua cỏc record trờn Recordset:
Khita đó cú một Recordset, để hiển thị hay truy xuất tới mỗi record trong
đú ta cú thể sử dụng cỏc phƣơng thức duyệt nhƣ: Movenext, Movefirst, Movelast, MovePrevious. Vị trớ hiện tại của con trỏ cũng là record mà ta sẽ lấy đƣợc nội dung khi ta muốn lấy đƣợc nội dung của Record kế tiếp hay phớa trƣớc, cũng nhƣ cỏc record ở vị trớ đầu, cuối của recordset. Ta sử dụng cỏc phƣơng thức di chuyển con trỏ: Movenext, Movefirst, Movelast, MovePrevious. Với cỳ phỏp:
Recordset_name.Movenext(); Recordset_name.MoveLast(); Recordset_name.MovePrevious(); Recordset_name.MoveFirst();
Khi di chuyển nhƣ vậy để trỏnh việc đƣa con trỏ tới cỏc vị trớ khụng xỏc định. Thụng thƣờng ta sử dụng cỏc thuộc tớnh của Recordset nhƣ BOF, EOF. Cỏc thuộc tớnh này cú ý nghĩa nhƣ sau:
Nếu BOF cú giỏ trị True nghĩa là con trỏ ở vị trớ đầu Recordset, khi
Recordset mới đƣợc mở thỡ BOF luụn cú giỏ trị này.
Khi con trỏ đó đi qua record cuối cựng trong Recordset, thỡ EOF sẽ cú giỏ trị True.