7.3.2 Connection对象及应用
Connection对象是用来建立和管理应用程序与数据库之间的连接,通过调用Connection对象的属性和方法,可以打开、关闭与数据库的连接,并通过适当的命令执行指定的查询等。
1. 建立Connection对象
要使用Connection对象,必须先建立一个连接对象实例(Connection对象),而连接对象实例是通过ASP内置对象之一Server对象的CreatObject方法来建立的。语法格式如下:
Set Connection对象名= Server.CreatObject("ADODB.Connection")
例如,Set Conn= Server.CreatObject("ADODB.Connection")
2. Connection对象的方法
1)Open方法与应用
当建立了一个Connection对象后,就可以使用Open方法将该Connection对象通过ODBC与指定数据源(DSN)连接,或以OLE DB方式直接与某个数据库进行连接。
(1)通过ODBC数据源与数据库连接的语法格式如下:
Connection对象名.open "DSN=dsnname; UID=username; PWD=password"
其中,参数dsnname是在Windows“控制面板”->“管理工具”->“数据源(ODBC)”中已建立的数据源名称,username是连接数据源的用户名,password是用户密码。这里未出现数据库名,具体数据库在建立数据源(DSN)时就已经确定好了。
(2)通过OLE DB方式直接连接Access数据库,语法格式如下:
Connection对象名.open "Driver={Microsoft Access Driver (∗.mdb)};
Dbq=path\name.mdb"
其中,path\name.mdb是路径和数据库文件名,注意要采用绝对路径。Open后面的双引号里,用分号隔开的两部分,排列不分先后。例如,
Conn.open "Driver={Microsoft Access Driver (∗.mdb)}; Dbq=
d:\CH-7\db1.mdb "
或 Conn.open "Dbq= d:\CH-7\db1.mdb;Driver={Microsoft Access Driver
(∗.mdb)}"
实际使用中,ASP网页需要移植,移植后的路径可能跟设计时的不一致。为了保证数据库路径的正确性,最好在设计时只书写数据库文件的相对路径,再用server对象的mappath方法来获取实时绝对路径。于是,上述连接变为如下格式:
Conn.open "Driver={Microsoft Access Driver (∗.mdb)};
Dbq="&mappath("db1.mdb")
或 Conn.open "Dbq="&mappath("db1.mdb")&";Driver={Microsoft Access Driver
(∗.mdb)}"
上述“&”是连接符。ADO与其他数据库的连接格式稍有差别,请查看相关参考书。
2)Execute方法与应用
Execute方法负责执行指定的SQL语句,如果执行的是Select语句,则返回一个Recordset对象,该对象中的记录指针只能向下移;也可用来执行那些不返回记录集的语句,如Insert、Update、Delete语句等。语法格式如下:
Connection对象名.Execute comandText [,RecordsAffected] [,Option]
其中,CommandText是要执行的SQL语句(如Select、Insert、Delete、Update等);RecordsAffected是对数据库提出请求时,所返回或者影响的记录数,默认值为0,表示每个满足条件的记录都会受到影响;Option参数用来指定CommandText串的类型,可优化执行性能。
用Execute方法来执行SQL语句(CommandText),分为有括号和无括号两种形式。有括号的格式用来执行有返回记录集的SQL语句,无括号的格式用来执行一个无返回记录集的语句。例如,查询users表中的所有记录信息,采用有括号的格式,代码如下:
Set rs=conn.Execute("select ∗ from users")
说明:conn是前面已建立的Connection对象实例,当执行完这条语句后,就会建立一个Recordset对象rs,rs保存括号中select语句返回的查询结果,即users数据表中的所有记录。
例如,往数据表里插入一条记录,就采用无括号的格式,代码如下:
conn.Execute "insert into users(ID, name, depts)values(6, '王小二','中文系')"
3)close方法
当对某个数据库访问完成后,就可以使用close方法关闭Connection对象与该数据库的连接。语法格式如下:
connection对象名.close
使用close方法关闭连接后,Connection对象(conn)依然存在,可以再次用open方法将该Connection对象与另外一个具体数据库进行连接。若要删除该Connection对象,释放与连接有关的内存资源,应用如下语句:
Set connection对象名=nothing
3. Connection对象的属性及应用
ConnectionTimeout属性设置连接数据库的最长等待时间,单位为秒,默认值是15秒。如设为0,则表示系统将会一直等到连接成功为止。语法格式如下:
Connection对象名.connectiontimeout=10 seconds
说明:该属性的设置必须在连接前或者取消连接后进行,因为在连接成功后,这个属性就成为只读的了。
下面是通过使用ADO组件的Connection对象连接数据库db1.mdb的users数据表,然后从数据表中读取数据的一个ASP网页程序。
------------------------------清单7-1 7-1.asp-----------------------
<%
Dim conn
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Driver={Microsoft Access Driver (∗.mdb)};
Dbq=d:\CH-7\db1.mdb"
set rs=conn.execute("select ∗ from users")
response.write "ID 姓名 系别 密码 级别 <br/>" '&是字符串连接符
do while not rs.eof '指针未指向表的末尾,则执行循环体
Response.write rs("ID")& rs("name")& rs("depts")& rs("pwd")&
rs("grade")& "<br/>"
rs.movenext '指针指向下一条记录
loop
conn.close '关闭conn连接
set conn=nothing '删除连接对象实例conn
%>
--------------------------------------------------------------------
调试结果如图7-12所示。
图7-12 7-1.asp调试结果
从调试结果来看,显示出来的数据,格式不整齐、不美观。如果将这个数据表中读出的记录信息嵌入table表格里,将更加整齐美观。修改ASP网页文件如下。
----------------------------清单7-2 7-2.asp-------------------------
<%
Dim conn
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Driver={Microsoft Access Driver (∗.mdb)};
Dbq=d:\CH-7\db1.mdb"
set rs=conn.execute("select ∗ from users")
Response.write "<table border='1' width='300'
align='center'><tr><th>ID</th> <th>姓名</th><th>系 别</th><th>密码
</th><th>级别</th></tr>"
do while not rs.eof
Response.write
"<tr><td>"&rs("id")&"</td><td>"&rs("name")&"</td><td>"&rs("depts")
&"</td><td>"&rs("pwd")&"</td><td>"&rs("grade")&"</td></tr>"
rs.movenext
loop
Response.write "</table>"
conn.close
set conn=nothing
%>
--------------------------------------------------------------------
调试结果如图7-13所示。
当有多个程序都要对数据库db1.mdb的表users进行操作时,此程序的前三行将会反复用到,可以将这三行代码单独保存为一个ASP文件:
<%
Dim conn
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Driver={Microsoft Access Driver (∗.mdb)}; Dbq=d:\CH-7\db1.mdb"
%>
图7-13 7-2.asp的调试结果
其中,d:\CH-7\db1.mdb是Access数据库在本机里的绝对路径和库文件名。如果将网站拷贝到其他服务器,绝对路径可能不一样,那么Connection连接就会找不到数据库文件。为了保证程序的可移植性,ASP程序里最好只写数据库文件的相对路径,再用Server.MapPath方法获取数据库文件的绝对路径,代码如下。
---------------------------清单7-1-1 conn.asp-----------------------<%
Dim conn
Set conn=Server.CreateObject("ADODB.Connection")
conn.open "Driver={Microsoft Access Driver (∗.mdb)};
Dbq="&Server.MapPath("db1.mdb")
%>
--------------------------------------------------------------------
然后在需要引用该conn连接的ASP文件的第一行,加入如下代码:
<!--#include file="conn.asp" -->
原来的7-2.asp文件,就变为:
--------------------------清单7-2-1 7-2-1.asp-----------------------
<!--#include file="conn.asp" -->
<%
set rs=conn.execute("select ∗ from users")
Response.write "<table border='1' width='300'
align='center'><tr><th>ID</th><th>姓名</th><th>系 别</th><th>密码
</th><th>级别</th></tr>"
do while not rs.eof
Response.write
"<tr><td>"&rs("id")&"</td><td>"&rs("name")&"</td><td>"&rs("depts"
)&"</td><td>"&rs("pwd")&"</td><td>"&rs("grade")&"</td></tr>"
rs.movenext
loop
Response.write "</table>"
conn.close
set conn=nothing
%>
--------------------------------------------------------------------
调试结果与7-2.asp一致。
注意:为了网站数据库的安全,防止他人下载数据库文件,可以把数据库文件名中加一个特殊字符,如"#"等,有一定的防下载作用。还可以把数据库文件命名为"∗.asp",会更安全一些。若要通过ASP命令往数据库中添加、删除或更新记录,数据库文件的属性必须设为可写。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。