1. Trang chủ
  2. » Luận Văn - Báo Cáo

Chương 6: Truy xuất cơ sở dữ liệu

11 458 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 34,27 KB

Nội dung

Chương 6: Truy xuất cơ sở dữ liệu

Trang 1

CHƯƠNG 3 : TRUY XUẤT CƠ SỞ DỮ LIỆU TRONG ACTIVESERVER PAGE

Ở phần trên chúng ta đã biết về các khái niệm tổng quát về Active ServerPage và các thành phần cần có khi xây dựng một ứng dụng.Trong chương nàysẽ trình bày kỹ hơn về Active Data Object, đây chính là ưu điểm mạnh nhấtcho 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 trongmột database, bằng cách sử dụng Component Database Access của ActiveXhay còn gọi là thư viện ADO (Active DataObject).Đây cũng chính là điểmmạ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ầuhế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 ứngdụ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ôngqua 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ệnnay 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 DatabaseComponent

Active Data ObjectData ProviderInterface

DATA

Trang 2

Quá trình truy xuất cơ sở dữ liệu thông qua ODBCCác Object trong ADO

Các Object chính trong đó là: Connection, RecordSet và Command, ngoàiba 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ằngcá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ộthay nhiều Record Sau đậy ta xem xet cụ thể cấu tạo cũng như cách sử dụngcủ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 ServerPages, bằng bất cứ ngôn ngữ lập trình nào hổ trợ cho việc tạo AutomationServer Các ngôn ngữ có hổ trợ kỹ thuật này hiện nay là Visual Basic, VisualC++ từ các version 4.0 trở về sau Việc chọn ngôn ngữ nào để hiện thực là tùythuộ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áccô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 saukhi 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ộngnghệ ActiveX của Microsoft hầu hết đều đưa ra các công thức để hiện thực cáccomponent này bằng Visual Basic 4.0 và 5.0 tuy nhiên trong việc lập trìnhhướ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ớicấ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 codeComponent 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ạigầ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 emxin trình bày các bước để hiệb thực một component bằng môi trường VisualC++ như là một cách hiện thực khác hơn trong đó sử dụng các khả năng củacô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ácnhì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

Trang 3

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 trongvùng hoạt động của controller, hoặc có thể ở dạng local, chỉ thực thi trongkhông gian họat động của nó Automation Server còn có thể thực hiện ở dạngremote, sẽ thưcj thi trong vùng hoạt động của máy khác Dạng biên dịch củaAutomation 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ẳngvớ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 fileIDL (Interface Definition Language) Thật may là Visual C++ đã cung cấp chota cộng cụ ATL, dùng để tạo ra các thư viện liên kết động, trong đó chứa cácInterface 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 chonó, đây thực sự là một thể hiện của Object này trong trang ASP Phát biểu tạoinStance cho Connection có cú pháp như sau:

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 Sourcecố định cho tất cả các trang thì khi đó ta sẽ đặt instance của Connection có tầmvự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

%>

Trang 4

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 Connectionpooling 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ớidatabase mà nó sử dụng, còn các ứng dụng Database trên web lại mở và đóngcác liên kết này ở mỗi trang web.Một phương pháp cho các ứng dụng Databasetrê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ớtsố 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ốinà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ênkế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ênkế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 trongConnection 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ộtinstance 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ệcmở Data Source.

- Execute method: Phương thức này cho phép thực thi một câu lệnh, tác độnglên data Source.

Theo trình tự sau khi đã có một kết nối tới Datasource, ta có thể sử dụngnó 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ạiCommanText.Các giá trị của Option theo bảng sau:

Giá trị Danh hiệu hằng tương ứng Mô tả CommanText0 adCmdUnknown Giá trị này mặc định khi định

nghĩa

Trang 5

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ộtRecordSet từ đó

3 adCmdStoredPro Một stored procedure trongdatasource

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 datasource, 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:

Nếu chương trình không thực hiện việc này thì ASP sẽ tự động đóngConnection đã mở trong trang, mỗi khi người sử dụng tham khảo qua trangkhác (đi khỏi tầm vực của biến instance) Nếu ta tạo instance và mở kết nốitrong các thủ tục Application hoặc session On Start thì việc đóng cácConnection 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 để queryhay update data source, ta có thể sử dụng đối tượng Command đễ thi hành cácthao 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ượngConnection 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ộctí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ínhCommandText.

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.

Trang 6

- CommandTimeOut: Xác định thời gian thực thi lệnh, giá trị thời gian thựcthi được tính theo giây.

- CommandType : Cho biết kiểu của query đặc tả trong CommandText- Prepared:tạo ra lệnh chuẩn trước khi thực thi.

Tạo ActiveConnection

Sau khi đã có các instance của các Connection Object đã được kết nối với cơsở dữ liệu, và Command Object.Lúc này nếu muốn sử dụng Command Object taphả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ệucần làm việc) vào cho thuộc tính ActiveConnection của Command Object

Command_name ActiveConnection = Command_name;

Thực thi Query

Ta có thể sử dụng phương thức Execute của Command gần giống nhưConnection.Tuy nhiên điểm khác với Connection Tuy nhiên điểm khác vớiConnection là đối với Command nếu ta có dự định thi hành một lệnh nào thì taphải động cho các giá trị thuộc tính CommandText, Parameter,… Ví dụ sau làmột đoạn chương trình thực hiện một query trong datasource:

< %

oConn = Server.CreateObject(“ADODB.Connection”)oCmd = Server.CreateObject(“ADODB.Command”)oConn.Open (“Pubs”, “sa”, “”);

oCmd.ActiveConnetion = oConn;

ocmd.CommandText = “DELETE* FROM Table”;

oCmd.CommandType = 1; ‘ thể hiện rằng CommandText là mộtSQL

oCmd.Prepared = true ‘thực hiện compile cậu lệnhoCmd.Execute();

oCmd.ActiveConnection = nothing ;%>

Ta gán giá trị CommandTimeOut ở giá trị thích hợp, thông thường là 30,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.

Sử dụng thông số cho các lệnh SQL

Nếu như query cần thực thi có yêu cầu thông số, thì ta phải thêm các thôngsố này vào Collections parameter, trước khi thực thi câu lệnh.đối với phươngthức Execute của đối tượng Connection không có khả năng này.

Khi sử dụng query có tham số thì cú pháp của phương thức có dạng như sau:

Command.Execute({RecordAffected}, Parameter, Option);

Record và Option có chức năng và giá trị giống như trong ConnectionObject Tham số parameter là một dãy thông số được thực hiện trong một array,mỗi một phần tử của array là một thông số, theo thứ tự các thông số trong câu

Trang 7

lệnh Để tìm hiểu cách tạo ra thông số trong danh sách các thông số câu lệnh taxem các method và properties của Parameter collections, trong phần tiếp theo.

Tạo và thêm thông số vào Collection

Đối tượng Parameter collection là đối tượng lưu giữ các thông số cho query,mà sẽ được thực thi bởi Command Object.Thay vì phải đưa các thông số nàyngay khi thực hiện query,Ta sẽ chuẩn bị nó trước trong Parameter collection,điều này được phép thực hiện nhờ các method và properties của Parameter.

- Count: trả vầ các thông số có trong Collections.

- Item : được sử dụng để lấy giá trị của một thông số trong Collections.

Mỗi phần tử của Parameter Collection có thể coi như một Parameter Objectvà chúng cũng có các Properties riêng như:

- Attribute: Thể hiện kiểu dữ liệu mà thông số đó chấp nhận

- Dicrection: Thể hiện hướng củ athông số là Input hay Output,hay cả hai,hay nó là giá trị từ stered procedure.

- Name: Tên thông số.

- NumberScale: Số chữ số thập phận trong thông số kiểu số.- Precision: Chữ số của thông số kiểu số.

- Size: Kích thước lớn nhất, tính theo byte.- Type : kiệu dữ liệu thông số.

- Value: Giá trị gán cho thông số.

Để thêm một thông số ới vào Collection, trước tiên ta phải tạo một instacecho Parameter Object và thiết lập các giá trị thuộc tính cho nó.Sau đó sử dụngphương thứcAppend.

Ví dụ các bước cần thực hiện khi tạo danh sách thông số:

hay là oCmd.Parameter.Item(tên_thông_số);

Trang 8

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 thicác query để add, update, hay delete một record trong data source Tuy nhiêntrong 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 taphải sử dụng đối tượng RecordSet, thực chất nó được hiểu như mộtbảng trong bộ nhớ, và nó cung cấp cho ta các phương thức, properties để dễdàng truy xuất các Record trong nó.

- 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 đầutiê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ốicùng trong Recordset.

- RecordCount: Trả về số record trong Recordset.

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áchlưu kết quả trả về, mỗi khi thi hành các phương thức Execute của đối tượngConnection hay Command, ví dụ như :

Recordset_name = ConnetionObject.Execute(CommandText,Recordaffected, option);

Hoặc

Trang 9

Recordset_name = ConnetionObject.Execute(CommandText,Parameter, option);

Ta cũng có thể tạo một recordset bằng cách sử dụng phương thức Opentheo cú pháp sau:

Recordset_name.Open(Source, ActiveConnection, CursorType,LockType, Option);

+ 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êmvà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ườisử dụng duyệt theo tất cả các chiều (lên xuống) trong recordset.

+ adOpenStatic = 3 Gần giống như chế độ OpenForwardOnly

+ LockType là kiểu Locking sử dụng khi mở Recordset Bao gồm cácgiá 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ó (Batchupdate)

Trang 10

Khi ta đã 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ới nguyên tắc gần giống nhưviệc duyệt các record trong mộtfile có cấu trúc, tức là ttồn tại một con trỏ tưởng tượng, 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ủaRecord kế tiếp, hay jphía trước, cũng như các record ở vị trí đầu, cuối củarecordset, ta sử dụng các phương thức di chuyển con trỏ: Movenext, Movefirst,Movelast, MovePrevious Với cú pháp:

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ácthuộ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, khiRecordset 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.

Làm việc với recordset thông qua Fields Collections:

Ta cũng có thể truy xuất tới các Fields của mỗi record trong Recordset bằngcách sử dụng Collection fields với các thuộc tính của nó như: Count, Item.

Recordset_name.Fields.Item (“tên fields”) trả về nội dung có trong Recordhiện tại.

Recordset_name.Fields.Item (“Index”) trả về nội dung của fields thứ indextrong Record hiện tại.

Recordset_name.Fields (“index”) trả về tên của fileds thứ index trongRecord hiện tại.

Chú ý : rằng chỉ số của các fields trong Record được đánh số từ 0 cho tới giátrị Recordset_name.Fields.Count – 1.

Ngày đăng: 31/10/2012, 15:03

TỪ KHÓA LIÊN QUAN

w