我爱电脑技术论坛's Archiver

佳佳 发表于 2008-4-30 00:42

ASP基础讲座(下)

当我们需要同浏览器交互的时候,有时少不了数据库。因为只有用数据库才可能大量、快速地处理信息。使用ASP不仅意味着你可以读取Access和SQL Server的数据库,同时也意味着你可以读取其它ODBC(Open Database Connect,开放式数据库互联)兼容的数据库。为了在ASP中访问数据库,我们将接触一个新名词——ADO(Active Data Object,活动数据对象)。 n4l9zx1pe@'k
  ADO是一种操作Microsoft所支持的数据库的方法,有些类似于以前在VB中听说过的DAO(Data Access Object,数据访问对象)和RDO(Remote Data Object,远程数据对象)。在ASP中,ADO可以看作是一个服务器组件(Server Component),更简单点说,是一系列的对象,应用这些功能强大的对象,即可轻松完成对数据库复杂的操作。在这里我们所要学的是使用这些对象的方法,具体的操作步骤可以归纳为以下几步:
q9g+j(\4dGU:[o Y   (一)创建数据库源名(DSN)
5O&n3H1~+f.VY9C,`1Y   (二)创建数据库链接(Connection)
Npw.a|-M   (三)创建数据对象
S(h8^c)Cz.Y#e'`   (四)操作数据库 Q1j$])\8dfP3s
  (五)关闭数据对象和链接
^] b&d b   下面具体叙述每一步的作法:
KQ+Z;\'b2n!n   一、创建数据源名
UPEj psH(b;`&ES   用ODBC时,经常见到DSN这个名词,它究竟是什么,有什么重要作用呢?DSN(Date Source Name)即数据源名称。我们知道,ODBC是一种访问数据库的方法,只要系统中有相应的ODBC驱动程序,任何程序就可以通过ODBC操纵驱动程序的数据库。比如我们系统中有Access的ODBC驱动程序,那么即使我们没有Access软件,也可以在我们的程序(如VB编的)中间对一个Access的MDB数据库加、删、改记录。而且我们根本不用知道这个数据库是放在哪里的。我们只要写出SQL语句,ODBC驱动程序就会帮我们做一切事情。我们在给ODBC驱动程序传SQL指令时,即是用DSN来告诉它到底操作的是哪一个数据库。如果数据库的平台变了,比如我们改用了SQL Server的数据库,只要其中表的结构没变,我们就不用改写我们的程序,只要重新在系统中配置DSN就行了。由此可见,DSN是应用程序和数据库之间的桥梁,要通过ODBC访问数据库,前提就是我们必须配置好DSN(即架好桥梁)。一个DSN必须包含一些信息:8J4K)u-n!_ BU O^"h
  DSN的名字:就是给这座桥取个名字,当程序访问数据库时,给系统传的就是这个名字,而不是数据库的实际名称。
\4g-@KM*TK/v   ODBC驱动程序类型:只有指出驱动程序类型,在我们操作数据库时,系统才会知道调哪个ODBC驱动程序来服务。
j0^ @#So q5G   数据库:你必须指定这座桥到底连接的是哪个数据库,但不同的数据库系统,指定数据库名字的方法有些不同。
S"y1I9PucQZ   这座桥是架在系统之中的,所以WIN95(NT)提供了一个工具来完成这件事,即是控制面板中的32 BIT ODBC,共有三类,即用户DSN、系统DSN、文件DSN。我们一般就用系统DSN,因为这样可以让所有在该系统上操作的人都能使用这个DSN。
"w&@(^2|%d$T!x4S   打开Windows的“控制面板”,找到图标“32位ODBC)”(有一些系统上叫“ODBC”、“32bit ODBC”),双击,出现(如图一)对话框,选中标签“系统DSN”,点击“新建”,选驱动程序为Microsoft Access MDB,单击“完成”,弹出对话框(如图二),输出“Data Source Name”为“dsn1”,单击“OK”,再单击“选择数据库”,选中你要使用的数据库,例如“C:\b1.mdb”,这样就OK了。以后我们就用“dsn1”来访问数据库“c:\b1.mdb”,而不直接用文件名“C:\b1.mdb”,这样做的好处是,一旦我们改变了文件名或存放地,就不用再一个一个地修改程序中所有该数据库的名称,而只需修改DSN中的配置就可以了。V }*K-K(x_
  二、创数据库链接(Connection)
i9DXSJ*d4I   用过VB的人都知道,DAO中有链接(Connection),RDO中有odo Connection。链接用以保持一些关于正在访问的数据的一些状态信息,以及链接者信息。ASP文件中如果要访问数据,必须首先创建与数据库的链接,其语法如下:
C,\ U3x9X   set Mconn=Server createObject(“ADOBDCONNECTION”)
;? {3V@Ln6g}G?E   这条语句创建了链接对象mConn,接下来:
/[H&\8JDXu`2}   mConn.Open “dsn1”,“vsername”,“password”D)I ~,g^Q {4z
  这条语句打开链接,用到了DSN,本例为“dsn1”。其后的两个参数分别是访问数据库的用户名和口令,为可选参数。;R(GBRg`.p
  注意:必须有以上两个小步骤,因为链接对象的创建与打开是两回事,只有打开了才真正可以用。,T"~9t~L7Zd
  三、创建数据对象(Record Set)PU|;gk y"[
  ADO中的数据对象通常保存的是查询结果。Record Set是ADO中最复杂的对象,有许多属性和方法,灵活运用,可以达到许多好的效果。与DAO中的一样,Record Set保存的是一行行的记录,并标有一个当前记录。以下是创建方法:]i!L+L/kJ
  Set Record Set=mConn.Execute(sqtStr)
(pi;@5?&z~:Z-AN-Q   这条语句创建并打开了对象Record Set,其中mCon是先前创建的链接对象,sqtStr是一个串,代表一条标准的SQL语句,例如:
F5pk a6CT!SGn   sqlStr=“SELECT * FROM tab1”
2^ A erP0n's2l\i   Set Record Set=mConn.Exe cute(sqlStr)g eI$|7n\@
  这条语句执行后,对象Record Set中就保存了表tab1中的所有记录。在ASP文件中如何引用返回结果,本文将在文末给出一个实例说明。 P]$Wklayr
  四、操作数据库6M%d;bu K(Vt T
  刚才我们通过调用链接对象的Execute方法来将查询结果返回给一个数据对象。我们说Execute方法的参数是一个标准的SQL语句串,所以我们可以利用它方便地执行数据插入、修改、删除等操作,例如:
ep Q8^l0f}hf+n   sqlStr=“INSERT INTO tab1 VALUES(1,2)”$G\Kg.C nr0Y]Ha4}b
  mConn.Execute(sqlStr)
@P:D|0N   /执行插入操作1wH/b7O}C~l"A pb1f
  sqlStr=“UPDATE tab1 SET field1=3”/f*N'Q&A*Y'?
  mConn.Execute(sqlStr)
Ji*_9l/eT(n[t   /执行修改操作#H2wSR'|4]{0i(Q
  五、关闭数据对象和链接对象
5G?z/]I \ i6s c   在使用了ADO对象之后,一定要记住关闭它,因为它使用了一定的服务器资源。通过调用方法close实现关闭,然后再释放它。
1]3kd/if9l rp9I ^X   Record Set.closeow-Z?;Y*Fo
  Set Record Set=Nothing B F'q6p+O~
  /关闭创建的数据对象sx5mwG;mY V
  mConn.closeh X+t ~7~
  Set mConn=Nothing9xYT:w!q p
  /关闭创建的链接对象
[5Ak}.e1j%z9k   至此,我们已给出了用ASP访问数据库的全过程,包括创建数据源-创建链接-创建数据对象-操作数据对象-关闭并释放。这其间由于应用面向对象思想,应该说所有操作都比较简单,用户需要注意的仅是对数据结构的了解,亦要清楚当前所操作的对象是什么,有什么属性,等等。只要对这些有了清醒的认识,再加上ASP的强大功能,在网络上应用你自己的数据库,就再也不是什么难事了!5@o.[`D d D
  本文最后给出一个例子,这是基于数据库的ASP留言簿程序,数据库结构如下:
b2n4}9| LU,d su   guestbook.mdb
:D6k+} dV   表lyb:
p&H'fM1iX$[k   xm char(100), ly char(255) , sj datetime?rn g'a.ET Z3a3K
  文件guestbook.asp: a6I#R-] ])r,@Va
  <html>
2Ooo^|   <head>Yul8caj0s |
  <title>lyb</title>
z(c7r8ly+`Y"K,~   </head>
YE!aX;E*i,UHr   <body bgcolor=“#ccccf0”>
\Ci+f%w4S7AY$z3oW   <p>留言簿</p>(s$By;z JG%b L%J
  <form METHOD=“POST” action=“guestbook.asp”>)v/pA T X
  <input type=“hidden” name=“task” value=“insert”>
[;x `-D+m   <p>姓名:<input TYPE=“text” SIZE=“20” NAME=“xm”></p>hN0Rb@\fj
  <p>留言:</p>
1Q]Q;s*H$W n   <p><textarea ROWS=“5” COLS=“80” NAME=“ly”></textarea></p>
\-`0mzD$kn`-V   <p><input TYPE=“submit” VALUE=“记入留言簿” NAME=“B1”><input TYPE=“reset”M rv cR[
  VALUE=“复原” NAME=“B2”></p>
KuC:t|*i   </form>-~O9Z4Nb~zF1`
  <%
z6c*H:yi9B   Set conn = Server.CreateObject(“ADODB.Connection”)
!^!Y'z*Z(_|$?K2wA   conn.Open “lybdsn”,“”,“”
G*hk"[)z])bo   If Request(“task”)=“insert” then*x!]@ WG1E
  xm=Request(“xm”)0H{\a(]V
  sj = Date()
.DQK&~(cI   sj = sj & “ ” & Hour(Time()) & “:” & Minute(Time())
;rPj*[(n mWF   If Request(“ly”)=“” then J:f[:o2S?4z'XC6S
  Response.write(“留言不能不输吧”)3_4dI~h"J~T
  Response.end
~$b[|.E/r;E ^   else
)|#z'L*D&Y^-X3EW$v   ly=Request(“ly”)TiOO6x*Y7L9T8P
  end if
h#E+{ ~0]6bHMM   sql=“INSERT INTO lyb (xm,sj,ly) VALUES ('” & xm & “','” & sj & “','” & ly & “') ”0[3sun Y(_8|'dm M5oA
  conn.execute sqlU~;K/ZS R+s._]S
  End If
z2[(h2O^!K   sql = “SELECT * FROM lyb ORDER BY sj DESC”
*Kt:A_L%j   Set rs = conn.Execute(sql) %>
\D}yJq   <% On Error Resume Next
L7kC)KcRit   rs.MoveFirst
T-z1z y+u B,]9^9W   do while Not rs.eof %>1a#I@ YLE;@s
  <hr>-a9`!Az3j _8dI6BM
  姓名:<%=Server.HTMLEncode(rs.Fields(“xm”).Value)%><br>9jF lfcSl&x
  留于:<%=Server.HTMLEncode(rs.Fields(“sj”).Value)%><br>
]|rV#~(kXY   留言:<%=Server.HTMLEncode(rs.Fields(“ly”).Value)%>
KA z!dX'\W   <% rs.MoveNext Losbn Y*[&N&U^/cA
  loop %>
jwn!xQ/\   </body>`2zH*v"_}&uO'A
  </html>

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.