1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Truy xuất cơ sở dữ liệu bằng ADO

53 638 2
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 53
Dung lượng 372 KB

Nội dung

Tài liệu tham khảo Truy xuất cơ sở dữ liệu bằng ADO

Trang 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

Trang 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.

Trang 3

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ý.

Trang 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

Trang 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)};

Trang 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.ConnectionRecordset 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 procedure,

stored-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

Trang 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”);

Trang 10

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)

Trang 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)

Ý 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).

Trang 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

Trang 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.

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

Trang 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:

Trang 15

Các bước thực hiện:

Trang 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:

Trang 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();

%>

Trang 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:

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.

Trang 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:

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ấn1: Tên bảng2: tên stored-procedure3: 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

Trang 22

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

Trang 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"

Trang 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)}; ";

Trang 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).

Trang 26

Hình ảnh minh họa cấu trúc cursor-list của

Recordset.

Trang luận lý

Con trỏ Record 1

Record 2 Record 3

.

Record i Record i+1 Record N

Sau khi khởi tạo đối tượng Recordset thì danh sách records là rỗng Danh sách Records được xác lập sau khi thực hiện một truy vấn tới cơ sở dữ liệu và con trỏ luận lý định vị tại Record đầu tiên.

Trang 27

Một số thuộc tính và phương thức

Để lấy giá trị của một thuộc tính ở record hiện tại (con trỏ luận lý đang trỏ

tới), sử dụng cú pháp sau: Ten_Recordset(“Ten_Thuoc_Tinh”)

Để duyệt một Recordset thường sử dụng các thuộc tính và phương thức sau:

•EOF : Trả về giá trị false nếu con trỏ luận lý đang trỏ vào một record

trong Recorset Trả về giá trị true nếu con trỏ luận lý đã đi qua record cuối cùng trong danh sách.

•BOF: Trả về giá trị trả về giá trị true nếu con trỏ đứng trước record đầu

tiên Ngược lại trả về giá trị false.

MoveNext(): Phương thức này sử dụng để dịch chuyển con trỏ luận lý

tiến tới một vị trí.

Ngoài ra, để đóng một Recordset và làm cho nó trở về trạng thái rỗng,

chúng ta sử dụng phương thức Close().

Trang 28

Giải thuật duyệt truy vấn và Recordset.

Tạo thể hiện của đối tượng Connection và Recordset.

Thực hiện kết nối tới CSDL thông qua ODBC

Thực hiện truy vấn và lưu kết quả và lưu kết quả vào Recordset.

Sử dụng cú pháp:

RecordsetObj=ConnectionObj.Execute(SQL);

Hoặc sử dụng phương thức Open() của đối tượng Recordset

Duyệt Recordset để trình bày dữ liệu kết quả.

Thường sử dụng vòng lặp như sau:

while ( ! RecordsetObj.EOF) {

Trình bày nội dung record hiện tại: RecordsetObj(“Ten_Field”);

Di chuyển tới record kế tiếp: RecordsetObj.MoveNext();

}

Đóng Recordset.

Theo cú pháp:

RecordsetObj.Close();

Trang 29

Ví dụ 1: Trang lietkeLH.Asp thực hiện việc liệt kê danh sách các tên loại hàng có trong bảng LOAI_HANG Danh sách này được thể hiện trong một select list.

Trang 31

if (TenLH != "undefined" && Maloai != "undefined" && TenLH!="") {

updSql="UPDATE LOAI_HANG SET LOAI_HANG.tenLoai = '"+TenLH+"'

Trang 32

Ví dụ 2(tt)

<HTML>

<HEAD><TITLE>Các chủng loại hàng</TITLE></HEAD>

<BODY>

<FORM Name="EDIT" Action="suaTENLH.asp" METHOD=POST>

Chọn loại hàng sẽ sửa tên:

Nhập tên mới cho loại hàng:<INPUT Name="TenLH" Type="Text" ><BR>

<INPUT Name="Button1" Type=Submit Value="Cap Nhat Ten Moi">

<INPUT Name="Button2" Type=Reset Value="Nhap Lai Ten">

Trang 33

Vi dụ 3: Trang nhapMH.asp cung cấp form cho phép thêm một mặt hàng mới vào CSDL (Ví dụ này chưa phần kiểm tra tính hợp lệ của kiểu dữ liệu)

if (TenMH !="undefined" && TenMH !="") {

chkName="SELECT * FROM MAT_HANG WHERE TenMH='"+TenMH+"'";

Trang 34

// Thực hiện lấy dữ liệu để hiển thị trong form.

Trang 35

<FORM Name="NhapMH" Action="nhapMH.Asp" Method=POST>

Tên hàng: <INPUT NAME="TenMH" TYPE="text"><BR>

Loai hàng:<SELECT NAME="LoaiMH">

%>

</SELECT>

Giá: <INPUT NAME="GiaMH" TYPE="text"><BR>

Loai tien:<SELECT NAME="MaTien">

%>

Trang 36

Ví dụ 3(tt)

</SELECT><BR>

Mô tả tính năng: <INPUT NAME="TinhNang" TYPE="text"><BR>

Số lượng: <INPUT NAME="SoLGH" TYPE="text"><BR>

Don vi tinh:<SELECT NAME="DonVi">

%>

</SELECT>

<INPUT NAME="Them" TYPE="submit" VALUE="Them MH">

<INPUT NAME="Nhap lai" TYPE="reset" VALUE="Them MH">

Trang 37

Ví dụ 4 Trang chonLH.asp sẽ cho phép chọn một loại hàng trong danh sách rồi sau đó liệt kê các mặt hàng thuộc loại đó.

Trang 38

</SELECT><BR>

<INPUT Name="button1" Type=submit Value="Liet Ke">

</FORM>

Trang 39

<TABLE ALIGN=center BORDER=1>

<TR><TD> Ten Mat hang </TD> <TD> Gia mat hang </TD>

Trang 40

4 Kiểu con trỏ luận lý trong Recordset

Trong các ví dụ ở trên, chúng ta đã sử dụng biến Recordset để lưu trữ kết quả của câu truy vấn SQL, tuy nhiên với hình thức sử dụng như vậy, đối tượng Recordset chỉ cho phép duyệt các Record một cách đơn giản nhất: Duyệt tuần tự từ Record đầu tiên đến record cuối cùng.

Ở trường hợp số lượng record lớn, chẳng hạn như có 100 mặt hàng thuộc một loại, nếu làm như trong trang chonMH.asp thì sẽ không có hiệu quả cao trong việc trình bày, thay vào đó chúng ta sẽ trình bày từng phần một

và cung cấp khả năng lật trang cho người sử dụng Để làm như vậy, đối tượng Recordset cung cấp các khả năng phân trang và bookmark, các khả năng này được xác định bởi các thuộc tính:

•AbsolutePage: Nhận giá trị nguyên N sẽ đặt con trỏ luận lý tới trang luận

lý thứ N

•PageSize: Xác định số record trang một trang luận lý.

•PageCount: Trả về số trang luận lý có trong Recordset

Để có thể thay đổi được các thuộc tính AbsolutePage và PageSize, biến Recordset phải lấy dữ liệu bằng phương thức Open thay vì nhận dữ liệu từ phương thức

Execute của đối tượng Connection

Phương thức Open trong đối tượng Recordset có cú pháp thực hiện như sau:

RecordsetObj.Open(SQL, Conn [,CursorType] [, LockType]);

Trong phần này, chúng ta sẽ xem xét tới tham số thứ ba đó là kiểu con trỏ luận lý

Trang 41

Recordset hỗ trợ các kiểu con trỏ luận lý sau:

1 adOpenForwardOnly: Kiểu này có giá trị bằng 0 Là kiểu duyệt mặc

nhiên của Recordset Khi mở Recordset với kiểu này, chúng ta chỉ có thể di chuyển con trỏ luận lý đi tới bằng phương thức MoveNext().

2 adOpenKeyset: Kiểu này có giá trị bằng 1 Khi mở một Recordset với

kiểu con trỏ là adOpenkeyset, chúng ta có thể di chuyển trong Recordset bằng các phương thức MoveNext(), MoveLast(), MoveFirst(), MovePrevious(), hoặc Move(NRecord, FromPositionM) Kiểu này còn gọi là con trỏ động, khi mở recordset sẽ không nhận các Record do client khác đang thêm vào hoặc xoá trong vùng dữ liệu tranh chấp, các record đang thực hiện sửa đổi vẫn được lấy.

3 adOpenDynamic: Có giá trị là 2 Giống hoàn toàn như kiểu

adOpenKeyset, ngoại trừ khả năng có thể lấy hết các record trong vùng tranh chấp trong khi các client khác đang thêm, xóa hay sửa đổi Kiểu này cũng không hỗ trợ khả năng bookmark (thuộc tính AbsolutePage không được hỗ trợ)

4 adOpenStatic: Có giá trị bằng 3 Recordset mở với kiểu này được coi

như một phiên bản dữ liệu tĩnh Nó hoàn toàn không lấy các record có trong vùng tranh chấp dữ liệu mà các client khác đang tiến hành cập nhật hoặc thay đổi Kiểu này cũng hỗ trợ việc di chuyển con trỏ như hai kiểu trên.

Ngày đăng: 12/03/2013, 09:27

HÌNH ẢNH LIÊN QUAN

3. Sơ đồ thứ bậc của các đối tượng ADO - Truy xuất cơ sở dữ liệu bằng ADO
3. Sơ đồ thứ bậc của các đối tượng ADO (Trang 8)
Ý 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  - Truy xuất cơ sở dữ liệu bằng ADO
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 (Trang 11)
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)… - Truy xuất cơ sở dữ liệu bằng ADO
u Lệ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)… (Trang 21)
Bảng hay tên thủ tục…. Các giá trị tương ứng là: - Truy xuất cơ sở dữ liệu bằng ADO
Bảng hay tên thủ tục…. Các giá trị tương ứng là: (Trang 21)
Đoạn chương trình chèn một record vào bảng LOAI_HANG trong CSDL. &lt;% - Truy xuất cơ sở dữ liệu bằng ADO
o ạn chương trình chèn một record vào bảng LOAI_HANG trong CSDL. &lt;% (Trang 22)
Hình ảnh minh họa cấu trúc cursor-list của Recordset. - Truy xuất cơ sở dữ liệu bằng ADO
nh ảnh minh họa cấu trúc cursor-list của Recordset (Trang 26)
Hình ảnh minh họa cấu trúc cursor-list của - Truy xuất cơ sở dữ liệu bằng ADO
nh ảnh minh họa cấu trúc cursor-list của (Trang 26)
Vi dụ 5: insertMH.asp thực hiện thêm một record vào bảng MAT_HANG trong CSDL thông qua recordset. - Truy xuất cơ sở dữ liệu bằng ADO
i dụ 5: insertMH.asp thực hiện thêm một record vào bảng MAT_HANG trong CSDL thông qua recordset (Trang 45)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w