1. Trang chủ
  2. » Công Nghệ Thông Tin

Chuong 8 ASP va CSDL

18 563 0

Đ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 18
Dung lượng 0,93 MB

Nội dung

Trong chương 7 ta đã trình bày các vấn đề cơ bản để tạo ra một trang web động, với kỹ thuật của ASP ta có thể tùy biến giao diện và xử lý tính toán một cách hiệu quả, tuy nhiên thế mạnh của ASP là sử dụng cơ sở dữ liệu để đáp ứng yêu cầu thông tin của client. Hiện nay có hơn 90% trang web động đều sử dụng cơ sở dữ liệu quan hệ. Ta có thể tạo ra các ứng dụng chạy trên môi trường web (web base application) như như ecommercial, egovernment, elearning v.v... dựa trên kỹ thuật trang web động với công nghệ ASP, JSP, PHP v.v.. và một cơ sở dữ liệu quan hệ, tốt nhất là dùng một hệ quản trị cơ sở dữ liệu mạnh, đáp ứng mô hình clientserver như SQL server, Oracle, DB2, v.v...

Trang 1

Chương 8

ASP VÀ CƠ SỞ DỮ LIỆU

Trong chương 7 ta đã trình bày các vấn đề cơ bản để tạo ra một trang web động, với kỹ thuật của ASP ta có thể tùy biến giao diện và xử lý tính toán một cách hiệu quả, tuy nhiên thế mạnh của ASP là sử dụng cơ sở dữ liệu để đáp ứng yêu cầu thông tin của client Hiện nay có hơn 90% trang web động đều sử dụng cơ sở dữ

liệu quan hệ Ta có thể tạo ra các ứng dụng chạy trên môi trường web (web base

application) như như e-commercial, e-government, e-learning v.v dựa trên kỹ

thuật trang web động với công nghệ ASP, JSP, PHP v.v và một cơ sở dữ liệu quan

hệ, tốt nhất là dùng một hệ quản trị cơ sở dữ liệu mạnh, đáp ứng mô hình client-server như SQL client-server, Oracle, DB2, v.v

8.1 GIỚI THIỆU VỀ ADO

Ngôn ngữ SQL là một chuẩn công nghiệp trong việc truy vấn cơ sở dữ liệu quan hệ, tuy nhiên để truy cập vào hệ cơ sở dữ liệu của từng DBMS và thực hiện câu lệnh SQL ta phải sử dụng các trình điều khiển (driver) do DBMS này cung cấp, đây là công việc khá phức tạp đối với người phát triển ứng dụng Để giải quyết vấn

đề này, Microsoft đưa ra cơ chế cầu nối giữa ứng dụng và cơ sở dữ liệu bất kỳ mà không quan tâm đến sự khác biệt giữa các hệ cơ sở dữ liệu, đó là cơ chế cầu nối ODBC (Open Database Connection) ODBC là một giao diện lập trình cho phép các ứng dụng truy cập dữ liệu của một hệ quản trị cơ sở dữ liệu dùng SQL làm ngôn ngữ vấn tin chính thức

Để tăng hiệu quả kết nối và truy vấn cơ sở dữ liệu, Microsoft xây dựng cơ chế cầu nối và tập lệnh truy xuất cơ sở dữ liệu tổng quát ở dạng đối tượng là OLE

DB, trong đó ADO (ActiveX Data Object) là một đối tượng COM tập trung vào xử

lý dữ liệu thông qua OLE DB Tuy nhiên vai trò của ODBC không biến mất chừng nào hệ cơ sở dữ liệu chưa có provider riêng

8.1.1 Kiến trúc ADO

ADO cho phép một ứng dụng tương tác với nguồn dữ liệu như cơ sở dữ liệu, mail, tệp văn bản hay bất cứ loại dữ liệu nào hỗ trợ cơ chế cho phép giao tiếp với một ứng dụng thông qua OLE DB Ta có mô hình sau :

8.1.2 Một số khái niệm

Provider

Trong mô hình kiến trúc ADO nêu trên, ứng dụng là một trình tiêu thụ dữ

liệu (data consumer) vì nó cần truy xuất vào nguồn dữ liệu để xử lý, các tập lệnh

cho phép truy xuất vào nguồn dữ liệu được gọi là trình cung cấp (provider), nó cho

phép giao tiếp giữa nguồn dữ liệu và tầng điều khiển của OLE-DB ADO là tầng trung gian, trao đổi với nguồn dữ liệu mà không cần biết cách làm việc của

Trang 2

provider, để giúp OLE-DB biết provider nào cần giao tiếp khi mở kết nối ADO cần chỉ rõ provider phù hợp với nguồn dữ liệu

Microsoft cung cấp các provider cho các hệ cơ sở dữ liệu thông dụng sau:

• Microsoft.Jet.OLEDB.4.0 cho cơ sở dữ liệu MS Access

• SqlOLEDB.1 cho cơ sở dữ liệu SQL Server

• MsdaORA.1 cho cơ sở dữ liệu Oracle

• MsIDXS.1 cho cơ sở dữ liệu MS Indexing Service

Driver

Giữa Provider và Driver có chung đặc điểm là giao diện lập trình cho phép ứng dụng truy cập vào các hệ cơ sở dữ liệu, nhưng Driver khác hơn ở chỗ cho phép kết nối vào cơ sở dữ liệu theo chuẩn ODBC Microsoft cung cấp 22 driver thông

qua trình Data Sources (ODBC): MS Access, MS SQL, Visual Foxpro, Exel, Oracle,

Paradox, Text v.v Hình vẽ dưới đây minh họa mối quan hệ giữa OLE-DB và

ODBC

8.2 MÔ HÌNH ĐỐI TƯỢNG ADO

ADO được thiết kế để cung cấp phương pháp truy cập cơ sở dữ liệu chung

cho tất cả người sử dụng, ADO đưa ra mô hình đối tượng mà mỗi đối tượng được xem như tập các thuộc tính, phương thức, collection và các event có thể tác động

lên đối tượng Phiên bản hiện nay của ADO là 2.7, trong giáo trình này ta nghiên cứu ADO version 2.5, được cài đặt trong Windows 2000

Trang 3

ADO 2.5 cung cấp 9 đối tượng : Command, Connection, Error, RecordSet, Parameter, Property, Field, Stream, Record Trong giáo trình này ta nghiên cứu 7 đối tượng đầu tiên liên quan trực tiếp đến cơ sở dữ liệu quan hệ Trong 7 đối tượng

trên cùng có chung tập hợp Properties

Mô hình đối tượng ADO 2.5

8.2.1 Đối tượng Connection

Đối tượng Connection cung cấp khả năng kết nối từ một ứng dụng đến một

cơ sở dữ liệu nào đó

Các thuộc tính

Attributes: Thiết lập hay trả về một hay nhiều thuộc tính của đối tượng connection

CommandTimeOut : Thiết lập hay trả về thời gian tối đa đợi một lệnh thực thi, mặc định là 30 giây, nếu vượt quá thời gian TimeOut thì lệnh sẽ bị hủy và phát sinh lỗi

ConnectionString : Thiết lập hay trả về chi tiết chuổi kết nối đến cơ sở dữ liệu Cú pháp: objConn.ConnectionString(Arg=value; ) Các đối số có thể là : Provider, FileName, URL, Remote Provider, Remote Server

ConnectionTimeOut : Thiết lập hay trả về thời gian đợi một kết nối được mở, mặc định là 15 giây

CursorLocation : Thiết lập hay trả về vị trí của cursor service (dùng để kiểm sóat điều hướng record, khả năng cập nhật dữ liệu) ở phía client hay server Cú pháp: objConn.CursorLocation = adUseServer | adUseClient

DefaultDatabase : Thiết lập hay trả về tên cơ sở mặc định của đối tượng connection

Provider : Thiết lập hay trả về tên của Provider trong đối tượng connection

State : Trả về giá trị mô tả tình trạng của đối tượng, mặc định là adStateClosed

Các giá trị khác : adStateOpen, adStateConnecting adStateExecuting và adState.Fetching

Các phương thức

Open/Close : Mở/Đóng kết nối

Trang 4

Execute : Thực thi câu truy vấn

Cancel : Hủy bỏ một thực thi

BeginTrans : Bắt đầu một giao tác

CommitTrans: Lưu các thay đổi và kết thúc giao tác hiện hành

• Phương thức Open

Phương thức này dùng để mở một kết nối tới cơ sở dữ liệu, ngay sau khi tạo

ra một thể hiện của đối tượng kết nối, ta có thể truy cập đến cơ sở dữ liệu Cú pháp chung như sau:

‘ Tạo một thể hiện của đối tượng connection

Dim objConn

Set objConn = Server.CreateObject(“ADODB.Connection”)

‘ Mở kết nối

ObjConn.Open ConnectionString, [User], [Password] [Options]

Trong các ví dụ sau, ta giả sử rằng:

- Database Server tên : HOME

- Cơ sở dữ liệu có tên MyData (SQL)/ myData.Mdb(Access)

- DSN của cơ sở dữ liệu có alias là MyDSN

- User được phân quyền trên cơ sở dữ liệu có User ID: sa và Password

admin

Ta có thể tạo chuổi kết nối theo một trong 3 phương pháp :

 Dùng OLE-DB connection string : kết nối trực tiếp đến cơ sở dữ liệu với tốc

độ nhanh, không phụ thuộc host nơi đặt ứng dụng web, đây là phương pháp nên dùng

 Cơ sở dữ liệu MS-Access

Provider = Microsoft.Jet.OLEDB.4.0;_

DataSource=MapPath(‘myData.mdb’);_

User ID = sa; Password = admin

 Cơ sở dữ liệu MS-SQL Server

Provider = SQLOLEDB; DataSource = HOME; Initial Catalog = MyData;_

User ID = sa; Password = admin; Network Library = dbmssocn

‘ Kết nối với giao thức TCP/IP

Riêng MS-SQL Server 2000 cho phép ta thực hiện kết nối theo sự cài đặt SQL Server với NT- authentication:

Provider = SQLOLEDB; DataSource = HOME; Initial Catalog = MyData;_

Trusted_Connection = yes;”

 Cơ sở dữ liệu Oracle

Provider = MSDAORA.1; DataSource = HOME; Initial Catalog = MyData;_ User ID = sa; Password = admin

 Dùng ODBC connection string : kết nối gián tiếp thông qua ODBC

• Dùng System DSN : DSN=MyDSN; UID=sa; PWD=admin

• Dùng trực tiếp Driver của cơ sở dữ liệu

 Cơ sở dữ liệu MS-Access

Driver = {Microsoft Access Driver (*,mdb)}; _

Trang 5

DBQ = Server.MapPath(“myData.mdb”)

 Cơ sở dữ liệu MS-SQL Server

Driver = {SQL Server)}; Server=HOME; Database=MyData; _

UID=sa; PWD=admin

 Cơ sở dữ liệu Oracle

Driver = {Microsoft ODBC for Oracle)}; Server=HOME; Database=MyData;_

UID=sa; PWD=admin

Chuổi kết nối như là một tham số cho phương thức Open của đối tượng Connection có khá nhiều cách khai báo Hiện tại, web site

www.connectionstrings.com đã cập nhật khá phong phú các phương pháp khai báo chuổi kết nối đến hàng trăm loại dữ liệu khác nhau Ta có bảng tham khảo sau:

1 MS Access 2000 Provider = Microsoft.Jet.OLEDB.4.0;Data Source =_

mydatabase.mdb;User Id = admin;Password =;

2 MS Access 2007 Provider = Microsoft.ACE.OLEDB.12.0;Data Source = _

myFoldermyAccess2007file.accdb;Persist Security Info=_ False;

3 SQL Server 2000 Provider = sqloledb;Data Source = myServerAddress; _

Initial Catalog = myDataBase; Integrated Security = SSPI;

4 SQL Server 2005 Provider = SQLNCLI; Server = myServerAddress;_

Database = myDataBase; Uid = myUsername;_

Pwd=myPassword;

5 MySQL Provider = MySQLProv; Data Source = mydb;User Id =_

myUsername; Password = myPassword;

6 Oracle Provider = OraOLEDB.Oracle; Data Source =_

MyOracleDB; User Id = myUsername; Password =_ myPassword;

7 DB2 Driver = {IBM DB2 ODBC DRIVER}; Database =_ myDataBase; Hostname = myServerAddress; Port = 1234;_

Protocol=TCPIP;Uid=myUsername;Pwd=myPassword;

8 MS Excel 2000 Driver={Microsoft Excel Driver (*.xls)};_

DriverId=790;Dbq=MyExcel.xls;DefaultDir=c:mypath;

9 MS Excel 2007 Provider = Microsoft.ACE.OLEDB.12.0; Data Source =_ myFoldermyExcel2007file.xlsx; Extended Properties =_

"Excel 12.0;HDR=YES";

Trang 6

Sau khi mở kết nối, xử lý dữ liệu xong cần đóng kết nối và giải phóng tài nguyên của hệ thống bằng hai lệnh :

ObjConn.Close

Set ObjConn = Nothing

• Phương thức Execute

Phương thức này thi hành một câu lệnh SQL hay một Stored Procedure tác động lên cơ sở dữ liệu, kết quả trả về trên đối tượng Recordset Cú pháp:

ObjConn.Execute CommandText, RecordAffected, Options

Trong đó :CommandText : câu lệnh SQL, Stored Procedure hay Table trong

cơ sở dữ liệu

Ví dụ : Ta có thể sử dụng một trong hai cú pháp sau để truy vấn cơ sở dữ liệu

<%

Dim objConn, objRs, sqlText

Set objConn = Server.CreateObject(“ADODB.Connection”)

Set objRs = Server.CreateObject(“ADODB.Recordset”)

Set sqlText = “Select * from Customer”

objConn.Open “DSN=MyDSN”

‘ Phương pháp 1: sử dụng phương thức Open

objRs.Open sqlText, objConn

‘ Phương pháp 2: sử dụng phương thức Execute

‘ Set objRs = objConn.Exucute(sqlText)

%>

Tập hợp Properties

Tập hợp Properties bao gồm các đối tượng Property của đối tượng

connection

Ví dụ :

roperties.asp

-<HTML><HEAD><TITLE> Properties</TITLE></HEAD>

<BODY>

<%

Dim objConn

Set objConn = CreateObject("ADODB.Connection")

objConn.Open "DSN=Customer; UID=sa; PWD"

For each item in objConn.Properties

Response.Write(item.name&":"&item.value&"<br>")

Next

objConn.close

set objConn=nothing

%>

</BODY></HTML>

Các sự kiện

Trang 7

Trong mô hình đối tượng ADO, chỉ có hai đối tượng Connection và

Recordset mới có Event, tuy nhiên các ngôn ngữ lập trình VB, VC++ và VJ++ mới

có thể cho phép lập trình xử lý các sự kiện (handle event), do vậy trong giáo trình này ta không đề cập đến các event tương ứng cho hai đối tượng Connection và

Recordset khi lập trình với VBScript

8.2.2 Đối tượng Error

Đối tượng Error chứa các lỗi phát sinh trong quá trình truy cập và cập nhật

dữ liệu Mỗi đối tượng Error bao gồm các thông tin lỗi được lưu trữ trong tập hợp

Errors Trước khi sử dụng đối tượng Error ta phải tạo một thể hiện của đối tượng này Cú pháp :

Dim objErr

objErr = Server.CreateObject(“ADODB.Error”)

Các thuộc tính

Number : Số hiệu của lỗi

Description : Chi tiết của lỗi

Source : Nguồn gốc của lỗi

NativeError : Số hiệu lỗi do hệ quản trị cơ sở dữ liệu quy định

Tập hợp Errors

Các thuộc tính :

Count : Số đối tượng Error có trong tập hợp Errors

Item : Một đề mục cho phép truy cập đến đối tượng Error cụ thể trong Errors

Các phương thức:

Clear : Xóa tất cả thông tin trong đối tượng Error

Raise : Tự tạo thông báo lỗi

Ví dụ :

<%@ language = VBScript %>

<HTML><HEAD><TITLE> ADO Error </TITLE></HEAD>

<BODY>

<%

On error resume next

‘bỏ qua lỗi và tiếp tục lệnh tiếp theo

Dim objErr, objConn, objRs

Set objErr = Server.CreateObject(“ADODB.Error”)

Set objConn = Server.CreateObject(“ADODB.Connection”)

objConn.Open “DSN = MyAnotherDSN; UId=sa; Pwd=”

If objConn.Errors.Count>0

Nếu có lỗi phát sinh

For each objErr in objConn.Errors

If (objErr.Number<>0) then

Response.Write objErr.Number & “<br>”

Response.Write objErr.Description & “<br>”

Response.Write objErr.Source & “<br>”

Response.Write objErr.SQLState & “<br>”

Response.Write objErr.NativeError & “<br>”

Trang 8

End If Next

End if

objConn.Close

Set objErr = Nothing

Set objConn = Nothing

%>

</BODY></HTML>

Nhận xét : Tập hợp Errors là đối tượng con của đối tượng Connection, đối

tượng Errror là nột phần tử trong tập hợp Errors

8.2.3 Đối tượng Recordset

Đối tượng Recordset là đối tượng quan trọng nhất của ADO, đối tượng này dùng để truy xuất và cập nhật thông tin trong cơ sở dữ liệu Để sử dụng đối tượng Recordset phải tạo một thể hiện của đối tượng này Cú pháp:

Dim objRs

Set objRs = Server.CreateObject(“ADODB.Recordset”)

(Từ đây ta sử dụng biến đối tượng objRs trong toàn bộ các ví dụ)

ADO 2.5 cung cấp 25 thuộc tính và 25 phương thức cho đối tượng Recordset Dưới đây là các thuộc tính quan trọng và thông dụng

Các thuộc tính

 Thuộc tính BOF : Trả về True nếu con trỏ mẫu tin nằm trước record đầu tiên của Recordset Ngược lại, ta có thuộc tính EOF

 Thuộc tính RecordCount : Trả về số record của Recordset

 Thuộc tính Sort : Thiết lập hay trả về một chuổi giá trị danh sách các field của Recordset để sắp xếp

 Thuộc tính Source : Thiết lập hay trả về giá trị xác định nguồn dữ liệu cho Recordset

Các phương thức

 Phương thức Open : Khi sử dụng đối tượng Recordset, điều đó có nghĩa

mở một con trỏ dùng để điều hướng các record Cú pháp :

objRs.Open Source, ActiveConnection, CursorType, LockType, Options

Trong đó:

Trang 9

 Source là một trong các giá trị : tên table trong cơ sở dữ liệu, câu lệnh SQL, Stored Procedure hay View, đối tượng Command hay URL (chỉ đến đường

dẫn liên quan đến một Recordset lưu trữ dưới dạng tập tin)

 ActiveConnection là cách truy cập đến cơ sở dữ liệu thông qua chuổi kết nối hay thông qua đối tượng Connection Ví dụ :

objRs.Open “myTable”, “DSN=MyData” ‘thông qua chuổi kết nối

objRs.Open “myTable”, objConn ‘thông qua đối tượng connection

 CursorType là kiểu con trỏ mà cơ sở dữ liệu dùng khi mở Recordset Giá trị của CursorType được cho bởi các giá trị sau:

adOpenForwardOnly / 0 : đây là cursor mặc định, cho phép truy cập tuần tự các record trong Recordset

adOpenKeyset / 1: cho phép cập nhật các record nhưng không cho phép truy cập đến record được truy cập bởi người dùng khác

adOpenDynamic / 2: cho phép cập nhật các record ngay cả trong khi recordset được truy cập bởi người dùng khác, không hỗ trợ bookmark

adOpenStatic / 3 : Không cho phép cập nhật record khi nó được người sử dụng khác truy cập

 LockType là kiểu khóa được sử dụng trong Recordset Các giá trị của LockType gồm các giá trị :

adLockReadOnly / 1 : Khóa mặc định, các record trong Recordset chỉ được phép đọc mà không dược phép cập nhật

adLockPessimistic / 2 : Cho phép cập nhật dữ liệu trên Recordset và sự thay đổi này có hiệu lực ngay trên Data Source

adLockOptimistic / 3 : được dùng khi sử dụng phương thức Update

adLockBatchOptimistic / 4 : được dùng khi cập nhật dữ liệu theo lô

Ví dụ :

<%

Dim adOpenForwardOnly = 0

Trang 10

Dim adOpenReadOnly = 1

Dim strSQL = “select * from Customer”

Set objRs = Server.CreateObject(“ADODB.Recordset”)

objRs.Open strSQL, “DSN=MyDSN”, adOpenForwardOnly,

adOpenReadOnly

%>

 Options là cách biên dịch tham số Source nếu Source không chứa trong đối tượng Command

 Phương thức Support : Trả về giá trị boolean để kiểm tra đối tượng Recordset có cho phép Delete, Update, AdNew ? Cú pháp: objRs.Support(const)

Các hằng được chấp nhận bởi phương thức Support :

adAddNew, adApproxPosition, adBookmark, adDelete, adFind, adIndex, adHoldRecord, adMovePrevious, adNotify, adResync, adUpdate, adUpdateBatch, adSeek

 Phương thức Seek : Tìm một record trong Recordset với Index, tốc độ tìm kiếm nhanh hơn phương thức Find Cú pháp:

objRs.Seek KeyValue [, SeekOption]

 Phương thức Find : Tìm một record trong Recordset theo một điều kiện nào đó Cú pháp :

objRs.Find Criteria, SkipCurrent, SearchDirection, Start

Kết quả trả về trong thuộc tính EOF, nếu objRs.EOF = True thì không tìm ra, ngược lại tìm được mẫu tin

Trong đó :

 Criteria : chuổi miêu tả record cần tìm

 SkipCurrent : mặc định là True, bỏ qua record hiện hành

 SearchDirection : Chiều tìm kiếm, mặc định là tìm kiếm tiến tới

 Start : vị trí bắt đầu tìm kiếm, mặc định là record hiện thời

Ví dụ : objRs.Find “FieldName=’Thân Thị Tâm’”

 Phương thức Filter : Lọc tất cả record trong Recorset thỏa mãn điều kiện nào đó Cú pháp: objRs.Filter condition

Ví dụ :

objRs.Open “Customer”, “DSN=MyData”

objRs.Filter “Ccode = ‘K01’”

Lưu ý : Phương thức Find và Filter ít khi sử dụng, thay vào đó là câu truy vấn SQL linh hoạt và mạnh hơn nhiều

 Phương thức Move : cho phép di chuyển con trỏ mẫu tin đến một mẫu tin nào đó trong Recordset

Cú pháp : objRs.Move NumRecord, [Start]

Trong đó :

Nủmecord là số hiệu mẫu tin sẽ di chuyển đến kể từ vị trí hiện hành, số âm nếu lui , ngược lại số dương nếu di chuyển tới

 Phương thức MoveFirst : cho phép di chuyển con trỏ mẫu tin đến mẫu tin đầu tiên trong Recordset Tương tự ta có phương thức MoveNext di chuyển con trỏ mẫu tin đến mẫu tin kế tiếp của mẫu tin hiện thời

Ngày đăng: 06/04/2015, 11:51

TỪ KHÓA LIÊN QUAN

w