ASP的DatabaseAccess组件使用ActiveXDataObjects(ADO)提供一种轻而易举的方法,可以访问存储在数据库或其他表格式数据结构(如电子表格)中的信息,只要它们遵循OpenDatabaseConnectivity(ODBC)标准即可。在本课中,您将连接到一个Microsoft?Access客户数据库,并且显示目录列表。您将学习如何使用SQLSELECT语句来检索数据,并且创建一个HTML表格来显示结果。
& @4 R' ?0 w% J# r4 e2 c! \' v
: S1 h b e2 p7 a' \- J% A识别数据库
# e5 c8 Z- [& [- [, U6 v; x! A
2 y8 e7 M4 H6 B- K8 |' a8 N在通过DatabaseAccess组件使用一个数据库之前,必须在“控制面板”的OD BC程序中识别这个数据库。在本例中,您将使用本教程提供的一个Microsoft? Access数据库。
0 ]2 L* @$ y0 M! R9 F c, |# `7 l6 c
8 p% }. d7 C3 p0 K6 v+ B
在运行Web服务器(localhost)的计算机上,打开“控制面板”。
5 }( U8 S8 N. M; l2 f
6 _; D4 j; h4 Y$ G/ z双击“ODBC”图标,然后单击“系统DSN”选项卡。
$ Y! A! B3 a- |0 O; j' ?, @, L
" }* o5 r" t* q5 p& k
DSN将告诉数据库驱动程序(用来配置数据库并与其通讯的程序)数据库文件所在的位置。您可以创建3种类型的DSN:用户DSN(UserDSN),只能对您起作用;系统DSN(SystemDSN),可以对计算机的所有用户起作用;文件DSN(F ileDSN),将DSN信息保存为文件,并且允许所有用户使用相同的数据库驱动程序。本教程使用的DSN必须是系统DSN(SystemDSN)。
: F, d% z# q% K2 ~- d
6 w# k/ `$ g- a5 R+ S单击“添加”,选择“MicrosoftAccess驱动程序”,然后单击“完成”。
( A0 P1 f" i8 H: T* K+ E+ Q9 p+ |+ U. W: r! T) ^
在“数据源名称”框中,键入ASPTutorial,然后单击“选择”。选择BTCustm r.mdb文件(默认情况下位于WINNTHelpIISHtmTutorial目录中),然后单击“确定”。
]9 k& v1 p3 K. {) R8 R) ]/ z
$ s2 y2 `. _* [1 c单击“确定”关闭对话框。
l' g4 c' j+ j( q
5 ~5 ~3 z2 \+ I1 c/ j
创建组件实例
# R7 W% k5 o8 K( H0 u2 ]3 N+ m2 r% ~- m! k
用文本编辑器打开localhostWeb服务器上Tutorial目录(C:WINNTHelp iishtm utorial)中的Database.asp文件。
- i$ v9 s& w$ M
" Q) t6 ]1 L: l' K& X' X9 f
查找文字“DefineScriptingLanguage”,将下列脚本插入找到的文字行之后:
t' |6 K9 \- @5 `$ v0 I! s
# c d% X5 `4 G- E9 \〈%@LANGUAGE="VBScript"%〉
, x; A; F+ j# I2 `* G! h
" z" ]/ l$ R7 [4 d
必须保证这个标记是所有.asp文件的第一个脚本行。
3 e) t) X' w \ c! |3 H$ z6 w) V w, f* v: G
查找文字“TutorialLesson-ADOConnection”,脚本将插入到找到的文字行之后。
+ U9 S! L% H& M- f0 @+ A/ i. |/ O, e9 ?, |' s" @5 [0 W
必须先创建一个对象的实例,然后才能使用它。请复制并粘贴以下脚本命令:
! ^' A" [+ ]. N
: W* K+ D. q& p8 R1 t! F" ]〈%
/ v5 e! u/ H/ B6 m7 x$ T1 h+ Q# }: R) B1 O# Y& w: l
SetobjConnection=Server.CreateObject("ADODB.Connection")
6 b! d& F- T$ r- h0 \, e( [2 _0 t6 k, G, W( f0 o8 _ R
如果在此以前,另一个用户已经学完了教程的这一部分,那么这些脚本命令就已经在“TutorialLesson”注释行以下了。请用复制的脚本覆盖已有的脚本,或者将未使用过的Database.asp从Template子目录(C:WINNTHelpiishtm u torial/template)复制到Tutorial目录中。对于DatabaseAccess组件来说,您必须指定ODBC数据源(要从其中检索数据的数据库),方法是打开一个到数据库的连接。复制并粘贴以下脚本命令:
+ q: z! X& _- d* [8 u& ~, c4 ^. q0 a& B$ D
objConnection.Open"ASPTutorial"
# d4 }7 R7 {" m- \" o7 ?2 h1 B# n1 a! d- @2 O$ k" q, c
使用DatabaseAccess组件的Execute方法,可以向数据库发送一个将结构化查询语言(StructuredQueryLanguage,SQL)的SELECT命令,并且将返回的记录保存到结果集合(rsCustomersList)中。请将下列脚本命令复制并粘贴到 objConnection.Open语句之后:
1 ^, j- [1 h( G' o' D' H: N/ x3 |
# Q# \& L' h3 ~ @1 X+ n
SQLQuery="SELECT*FROMCustomers"
* ^& Z4 r: ]4 h- ~3 E5 o7 e
! a6 x, r3 A ?
SetrsCustomersList=objConnection.Execute(SQLQuery)
. B3 E$ b1 A" B5 p1 i% C
; _( S/ X" r. J/ w M) ~ @" E%〉
$ v( M+ m; ?; e, B0 c
/ f- } V/ y, h8 G# U* Q, P/ b如果将SQL查询字符串直接传递给Execute方法,而不是先给变量SQLQuery 赋值,就可以将这两行合并。当SQLSELECT行比较长时,为使脚本易读一些,可以将字符串赋值给一个变量(如SQLQuery),然后将变量名传递给Execute 方法。显示返回的结果集合
+ v0 x3 Y+ D% D6 T; e3 {- C, T) Z
, |" }, I. u) ~. B6 G2 k4 M您可以将结果集合视为一个表格,这个表格的结构由SQLSELECT语句中的字段决定。显示检索返回的行,就象在结果集合中按行数执行循环一样简单。在本示例中,返回的数据显示在HTML表格行中。
a4 ]# m" N3 h- x+ @6 i Z
. J/ o8 L+ E2 }* q/ h; k4 H在Database.asp文件中,查找文字“TutorialLesson-DisplayADOData” ,将以下脚本复制并粘贴到找到的行之后:
* P( `4 J2 U6 C+ H, T7 s. A4 G
1 E! O) m5 @3 p T' H4 P, C
〈%DoUntilrsCustomersList.EOF%〉
- R J$ B% Q: k2 d1 h& I
# f& e: F# Q$ I' B l @2 U' A8 G〈tr〉
- I# t' ~ v8 ^+ T6 m) q+ l/ H! q) h- g% {# S
〈tdbgcolor="f7efde"align=center〉
3 D$ e, P, B# c$ n$ O" v
5 B- V9 C) ~* ]4 {# `9 i+ x
〈%=rsCustomersList("ContactFirstName")%〉
+ Q1 o% ~/ w1 |# h; z
# L# d5 d# C3 Z/ _6 F s8 |〈%=rsCustomersList("ContactLastName")%〉
5 n' T- p4 S. R0 _8 a9 l( T
/ u' J/ @) J9 Q, K0 ^6 p+ r7 U# X〈/td〉
% I; Q6 P9 }4 g# p* l6 P' R& A4 |) L9 w7 U( ?0 | _& c: ~
〈tdbgcolor="f7efde"align=center〉
! V* s: |0 [9 V1 y1 G' u p
$ N4 b( D' W6 d+ y〈ahref="mailt〈%=rsCustomersList("ContactLastName")%〉"〉
+ z( X( ~4 z, V% l! o2 I
9 t# }. S# J8 E. g+ J! @〈%=rsCustomersList("ContactLastName")%〉〈/a〉
V, B a' O+ @% t4 ?- Q( T# S( u
〈/td〉
2 h3 R/ e0 J* a5 |7 h; O z2 r. O5 _5 o' N) E
〈tdbgcolor="f7efde"align=center〉
, H% `1 N( H5 g% p6 x
# ?# y; _# O+ s3 V
〈%=rsCustomersList("City")%〉
% {* n* g% L8 F
7 [4 q# U. x9 h, |% h8 h〈/td〉
! a- _3 W# X( d) e7 B) k6 u
2 o6 x/ l6 r! s+ w& H* `4 H- p〈tdbgcolor="f7efde"align=center〉
6 c; M% x/ m7 j. ?
6 t$ @' N1 o6 a' d# D! U: b〈%=rsCustomersList("StateOrProvince")%〉
, P6 |- w# ?# q
" ^/ U0 N4 x4 N5 k2 f N〈/td〉
, q1 u) ?* r; d# V6 h
4 }" C* z4 v* s, H- Z& K〈/tr〉
( {( R' X+ d# R
- Q0 _, ]% `6 w, [; n' p0 I/ u如果在此以前,另一个用户已经学完了教程的这一部分,那么这些脚本命令就已经存在了。用复制的脚本覆盖已有的脚本,或者将未使用过的Bayshore.asp从 Template目录复制到Tutorial目录中。
+ {6 R# u0 y S1 o6 P4 ^& k- v* J8 r# R2 |1 B5 G# H4 Q k
当条件为“真”时,VBScriptDo...Loop语句重复执行一段语句。被重复执行的语句可以是脚本命令或HTML文本和标记。因此,在循环的每次重复中,您都可以用HTML画出表格行,并且用脚本命令插入返回的数据。
- K2 C- I9 v; Z1 f( F
9 V& |6 p$ A( p6 T4 h8 E2 [. w要完成循环,还要使用MoveNext方法来移动行指针到下一行。因为这一语句仍然在Do...Loop语句中,所以它一直重复,直到到达文件结尾才停止。请复制以下脚本,并将其粘贴到“TutorialLesson-RetrieveNextRow”行之后:
: F% a, I- e. O2 P- Z2 G% d w: R+ P' c& V. ~! B) a' N
〈%
. k1 s7 A. S' X* i8 p8 c J6 W
$ e0 [ o, G. z" j
rsCustomersList.MoveNext
, B& ~. F' J% d! e0 I9 G
% A: v4 Y& w0 Z2 L% w4 Z% h
Loop
; ?9 J; n c9 z" D, j. H/ W5 t5 ^# E4 F& y5 k$ M4 q5 O
%〉
3 c* t. X8 v- P
: Y g' [$ m" C% ^; E! m Y$ m) R以纯文本格式保存Database.asp文件,并且退出文本编辑器。注意文件后缀. asp不要被文本编辑器替换。
6 h! w, s {8 ~0 D; y# ~
$ I' Y* I% e! g; _; Y$ t' i. b& i
9 x" i/ Z" ?& F/ _9 _5 h! N
" }' ^: ]0 H. G; A! B若要验证您创建的ASP页是否正常运行,请将您的浏览器导向
http://localho st/IISHelp/IIS/Help/Htm/Tutorial/Database.asp。(此后若要返回本教程,只要在浏览器中单击“上一页”或“Back”按钮即可。)
3 p f( ?1 ]$ A; d. Y3 b
# t: n' n/ X" u- H% g$ R3 X: t) s自学参考
# e8 E) }: J. F2 l& a/ z1 A) ~% a4 H# |2 y ~
如果您正使用WindowsNT,要参阅更完整的DatabaseAccess组件示例,可以访问ExplorationAir示范节点。单击BehindtheScenes图像,可以学习用来创建这个Web节点的脚本的更多知识。在BayshoreTravelWeb页上也有指向ExplorationAir示范节点的链接。
( u% h* X* T0 w3 Z
- W' Y$ t2 [, L$ a0 [注意如果您还没有访问ExplorationAir示范节点,上面的链接将把您带到E xplorationAir主页。此后若要返回本教程,只要在浏览器中单击“上一页”或 “Back”按钮即可。
, C% R* Q; s9 s6 c1 T& Y
- R5 i$ |( A6 c" ~现在,您已经用过了ActiveX组件,让我们来学习模块3:编写自己的组件。
) e- G& |/ k+ h
/ R, @5 x. [) G% R; {
模块3:编写自己的组件
# |5 d7 p) a) i
) _' k8 Q/ [/ P, w/ l3 j5 n2 p) j3 G请选择本课的脚本语言。
% }4 z9 v$ i2 o; l* O+ F
5 V/ F4 t q% e9 {9 z
在模块2中,您已经熟悉了ASP提供的组件,现在该创建自己的组件来满足自己的特殊需要了。
5 d% |& o M3 Q
( |& c% w3 q7 y( Y0 ?6 P
假设您需要创建一个ASP程序,以便通过Web节点提供特定的财务功能。ASP 没有直接提供这样的功能,不过您可以通过创建自己的Java或ActiveX组件来解决问题。您将在本模块中学会这些。
$ H9 l3 k) T _. y
; h7 r( i; U# M) J' d
如果要学习如何创建并使用组件,首先使用下面的表格进行选择:
8 l4 ~2 Q# j. O+ ^% ]! u
8 g' K4 R" D. R- F% Z1 W0 ?8 P
选择本课要创建的组件类型:
9 V" H& s8 }3 a& V% ]
& Y( v8 R9 @+ M8 @9 X1 d
VisualBasic5.0ActiveX组件
" ]7 Q6 g4 d8 S o" q4 j: b8 c
1 X* n" A4 X! {- o3 ]# j
VisualJ++1.1Java?组件 ----------
/ z) K6 n% y; X7 p& [
) { m) i6 e8 {* L9 i; A要点
$ M: F: w$ ` }; n* X t) r
) K1 Z5 E0 D! S$ @若要保存并查看您在本模块中的工作结果,需要:
9 s/ ^% @: E* ]7 ]& {4 d- c4 y4 O" `; V
1 F! t& W7 T; X# ^) @
对localhostWeb服务器上的/iishelp/iis/htm/tutorial虚拟目录具有“写 (Write)”和“改编Web服务器(ScriptWebserver)”权限。详细信息,请参阅设置Web服务器权限。
6 x; e& ?. d, m( A i% k2 Z
% E/ F# I; S$ ^. d( `" w% J1 O' p, D您的WindowsNT帐号,必须在DriveLetter:WinntSystem32Inetsrv目录及其子目录上具有WindowsNTFileSystem(NTFS)的读、写和运行程序权限(此处的DriveLetter代表localhostWeb服务器的适当的驱动器号,如果您没有安装到默认目录下,请用您的安装目录代替WinntSystem32)。
- l! C2 B; ]( |+ C+ M" x
0 i! ^% Y( d4 y7 h: y" A7 Q7 {2 j要完成本模块,必须在localhostWeb服务器上安装:
0 o4 R6 n! ]' g% @* n% f, ?
; ?7 l# J2 Y1 `* ?5 |Microsoft?VisualBasic5.0专业版的32位版本或VisualBasic5.0企业版开发系统。
, M0 _4 _* P+ S! u
' t4 a7 Y- Z- h2 r/ S如果已经禁止了Web浏览器运行Java程序功能,请在开始教程以前启用该功能