1
TRUY XUẤT CƠ SỞ DỮ LIỆU BẰNG
ADO.
I. Thư viện ADO và ODBC
II. Sử dụng các đối tượng Connection và
Recordset
2
Giới thiệu
Hiện nay hầu các web site từ đơn giản cho
đến các web site phục vụ thương mại điện
tử đều có sử dụng cơ sở dữ liệu (CSDL)
để lưu trữ thông tin. Chính vì thế việc viết
các trang web có truy xuất tới database là
một trong những yêu cầu bắt buộc với
những người lập trình web.
Nội dung của chương này đề cập tới các kỹ
thuật lập trình với CSDL bằng ASP, sử
dụng thư viện ADO.
3
I. Thư viện ADO và ODBC
Database
ODBC
ADO
(OLE-DB)
Script
Để cung cấp khả năng làm việc với CSDL cho các trang web, ASP sử dụng thư
viện COM có tên là ADO (ActiveX Data Objects). ADO là một bộ các đối tượng
thực hiện các thao tác cơ bản để làm việc với CSDL. Các đối tượng của ADO có
thể được sử dụng bởi các lệnh script của trang ASP một cách khá dễ dàng, điều
này làm cho việc xây dựng các ứng dụng CSDL là một trong các đặc điểm ưu việt
của ASP.
Cấu trúc lập trình ASP với ADO được thể hiện như sau:
Nhờ có ODBC (Open DataBase
Connectivity) cung cấp cách thức
truy xuất tới các cấu trúc vật lý của
các loại DBMS khác nhau mà người
lập trình với ADO chỉ cần biết đến
lược đồ trừu tượng của cơ sở dữ
liệu cần truy xuất. Hay nói cách khác,
ADO và ODBC cung cấp cho người
viết kịch bản .asp khả năng truy xuất
độc lập với cơ sở dữ liệu vật lý.
4
1.Các cách tạo kết nối tới CSDL
Kịch bản sử dụng ADO có thể kết nối tới CSDL (MS-Access) bằng các cách
sau đây:
Sử dụng một danh hiệu gọi là DSN (Data Source Name).
Với các lệnh script trong trang .asp thì DSN được coi như danh hiệu đại diện cho
CSDL cần làm việc.
Cách tạo danh hiệu DNS (cho các cơ sở dữ liệu Access) như sau:
1. Khởi động chương trình: Control Panel/ODBC trên server.
2. Chọn SystemDSN
3. Chọn Add.
4. Chọn MicroSoft Access Driver(*.mdb), bấm finish
(Chú ý rằng: ở bước này có thể chọn một driver khác cho các DBMS mà hệ
thống hỗ trợ, để kết nối tới cơ sở dữ liệu của DBMS đó. Ví dụ như: SQL server,
Oracle…)
5. Điền tên Data source name: MYDATA
6. Bấm Select để chọn file mydb.mdb
(Hoặc chọn Database nếu kết nối tới các DBMS khác)
7. Bấm OK, kết thúc
Sau khi đã có một DNS, việc truy xuất tới cơ sở dữ liệu mà DNS đó đại diện được
thực hiện khà dễ dàng thông qua các đối tượng mà thư viện ADO cung cấp.
5
Sử dụng file DSN
File DSN là một file đặc tả các thông số cho kết nối thông qua ODBC. File này là
một file văn bản trơn, có nội dung như sau:
[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
ReadOnly=0
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
FILL=MS Access
DriverId=25
MaxScanRows=8
axBufferSize=512
ImplicitCommitSync=
Thay vì phải sử dụng danh hiệu DSN như ở trên, khi thực hiện kết nối người lập
trình chỉ cần tạo file DSN và trong kịch bản xác định việc sử dụng file này.
Phương pháp sử dụng file DSN có lợi điểm là: Người lập trình không cần phải
khai báo DSN tường minh bằng chương trình ODBC trên server.
6
Sử dụng MS-OLEDB provider
Microsoft OLEDB provider cho phép có thể đặc tả các tham
số để kết nối tới bất kỳ một CSDL nào thông qua ODBC.
Cú pháp của chuỗi đặc tả kết nối tới CSDL MS-Access,
không có khai báo DSN tường minh như sau:
“DBQ=Duong_dan_toi_file_mdb;Driver={Microsoft
Access Driver (*.mdb)};
7
2. Các đối tượng của ADO
ADO cung cấp cho người lập trình script các đối tượng sau:
Tên đối tượng Chức năng Tên tham khảo
Connection Duy trì, thiết lập và hủy bỏ cầu nối tới
CSDL
ADODB.Connection
Recordset Là tập các record được lấy ra từ CSDL,
hay là kết quả của một truy vấn SQL
tới CSDL thông qua cầu nối ODBC.
ADODB.Recordset
Command Cho phép thực hiện các thao tác trên
CSDL, như thực thi các stored-
procedure, ...
ADODB.Command
Error Lưu chứa các mã lỗi.
Fields Là tập các thuộc tính mà recordset đang
thể hiện (còn gọi là tên các cột dữ
liệu)
Parameter Lưu trữ các tham số cụ thể cho đối tượng
Command.
8
3. Sơ đồ thứ bậc của các đối tượng ADO
Đối tượng Connection
Đối tượng Recordset
Tập hợp Fields
Đối tượng Command
Tập hợp Parameters
Tập hợp Errors
Khi sử dụng một đối tượng ADO, cũng giống như
việc sử dụng các component khác, chúng ta phải
tạo các biến thể hiện của chúng. Cú pháp chung
cho việc tạo thể hiện là:
Tên_ThểHiện=Server.CreateObject(“ADODB.Tên_
ĐốiTượng”);
Ví dụ:
Tạo đối tượng Connection có tên là Conn:
Conn=Server.CreateObject(“ADODB.Connection”);
Tạo đối tượng Recordset có tên là Rs:
Rs=Server.CreateObject(“ADODB.Recordset”);
Tạo đối tượng Command có tên là Comm:
Comm=Server.CreateObject(“ADODB.Command”);
9
II. Sử dụng các đối tượng Connection và
Recordset
Trong phần này, chúng ta sẽ sử dụng các đối tượng
Connection, Recordset để tạo các trang .asp có khả
năng thực hiện các thao tác: cập nhật, thêm, xóa và
liệt kệ các record trong một cơ sở dữ liệu .mdb
10
1. Cơ sở dữ liệu ví dụ
Giả sử có một cơ sở dữ liệu (đơn giản) lưu trữ thông tin về
các mặt hàng mà một công ty muốn trình bày trên web site
của họ. Luợc đồ của CSDL này được miêu tả như sau:
1. MAT_HANG(MaMH, TenMH, GiaMH, TinhNang, MaLoai,
SoLGH, DonVi, MaTien)
Ý nghĩa: MAT_HANG lưu trữ các mặt hàng có trong kho. Mỗi
mặt hàng gồm có các thông tin như: Mã mặt hàng (MaMH,
Autonumber), Tên mặt hàng (TenMH, text), Giá thành mặt
hàng cho một đơn vị tính (GiaMH, float), mô tả tính năng
(TinhNang, text), Mã số loại hàng (MaLoai, int), Số lượng
hàng còn lại trong kho (SoLGH, int), mã số đơn vị tính
(DonVi, int), mã loại tiền giá bán (MaTien, int)
11
2. LOAI_HANG(MaLoai, TenLoai)
Ý nghĩa: LOAI_HANG là danh sách các chủng loại hàng có trong kho.
Mỗi loại hàng gồm có các thông tin: Mã số loại (MaLoai, Autonumber),
Tên chủng loại (TenLoai, text).
3. HANG_SX(MaHSX, TenHangSX)
Ý nghĩa: Lưu trữ danh sách các hãng sản xuất có cung cấp hàng cho
công ty. Một hãng sản xuất gồm có các thông tin: Mã số hãng sản xuất
(MaHSX, autonumber), tên hãng sản xuất (TenHSX, text)
4. CUNG_CAP(MaMH, MaHSX)
Ý nghĩa: Xác định các mặt hàng do các hãng sản xuất cung cấp cho
công ty. Bao gồm: Mã mặt hàng(MaMH, int), mã số hãng cung cấp
(MaHSX, int)
5. DON_VI(DonVi, TenDV)
Ý nghĩa: Là danh sách các loại đơn vị tính được sử dụng. Bao gồm:
mã đơn vị (DonVi, Autonumber), tên đơn vị tính (TenDV, text).
6. LOAI_TIEN(MaTien, TenLoai)
Ý nghĩa: Là danh sách các loại đơn vị tiền tệ được sử dụng trong bảng
giá. Bao gồm: mã đơn vị tiền tệ (Matien, Autonumber), tên loại tiền
(TenLoai, text).
Lược đồ trên được cài đặt bằng MS-Accsess với tên là mydb.mdb
12
Quá trình làm việc với CSDL trong một trang ASP.
Gồm có ba bước:
1. Thiết lập kết nối tới CSDL cần làm việc.
2. Thực hiện các thao tác với CSDL thông qua các truy
vấn SQL hoặc các đối tượng ADO.
3. Đóng kết nối.
13
2. Đối tượng Connection
Đối tượng Connection được sử dụng để tạo, duy trì và đóng một cầu nối từ
chương trình tới CSDL thông qua phương thức ODBC. Đối tượng
Connection cũng dùng để thực hiện các thao tác quản lý transaction và
thực hiện lệnh truy vấn SQL. Phần này sẽ hướng dẫn sử dụng đối tượng
Connection để: Tạo và duy trì cầu nối ODBC, đóng cầu nối và thực hiện
lệnh truy vấn SQL.
Thiết lập kết nối
Sau khi đã có một thể hiện của đối tượng Connection, ta có thể thiết lập
kết nối tới CSDL bằng phương thức Open, với cú pháp như sau:
TênConnection.Open([ConnectionString][, UserID][, Password]);
Trong đó:
UserID: tên tài khoản được phép sử dụng CSDL. Tham số này là tùy chọn.
Password: Mật khẩu của tài khoản UserID. Tham số này là tùy chọn.
ConnectionString: Tham số này có thể không có, nếu đã khởi động giá trị
cho thuộc tính ConnectionString của đối tượng Connection. Giá trị của
tham số này (của thuộc tính) là một chuỗi đặc tả thông tin của kết nối.
Chuỗi này có thể là một tên DSN hoặc một chuỗi xác định cụ thể các thông
tin kết nối.
14
Ví dụ 1:
Tạo kết nối tới CSDL mydb.mdb thông qua ODBC, sử dụng tên DSN,
bao gồm các bước sau:
Khai báo ODBC Data Source Name.
Sau khi khai bao, giả sử chúng ta có một DSN tên là: “MYDATA”.
Khai báo này chỉ thực hiện một lần, khi đưa cơ sở dữ liệu mới lên server.
Mở kết nối. Có thể thực hiện bằng hai cách sau:
<%
Conn=Server.CreateObject(“ADODB.Connection”);
Conn.Open(“MYDATA”);
%>
Hoặc:
<%
Conn=Server.CreateObject(“ADODB.Connection”);
Conn.ConnectionString=”MYDATA”;
Conn.Open();
%>
15
Ví dụ 2:
Tạo kết nối tới CSDL mydb.mdb thông qua ODBC bằng cách sử dụng
file DSN.
Trong ví dụ 1, chúng ta nhận thấy, mỗi khi đưa một cơ sở dữ liệu mới
lên server, ta phải thực hiện khai báo DSN. Công việc khai báo này
thường do người quản trị thực hiện. Một cách khác để không phải khai
báo tên DSN tường minh như trên là sử dụng file DSN, file này sẽ chứa
các thông tin cần thiết cho việc kết nối.
Các bước thực hiện:
16
Bước 1. Tạo file DSN (mydata.dsn), file này có nội dung giống
nhau cho các kết nối tới cơ sở dữ liệu Access. Có nội dung
như sau:
-----mydata.dsn---------
[ODBC]
DRIVER=Microsoft Access Driver (*.mdb)
ReadOnly=0
UserCommitSync=Yes
Threads=3
SafeTransactions=0
PageTimeout=5
FILL=MS Access
DriverId=25
MaxScanRows=8
axBufferSize=512
ImplicitCommitSync=
17
Bước 2. Thực hiện kết nối.
<%
Conn=Server.CreateObject("ADODB.Connection");
DBPath=Server.MapPath("mydb.mdb");
DSNPath=Server.MapPath("mydata.dsn");
Conn.ConnectionString="fileDSN="+DSNPath+";DBQ="+DBPath;
Conn.Open();
%>
18
Ví dụ 3:
Tạo kết nối tới CSDL mydb.mdb thông qua ODBC bằng cách đặc tả chuỗi
ConnectionString.
<%
DBPath = Server.MapPath("mydb.mdb");
Conn = Server.CreateObject("ADODB.Connection");
ConString=’’DBQ=’’+DBPath +’’;Driver={Microsoft Access Driver (*.mdb)};’’;
Conn.ConnectionString=ConString;
Conn.Open();
%>
19
<%
var sqlconnection;
sqlconnection = Server.MapPath(“MyDB.MDB");
var conn = Server.CreateObject("ADODB.Connection");
conn.ConnectionString = " Provider = Microsoft.Jet.OLEDB.4.0; data source = '"+
sqlconnection +"' ";
conn.Open();
%>
20
Đóng kết nối.
Khi đã có một kết nối tới CSDL, chúng ta có thể thực hiện các thao tác dựa
trên kết nối đó. Đối tượng Connection sẽ duy trì kết nối cho tới khi, hàm
Close() được thực thi, hoặc sự thực thi đã rời khỏi tầm vực của biến thể
hiện đối tượng Connction.
Cú pháp đóng kết nối như sau:
Tên_Connection.Close();
Ví dụ 4: Đóng kết nối Conn.
<%
Conn.Close();
%>
Chú ý: Khi thực hiện đóng một kết nối, thì tất cả các đối tượng ADO khác
sử dụng kết nối này đều chấm dứt hoạt động.
21
Thực hiện câu truy vấn SQL.
Đối tượng Connection cung cấp phương thức Execute cho việc thực hiện một
truy vấn SQL tới CSDL. Cú pháp sử dụng phương thức này như sau:
Cho trường hợp các truy vấn lấy dữ liệu:
Tên_Recordset=ConnObject.Execute(CâuLệnhSQL,SốRecords,LoạiLênh);
Cho trường hợp các truy vấn thay đổi nội dung CSDL
ConnObject.Execute(CâuLệnhSQL,SốRecords,LoạiLênh);
Trong đó
CâuLệnhSQL: là một chuỗi thể hiện câu lệnh SQL, hoặc tên bảng hoặc tên thủ
tục (stored-procedure)…
LoạiLệnh: là hằng số, xác định CâuLệngSQl, cụ thể là câu truy vấn hay tên
bảng hay tên thủ tục…. Các giá trị tương ứng là:
0: Câu truy vấn
1: Tên bảng
2: tên stored-procedure
3: Là chuỗi đặc tả thực thi chưa biết.
Giá trị mặc nhiên là 0.
SốRecord: Là một biến nguyên, được khởi động giá trị là 0, trước khi thực thi.
Sau khi thực thi, có giá trị là số Record mà lệnh SQL tác động tới.
22
Ví dụ 5:
Đoạn chương trình chèn một record vào bảng LOAI_HANG trong CSDL.
<%
DBPath = Server.MapPath("mydb.mdb");
Conn = Server.CreateObject("ADODB.Connection");
ConString="DBQ="+DBPath +";Driver={Microsoft Access Driver (*.mdb)}; ’’;
Conn.ConnectionString=ConString;
Conn.Open();
SQL=’’ insert into LOAI_HANG(TenLoai) values (‘Noi Com Dien’)’’;
Conn.Execute(SQL);
Conn.Close();
%>
Chú ý: Vì thuộc tính MaLoai có kiểu là autonumber, nên khi thực hiện insert, ta
không điền giá trị cho thuộc tính này.
23
Ví dụ 6: Tạo trang web có tên là LoaiHang.htm cung
cấp form để điền tên loại hàng, sau khi submit sẽ gửi
dữ liệu tới trang insertLH.asp, trang này thực hiện
thêm tên loại hàng nhận được vào CSDL.
<!---LoaiHang.htm -- >
<HTML>
<HEAD><TITLE>Insert Loai_Hang</TITLE></HEAD>
<BODY>
Please, type the value of TenLoai:<BR>
<FORM ACTION="insertLH.asp" METHOD="Post">
TenLoai:<INPUT NAME="TenLoai" TYPE="text">
<INPUT NAME="Sbmt" TYPE="submit"
VALUE="Insert toLOAI_HANG">
<INPUT NAME="Reset" TYPE="reset" VALUE="Clear">
</FORM>
</BODY>
</HTML>
24
Ví dụ 6 (tt)
<!—insertLH.asp -- >
<%@ Language="Jscript" %>
<%
TenLoai=""+Request("TenLoai");
if (TenLoai !="undefined" && TenLoai != "") {
SQL="INSERT INTO LOAI_HANG(TenLoai) values ('"
+TenLoai+ "')";
DBPath = Server.MapPath("mydb.mdb");
Conn = Server.CreateObject("ADODB.Connection");
ConString="DBQ="+DBPath+";Driver={Microsoft Access
Driver (*.mdb)}; ";
Conn.ConnectionString=ConString;
Conn.Open();
Conn.Execute(SQL);
Conn.Close();
}
Response.redirect("loaihang.htm");
%>
25
3. Đối tượng Recordset
Sử dụng đối tượng Connection như trong phần trên ta đã có thể thực
hiện các thao tác chèn, xóa và sửa chữa dữ liệu trong CSDL bằng các
câu lệnh SQL. Việc liệt kê giá trị của các record trong CSDL sẽ sử dụng
các truy vấn dạng SELECT, kết quả của một truy vấn SELECT sẽ trả về
là một tập hợp các record theo yêu cầu của truy vấn. Để có thể dễ dàng
duyệt, hiển thị các record được trả về từ một truy vấn SELECT, ADO
cung cấp đối tượng Recordset là một kiểu danh sách lưu trữ tập các
record này.
Đối tượng Recordset thể hiện một cursor-list lưu trữ tập các record nhận
về từ cơ sở dữ liệu sau khi thực hiện một truy vấn SQL dạng SELECT.
Recordset có thể được coi là một bảng ảo và có một con trỏ luận lý
(tương tự như khái niệm con trỏ file) để dễ dàng duyệt các record trong
danh sách.
Recordset làm việc với cơ sở dữ liệu dựa trên một cầu nối đã được mở
(Actived Connection object).