Tải bản đầy đủ (.doc) (18 trang)

Chuong 8 ASP va CSDL

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (326.68 KB, 18 trang )

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 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
149
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.
150
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
151

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)}; _
152
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:
TT Loại cơ sở dữ liệu Chuổi kết nối
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";
153
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
154
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>”
155
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 đó:
156

 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
157
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.
158
 Phương thức AddNew : cho phép tạo một record mới trong Recordset, giá
trị này sẽ được cập nhậtt vào Data Source sau khi thực hiện phương thức Update
hay UpdateBatch. (không sử dụng LockType với giá trị adLockReadOnly)
Cú pháp:
objRs.AdNew
objRs(“fieldName”) = value
. . .
objRs.Update
Ví dụ : bổ sung một khách hàng mới vào table Customer
<%
Dim objConn, objRs, strSQL
Set objConn = Server.CreateObject(“ADODB.Connection”)
objConn.Open “DSN=MyData; UID=sa; PWD=”
Set objRs = Server.CreateObject(“ADODB.Recordset”)
Set strSQL= “Select * from Customer”
objRs.Open strSQL, objConn,1, 3

‘ CursorType = 1 tức adOpenKeySet
‘ LockType = 3, tức adLockOptimistic
objRs.AdNew
objRs(“Ccode”) = ”K09”
objRs(“CName”) = ”Công ty IDE”
objRs(“CAddress”) = ”66 Quang Trung, Đà Nẵng”
objRs.Update
objConn.Close
objRs.Close
Set objConn = nothing
Set objRs = nothing
%>
Nhận xét : Khi truy cập vào cơ sở dữ liệu thì 4 dòng lệnh đầu luôn lặp lại, ta
lưu 4 dòng lệnh đó vào một tệp văn bản có phần mở rộng .inc (giả sử header.inc)
trong cùng thư mục với tệp .asp và khi cần sử dụng chỉ cần bổ sung bằng lệnh:
<! # include file = “header.inc” >
Tương tự như vậy cho 4 dòng lệnh cuối cùng, ta lưu trong tệp footer.inc
 Phương thức UpdateBatch : cho phép mọi thay đổi trên Recordset sẽ cập
nhật vào cơ sở dữ liệu, với phương thức này ta có thể cập nhật nhiều record cùng
lúc tương tự lệnh Update của ngôn ngữ SQL.
Cú pháp: UpdatBatch parameter
Với tham số được cho bởi một trong các giá trị : adAffectAll (mặc định),
adAffectCurrent, adAffectGroup
Ví dụ : Giảm giá 10% tất cả mặt hàng Tivi (Với ký tự đầu của Icode là “T”)
<! # include file=”header.inc” >
<!- Các lệnh HTML khác ->
<%
Set strSQL= “Select * from Item where Icode like ‘T*’”
objRs.Open strSQL, objConn, adOpenKeySet, adLockBatchOptimistic
objRs.MoveFirst

Do While not objRs.EOF
objRs(“Rate”)= objRs(“Rate”)*0.9
159
objRs.MoveNext
Loop
objRs.UpdateBatch adAffectGroup
%>
<! # include file=”footer.inc” >
 Phương thức Delete : cho phép xóa một record của table trong cơ sở dữ
liệu. Cần thiết lập CursorType = adOpenKeySet và LockType = adLockOptimistic.
Ví dụ : Tìm khách hàng có mã số “K06” và xóa record này.
<! # include file=”header.inc” >
<%
objRs.open “Customer”, objConn,1,3
objRs.Find “Ccode=’K06’”
If (not rs.EOF) then
‘ Nếu tìm thấy record thì rs.EOF = False
rs.Delete
End if
%>
<! # include file=”footer.inc” >
Tập hợp Fields và đối tượng Field
 Tập hợp Fields :
Tập hợp Fields chứa các đối tượng Field của một Recordset.
- Các thuộc tính : Count (số đối tượng Field trong Fields), Item (Chỉ đến một đối
tượng Field cụ thể trong Fields)
- Các phương thức : Append / Delete (thêm/xóa một đối tượng Field vào/trong
Fields), Refresh (Cập nhật đối tượng Field vào Fields
Để truy cập một Field của Recordset ta dùng : objRs.Fields(“fieldName”) hoặc
gọn hơn : objRs(“fieldName”).

 Đối tượng Field: chứa các thông tin trong một trường của Recordset.
- Các thuộc tính quan trọng :
Attribute : Thiết lập hay trả về thuộc tính của đối tượng Field
Name : Thiết lập hay trả về tên của một đối tượng Field
OriginalValue : Trả về giá trị nguyên thủy của Field
Value : Thiết lập hay trả về giá trị của Field
- Các phương thức :
AppendChunk : Thêm dữ liệu vào đối tượng Field
GetChunk : trả về một phần hay toàn bộ dữ liệu của Field, dữ liệu trả về có thể
gán cho một biến.
Ví dụ : Dùng đối tượng Field để liệt kê danh sách khách hàng có trụ sở công
ty chính ở Đà Nẵng (Hai ký tự đầu trong CCode là “D1” trong bảng Customer với
tên Field được lấy từ cấu trúc Table.
160
<! # include file =”header.inc >
<%
Dim strSQL, fieldName, NumOfField
strSQL= “Select * from Customer where Ccode like ‘D1’”
objRs.Open strSQL, objConn
objRs.MoveFirst
NumOfField = objRs.Fields.Count
‘ in tiêu đề các cột
Response.Write(“<TABLE><TR>”)
For each fieldName in objRs.Fields
Response.Write(“<TD>”&fieldName.Name&“</TD>”
Next
Response.Write(“</TR>”)
‘ in nội dung từng dòng
Do While Not objRs.EOF
Response.Write(“<TR>”)

For each fieldName in objRs.Fields
Response.Write(“<TD>”&fieldName.Value&“</TD>”)
Next
Response.Write(“</TR>”)
objRs.MoveNext
Loop
Response.Write(“</TABLE>”)
%>
<! # include file =”footer.inc >
8.2.4 Đối tượng Command
Đối tượng Command được dùng để gởi đến cơ sở dữ liệu một câu truy vấn
và thi hành câu truy vấn này để thao tác cơ sở dữ liệu, ví dụ : thực hiện cập nhật,
xóa, truy xuất các record v.v mà không cần sử dụng đối tượng Recordset.
Một trong những thế mạnh của đối tượng Command là cho phép sử dụng
Stored Procedure của SQL-Server với đối tượng Parameter (nghiên cứu ở phần
II.5 dưới đây).
Các thuộc tính
Để sử dụng đối tượng Command ta phải khởi tạo thể hiện của đối tượng này
và thiết lập các thuộc tính cho thể hiện này:
Dim objCmd
Set objCmd = Server.CreateObject(“ADODB.Command”)
ObjCmd.ActiveConnection = objConn ‘ Đối tượng Connection
ObjCmd.CommandText = strSQL ‘ Câu lệnh SQL, table
ObjCmd.CommandType = adCmdText ‘ Thuộc tính của CommandText
ObjCmd.CommandTimeOut = 30 ‘ Thời gian chờ thực hiện lệnh
ObjCmd.Prepared = false ‘Biên dịch/không bd trước khi thi
hành
Trong đó CommandType được chọn một trong các trị phù hợp : adCmdText
(câu lệnh SQL), adCmdTable (Tên Table), adCmdStoreProc (Store Procedure hay
Query), adCmdUnknown (giá trị mặc định)

161
Các phương thức
 Cancel : hủy bỏ việc thực thi của một phương thức.
 CreateParameter : Tạo một thể hiện của đối tượng Parameter
 Execute : Thi hành câu lệnh SQL, Query hay Stored Procedure được chứa
trong thuộc tính CommandText.
Ví dụ : Bổ sung thêm một trường chứa thông tin về số điện thọai của khách
hàng trong bảng Customer.
<! # include file = “header.inc” >
<% Dim objCmd, strSQL
Set objCmd = Server.CreateObject(“ADODB.Command”)
Set strSQL=”ALTER Table Customer ADD CPhoneNumber char(11)”
ObjCmd.ActiveConnection = objConn
ObjCmd.CommandText = strSQL
ObjCmd.CommandType = adCmdText
ObjCmd.CommandTimeOut = 30
ObjCmd.Prepared = false
ObjCmd.Execute
Set objCmd = Nothing %>
<! # include file = “footer.inc” >
Ghi chú : Nếu lệnh ObjCmd.Execute thực hiện không thành công, hãy bỏ
dòng lệnh , thời gian chờ ObjCmd.CommandTimeOut sẽ do SQL Server tối ưu hóa.
Các phương phương pháp sử dụng đối tượng Command
‘ Tạo đối tượng Connection objConn
‘ Tạo đối tượng Recordset objRs
‘ Tạo đối tượng Command objCmd
objCmd = Server.CreateObject(“ADODB.Command”)
‘ Kết nối đến đối tượng Command objCmd
objCmd.ActiveConnection = objConn
 Phương pháp 1: Sử dụng câu lệnh SQL

Set objCmd.CommandText = “Select * from Customer”
Set objCmd.CommandType = adCmdText
 Phương pháp 2: Sử dụng Table
Set objCmd.CommandText = “Customer”
Set objCmd.CommandType = adCmdTable
 Phương pháp 3: Sử dụng Stored Procedure của SQL Server
Set objCmd.CommandText = “add_Customer” ‘tên stored procedure
Set objCmd.CommandType = adCmdStoreProc
 Phương pháp 4: Sử dụng Stored Procedure của SQL Server với
Parameter
Cần thiết phải biết tạo Stored Procedure trong SQL Server. Đối tượng
Parameter và tập hợp Parameters chúng ta sẽ nghiên cứu ở phần sau
Set objCmd.CommandText = “add_Customer”
162
‘add_Customer là tên stored procedure với chức năng bổ sung một
khách hàng vào bảng Customer
Set objCmd.CommandType = adCmdStoreProc
Set p = objCmd.Parameters
a.Append objCmd.CreateParameters(“@Ccode”,adChar, adParamInput,6)
a.Append objCmd.CreateParameters(“@Cname”,adChar,
adParamInput,25)
a.Append objCmd.CreateParameters(“@CPhone”,adChar,
adParamInput,11)
objCmd(“@Ccode”) = “K10”
objCmd(“@CName”) = “Ngo Dinh Thuong”
objCmd(“@CPhone”) = “0511826981”
objCmd.Execute
 Phương pháp 5: Trả kết quả về đối tượng Recordset
objRs.Open objCmd, objConn
 Phương pháp 6: Trả kết quả về đối tượng Recordset với CursorType và

LockType phù hợp với nhu cầu cụ thể.
objRs.Open objCmd, objConn, adOpenKeySet, adLockOptimistic
8.2.5 Đối tượng Parameter
Đối tượng Parameter dùng để cung cấp thông tin chi tiết về tham số đơn
dùng trong Stored Procedure (SQL Server) hay Stored (Access).
Ví dụ :
Select * from Customer where Ccode=? And CPhone=?
Các dấu ? chính là các tham số ta phải truyền vào. Hình vẽ dưới đây minh
họa việc truyền tham số cho một Stored Query trong MS-Access. (Trong Access ta
thường dùng cú pháp : Select * from Customer where Ccode=[Nhập Ccode] )
Các thuộc tính
Attributes : kiểu Long , thuộc tính của đối tượng Parameter
Name : Tên của đối tượng Parameter
NumericScale : Kiểu Byte, chỉ dung lượng của giá trị số
Precision : Kiểu Byte, số chữ số thập phân
Size : Kiểu Byte, kích thước tối đa của giá trị số
Type : Kiểu DataTypeEnum, loại dữ liệu
Value : Kiểu Variant, giá trị tương ứng của đối tượng Parameter
Một số phương thức
163
AppendChunk : Thêm dữ liệu vào đối tượng Parameter
Cú pháp: object.AppendChunk data
Trong đó object có thể là đối tượng Parameter hay đối tượng Field
Delete : Xóa một đối tượng ra khỏi collection Parameters
Cú pháp: objParam.Delete index
Trong đó index là tên hay chỉ số của đối tượng Parameter cần xóa bỏ
Ví dụ : Cập nhật dữ liệu cho khách hàng có mã số “K10” với Cphone mới là
“0905492395”
- Câu lệnh SQL :
Update Customer

Set CPhone =”0905492395”
Where Ccode = “K10”;
- Câu lệnh SQL với tham số (có thể áp dụng cho khách hàng bất kỳ):
Update Customer
Set CPhone = ?
Where Ccode = ?;
Trong chương trình sau ta nghiên cứu cách sử dụng đối tượng Parameter và
đối tượng Command để thực việc việc cập nhật dữ liệu .
<%@ Language = VBScript >
<HTML><HEAD><TITLE> Parameter & Command Object<TITLE>
</HEAD>
<BODY>
<%
Dim objConn, objCmd,objParamN, objParamI, strSQL
objConn = Server.CreateObject(“ADODB.Connection”)
objConn.Open “DSN=MyData; UID=sa;PWD=;”
strSQL= “Update Customer Set Cname=?,CPhone=? Where Ccode=?”
objCmd = Server.CreateObject(“ADODB.Command”)
objCmd.ActiveConnection = objConn
objCmd.CommandText = strSQL
objCmd.CommandType = adCmdText
‘ Dữ liệu về số điện thọai của khách hàng đưa vào đối tượng Parameter
objParamP = Server.CreateObject(“ADODB.Parameter”)
objParamP.Name = “Customer Phone”
objParamP.Type = adVarChar
objParamP.Direction = adParamInput
objParamP.Size = 50
objParamP.Value = “0905492395”
objCmd.Parameters.Append objParamP
‘ Dữ liệu về mã số khách hàng đưa vào đối tượng Parameter

objParamC = Server.CreateObject(“ADODB.Parameter”)
objParamC.Name = “Customer Code”
objParamC.Type = adVarChar
objParamC.Direction = adParamInput
objParamC.Size = 50
objParamC.Value = “K10”
164
objCmd.Parameters.Append objParamC
objCmd.Execute
objCon.Close
Set objCon = Nothing
Set objParamP = Nothing
Set objParamC = Nothing
Set objCmd = Nothing
Response.Write “Update Completed !”
%>
</BODY></HTML>
Lưu ý :
- Ta có thể thay thế các lệnh trong khối tô màu sậm ở trên bằng cách sử dụng
phương thức CreateParameter của đối tượng Command. Cú pháp:
CreateParameter([Name],[Type],[Direction],[Size],[Value])
- Trong môi trường VBScript không sử dụng các toán tử đặc biệt của ngôn
ngữ SQL như Like, In, Between; cần tận dụng các hàm có sẵn của VBScript để thay
thế các mệnh đề tương đương.
Ví dụ :
objParamN = objCmd.CreateParameter(“Customer Phone”,
adVarChar, adParamInput,50,”0905492395”)
8.3. TỔNG KẾT
ADO là một thành phần trong bộ Microsoft Data Access Component
(MSAC, bao gồm ADO, OLEDB và ODBC), ADO cung cấp giao diện lập trình

quen thuộc với những thuộc tính và phương thức theo mô hình đối tượng. Ta có thể
dùng ADO để kết nối với nguồn dữ liệu tương thích với chuẩn OLEDB vốn là một
giao diện lập trình ở mức hệ thống, ngoài ra ta có thể sử dụng ADO để truy cập hệ
cơ sở dữ liệu tương thích với chuẩn ODBC.
Hiện nay, Microsoft đã đưa ra mô hình ADO.NET, ASP.NET với nhiều tính
năng mạnh, thao tác trên nhiều hệ cơ sở dữ liệu, đặc biệt là XML.
1. Liệt kê các câu lệnh SQL có thể áp dụng cho đối tượng RecordSet ,Connection và
Command (câu lệnh Select; các câu lệnh hành động – Update, Delete, Insert,
Select into; các câu lệnh định nghĩa dữ liệu : Create , Alter )
1. Giả sử một cơ sở dữ liệu Access 2000 được bảo vệ bằng mật khẩu, hãy viết câu
lệnh để kết nối tới cơ sở dữ liệu này
2. Áp dụng Command cho : query của cơ sở dữ liệu Access, stored procedure của
cơ sở dữ liệu SQL Server. Kiểm tra kết quả.
2. Giả sử ta có table lưu trữ thông tin tuyển sinh ts(Sbd, Hoten, Phai, NgaySinh,
MaTruong, MaNganh, Uutien, Diem1, Diem2, Diem3). Hãy xây dưng trang HTML,
trang ASP để thí sinh có nhập vào một trong hai thông tin về số báo danh hay họ
tên để tra cứu điểm thi của mình.
3. Xây dựng ứng dụng dựa trên cơ sở web (web base application) để thực hiện chức
năng quản lý giáo vụ của một khoa với ba loại user : admin (có toàn quyền trên
website), giáo viên (có quyền cập nhật điểm của học phần mình phụ trách, có
165
quyền xem toàn bộ thông tin khác) và sinh viên (chỉ có quyền xem thông tin, gởi
các ý kiến)
4. Xây dựng guestbook nhằm thu thập thông tin của khách hàng khi ghé thăm một
website, có các chức năng:
- Người sử dụng nhập họ tên, địa chỉ, email, mật khẩu và nội dung góp ý
- Người sử dụng có thể xem lại toàn bộ các ý kiến của mình theo thứ tự thời
gian
- Admin có quyền hiệu chỉnh, xóa các góp ý
5. Xây dựng một modun của ứng dụng web về thương mại điện tử, có các chức

năng:
- Khách hàng nhập họ tên, địa chỉ, email, mật khẩu và mã hàng hóa mà họ quan
tâm
- Khách hàng có thể cập nhật lại các thông tin đã đăng ký
- Admin có thể liệt kê danh sách các khách hàng đã đăng ký
6. Tra cứu thông tin trong website www.connectionstrings.com để lập bảng so sánh
khai báo chuổi kết nối đến một cơ sở dữ liệu của một hệ quản trị cơ sở dữ liệu
thông dụng.
1. ADO 2.5 Quick Reference guide, ; last updated Aug. 2005
2. Trần Ngọc Anh ; ASP & Kỹ thuật lập trình web; Nxb Trẻ, tp Hồ Chí Minh, 2004
3. Nguyễn Hà Nam, Lập trình Web với Active server pages; Viện CNTT Đại học
Quốc gia Hà Nội, 2001
166

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×