3. CommandTi m e o u t
指示在执行一个命令的时候,在终止尝试并报错之前要等待多长的时间。
提供给C o m m a n d和C o n n e c t i o n对象
设置和返回值:设置或返回一个L o n g值,指示为一个命令等待多久,单位为秒,默认值为
3 0。
备注:
• 我们用C o n n e c t i o n对象或C o m m a n d对象的C o m m a n d Ti m e o u t属性来允许一个E x e c u t e方法调
用作废,原因可能是网络传输问题或服务器忙。如果在C o m m a n d Ti m e o u t属性允许的时间
间隔过去之后命令还没有执行完, A D O将会报错并终止该命令的执行。如果将该属性设为
0,A D O将一直等待下去直到命令执行完成。要使用该属性,请确认使用的p r o v i d e r和数据
源支持C o m m a n d Ti m e o u t功能。
• C o n n e c t i o n 对象的C o m m a n d Ti m e o u t 属性设置对同一连接中的C o m m a n d 对象的
C o m m a n d Ti m e o u t设置没有影响;也就是说, C o m m a n d对象的C o m m a n d Ti m e o u t属性不继
承C o n n e c t i o n对象的C o m m a n d Ti m e o u t属性的值。
• 在一个C o n n e c t i o n对象上,C o m m a n d Ti m e o u t属性在打开连接之后保持可读写。
4. CommandTy p e
指示C o m m a n d对象的类型。
设置和返回值:设置或返回如表5 - 1所列的C o m m a n d Ty p e E n u m值:
表5-1 设置或返回的Command Type Enum
常量描述
A d C m d Te x t 将C o m m a n d Te x t看作命令的文本定义
A d C m d Ta b l e 将C o m m a n d Te x t看作数据表名
A d C m d S t o r e d P r o c 将C o m m a n d Te x t看作存储过程
A d C m d U n k n o w n 默认。C o m m a n d Te x t属性的命令类型未知
备注:
• 我们用C o m m a n d Ty p e属性来优化对C o m m a n d Te x t属性的预处理。
• 如果C o m m a n d Ty p e属性值为a d C m d U n k n o w n(默认值),执行效率可能会降低,因为A D O
必须询问p r o v i d e r以确定C o m m a n d Te x t属性是S Q L语句、存储过程还是数据表。如果你知
道使用的命令的类型,设置正确的C o m m a n d Ty p e属性直接引导A D O到相关的代码进行处
理。如果C o m m a n d Ty p e属性不符合C o m m a n d Te x t属性中的命令的类型,当调用E x e c u t e方
法时就会产生一个错误。
5. Name
指示一个对象的名称。
提供给C o m m a n d、F i e l d、P a r a m e t e r和P r o p e r t y对象
设置和返回值:设置或返回一个字符串值。C o m m a n d和P a r a m e t e r对象的该属性值可读写,
P r o p e r t y和F i e l d对象的该属性值只读。
102使用ASP与SQL Server 网站架设
下载
备注:
• 我们用N a m e属性来赋予或取得一个C o m m a n d、F i e l d、P a r a m e t e r或P r o p e r t y对象的名称。
• 对还没有附加到P a r a m e t e r s集合的P a r a m e t e r对象, N a m e属性可读写。对已附加的
P a r a m e t e r对象和其它对象,N a m e属性只读。一个集合中的名称不一定唯一。
• 你能够通过顺序访问取得N a m e属性,之后就可以直接用名称访问该对象。
6. Prepared
指示在执行这前是否创建一个该命令的编译好的语句。
设置和返回值:设置或返回一个B o o l e a n值。
备注:
• 我们用P r e p a r e d属性在一个C o m m a n d对象第一次执行之前使p r o v i d e r根据C o m m a n d Te x t属
性储存一个该查询的已准备(已编译)版本。这有可能延迟一个命令的一次执行,但一旦
p r o v i d e r编译了一个命令,它就会在以后执行该命令时都使用这个已编译好的版本,这将
会大大提高性能。
• 如果该属性为F a l s e , p r o v i d e r,则将会在不创建已编译版本的情况下直接执行该命令。
• 如果p r o v i d e r不支持该命令的执行,它会忽略任何要求编译该命令的请求并将P r e p a r e d属性
设为F a l s e。
7. State
请参看C o n n e c t i o n对象中该属性的说明。
5.5.4 存储过程
在讨论S t o r e d P r o c e d u r e(存储过程)对象之前,我还要对C o m m a n d对象的E x e c u t e方法的作
用进行一下阐述,一般来说使用C o m m a n d的E x e c u t e方法有3个目的。
• 用于进行一些简单的处理,例如删除一条记录:
Co m m . C o m m a n d T y p e = A d C m d T e x t
Comm.CommandText="Delect From employee Where Job_ID=1"
Co m m . e x e c u t e
这样的工作不需要返回什么东西。
• 用于进行一些复杂的处理,这类一般都是和S t o r e d P r o c e d u r e一同工作的,而且有输出和输
入参数,这也是我们本节的讨论主题。
• 用于返回一个R e c o r d S e t对象,用于其它的处理,例如:
Co m m . C o m m a n d T y p e = A d C m d T e x t
Comm.CommandText="Delect From employee Where Job_ID=1"
Set rs=comm.execute
D I M I
W H I L E not rs.EOF
F O R I=0 to rs.fileds.count-1
Re s p o n s e .Write rs.fileds.item(I).value&","
N E X T
Re s p o n s e .Write "<br>"
第5章使用数据库使用103
下载
r s . M o v e N e x t
W E N D
那么S t o r e d P r o c e d u r e是什么呢?它是一个预先存储的数据库执行动作集,在S Q L的管理结构
中,对于一个数据库有2部分:一个是数据表的集合,一个是S t o r e d P r o c e d u r e的集合。将两者结
合可以完成很多强大的功能。S t o r e d P r o c e d u r e其实是对传统的S Q L语句的一种扩展,主要是在参
数的输入与输出上。下面我大致介绍一下S t o r e d P r o c e d u r e的语法结构和与C o m m a n d对象的参数
的传递问题。
S t o r e d P r o c e d u r e的标准写法:
Create Procedure Procedure_Name
Define Parameter
A s
SQL Structure
上面的语法结构中, P r o c e d u r e _ N a m e为存储结构的的名字,也是你将在C o m m a n d中引用的
名字。然后是定义输出和输入的参数。最后是一个S Q L结构化语句。下面是一个S t o r e d P r o c e d u r e
的例子,它无需输入参数,也没有输出。
Create Procedure Del_User
A s
Delect From Employee Where Job_ID=1
如果我们要删除指定的J o b _ I D,则我们需要给这个S t o r e d P r o c e d u r e输入参数。
Create Procedure Del_User1
@intID int
A s
Delect From Employee Where Job_Id = @intID
这里的@ i n t J o b就是一个输入参数,它可以从外部接受输入的值,下面是给它输入的a s p程
序:
Set conn=Server.CreateObject("ADODB.Connection")
Set comm=Server.CreateObject("ADODB.Command")
conn.ConnectionString="Driver={SQL Server};Server=ser;"&_
" u i d = s a ; p s s s = ; d a t a b a s e = e m p l o y e e "
c o n n . o p e n
Co m m . A c t i v e C o n n e c t i o n = c o n n
Co m m . C o m m a n d T y p e = a d C m d S t o r e d P r o c
Comm.CommandType="Del_User1" ' 这里的名字就是前面定义过的S t o r e d P r o c e d u r e的名字。
'下面就是参数的输入
p a r a m = c o m m . C r e a t e P a r a m e t e r ( " I D " , a d I n t , a d P a r a m I n p u t , 4 )
'这里的a d P a r a m I n p u t定义是最重要的。
Param.Value=1 ' 这里的值可以输入你想要的值,也可以用R e q u e s t来获得
Comm.Parameters.Append param
Comm.Execute
这样我们就可以向S t o r e d P r o c e d u r e传递参数了。
有时在一个S t o r e d P r o c e d u r e中,还存在有输出的参数,下面是一个例子它返回一个J o b _ I D确
104使用ASP与SQL Server 网站架设
下载
定的F r i _ N a m e的值
Create Procedure Get_fName
@intID int
@fName varChar Output '说明为输出的参数
A s
Select @fName = Fri_Name Where Job_ID = @intID
它相应的a s p程序也要改写为下面的形式
Set conn=Server.CreateObject("ADODB.Connection")
Set comm=Server.CreateObject("ADODB.Command")
conn.ConnectionString="Driver={SQL Server};Server=ser;"&_
" u i d = s a ; p s s s = ; d a t a b a s e = e m p l o y e e "
c o n n . o p e n
Co m m . A c t i v e C o n n e c t i o n = c o n n
Co m m . C o m m a n d T y p e = a d C m d S t o r e d P r o c
Co m m . C o m m a n d T y p e = " G e t _ f N a m e "
'这里的名字就是前面定义过的S t o r e d P r o c e d u r e的名字。
'下面就是参数的输入
p a r a m = c o m m . C r e a t e P a r a m e t e r ( " I D " , a d I n t , a d P a r a m I n p u t , 4 )
'这里的a d P a r a m I n p u t定义是最重要的。
Param.Value=2 ' 这里的值可以输入你想要的值,也可以用R e q u e s t来获得
Comm.Parameters.Append param
p a r a m = c o m m . C r e a t e P a r a m e t e r ( " f N a m e " , a d V a r c h a r , a d P a r a m O u t p u t , 2 5 5 , " " )
'这里的a d P a r a m O u t p u t定义是最重要的。说明它是一个输出的参数,默认的值为一空的字符串
Comm.Parameters.Append param
Comm.Execute
Response.Write "Job_Id 为" & p a r a m ( 0 ) & "的员工的姓为" & p a r a m ( 1 )
我给大家简单介绍了一下S t o r e d P r o c e d u r e的基本概念,但S t o r e d P r o c e d u r e比较复杂,如果你
想进一步的深入,可以参看SQL Server的手册。
5.6 ASP与数据库连接
在We b服务器上运行的应用程序需要进行大量的服务器端数据库操作,而A S P通过内嵌
Database Access组件实现对任何支持A D O的数据源进行操作,包括MS SQL Server、A c c e s s、
O r a c l e等。
要使用A D O,必须用服务器端的包含(SSI) 语句在.asp 文件中包含进ADO 常量的包含文件。
在服务器端配置好A S P后, A D O的常量被放置在“ \PROGRAM FILES\COMMON FILES
\ S Y S T E M \ A D O”下。
如果用VBScript 作为主脚本语言的,则包含文件为A D O V B S . I N C。如果用J S c r i p t,则包
含文件为A D O J AV S . I N C。
可采用下列语句将包含文件包含进.asp 文件中:
<!--#include virtual="/PROGRAM FILES/COMMON FILES/SYSTEM/ADO/ADOVBS.INC"-->
或
< ! - - # i n c l u d e v i r t u a l = " / P R O G R A M F I L E S / C O M M O N F I L E S / S Y S T E M / A D O / A D O J A V A S . I N - >
第5章使用数据库使用105
下载
5.6.1 使用O D B C与数据库连接
要与O D B C兼容的数据库进行连接,必须建立一个Data Source Name (DSN) 用以定位和标识
特定的ODBC 兼容数据库
通过O D B C,您可以选择希望创建的DSN 的类型:用户、系统或文件。用户和系统D S N
存储在Windows NT 注册表中。系统DSN 允许所有的用户登录到特定的服务器上去访问数据库,
而用户DSN 使用适当的安全身份证明限制数据库到特定用户的连接。文件DSN 用于从文本文
件中获取表格,提供了对多用户的访问,并且通过复制DSN 文件,可以轻易地从一个服务器转
移到另一个服务器。
通过在Windows 的“开始”菜单打开“控制面板”,您可以创建基于DSN 的文件。双
击“ODBC Data Sources ”图标,然后选择“文件D S N”属性页,单击“添加”,选择数据
库驱动程序,然后单击“下一步”。按照后面的指示配置适用于您的数据库软件的D S N。(见
图5 - 1)
图5-1 ODBC数据管理器
1) 配置Microsoft Access 数据库的文件D S N
在“创建新数据源”对话框中,从列表框选择“ Microsoft Access Driver”,然后单击“下一
步”(见图5 - 2)。
键入您的DSN 文件名,本处输入A c c e s s D a t a b a s e,然后单击“下一步”。
单击“完成”创建数据源(见图5 - 3)。
在“ODBC Microsoft Access 97 安装程序”对话框中,单击“选择”。选择Microsoft Access
数据库文件( * . m d b ),然后单击“确定”(见图5 - 4)。
本处选择的数据库文件包含一个表,名字叫“表1”,包含两个字段“N a m e”和“A g e”。
106使用ASP与SQL Server 网站架设
下载
图5-2 选择O D B C数据源
图5-3 输入D S N文件名
2) 建立连接并输出所有记录的代码如下:
<%@ LANGUAGE = "VBScript" %>
<%
Set objConnection = Server.CreateObject("ADODB.Connection")
objConnection.Open "Filedsn=AccessDatabase.dsn"
第5章使用数据库使用107
下载
SQLQuery = "SELECT * FROM 表1"
Set rsCustomersList = objConnection.Execute(SQLQuery)
% >
<%Do Until rsCustomersList.EOF%>
< t r >
<td bgcolor="f7efde" align=center>
<%= rsCustomersList("Name")%>
<%= rsCustomersList("Age") %>
< b r >
< / t d >
</tr>
<%
rsCustomersList.MoveNext
Loop
% >
< % o b j C o n n e c t i o n . c l o s e % >
以上代码建立了一个C o n n e c t i o n对象,用C o n n e c t i o n对象的O p e n方法打开在O D B C中文件
D S N设置好的A c c e s s数据库,用C o n n e c t i o n对象的E x e c u t e方法查询数据库中表1的记录,用循环
输出所有记录的内容。
图5-4 选择要连接的数据库
在记事本中输入以上代码,保存为L i s t . a s p,用H T T P的方式打开浏览。
3) 配置SQL Server 数据库文件D S N
108使用ASP与SQL Server 网站架设
下载
如果数据库驻留在远程服务器上,请与服务器管理员联系,获取附加的配置信息;下面的
过程使用SQL Server 的ODBC 默认的设置,它可能不适用于您的配置。
在“创建新数据源”对话框中,从列表框中选择“ SQL Server”,然后单击“下一步”。
键入DSN 文件的名称,然后单击“下一步”。
单击“完成”创建数据源。
键入运行SQL 服务程序的服务器的名称、登录ID 和密码(见图5 - 5)。
在“创建SQL Server 的新数据源”对话框中,在“服务器”列表框中键入包含SQL Server
数据库的服务器的名称,然后单击“下一步”(见图5 - 6)。
选择验证登录ID 的方式(见图5 - 7)。
如果要选择SQL 服务器验证,请输入一个登录ID 和密码,然后单击“下一步”。
在“创建SQL Server 的新数据源”对话框中,设置默认数据库、存储过程设置的驱动程序
和ANSI 标识,然后单击“下一步”(见图5 - 8)。
在对话框(同样名为“创建SQL Server 的新数据源”)中,选择一种字符转换方法,然后单
击“下一步”。
在下一个对话框(同样名为“创建SQL Server 的新数据源”)中,选择登录设置。
在“ODBC Microsoft SQL Server 安装程序”对话框中,单击“测试数据源”。如果DSN 正
确创建,“测试结果”对话框将指出测试成功完成(见图5 - 9)。
图5-5 输入D S N文件名
4) 建立连接并输出所有记录的代码如下:
<%@ LANGUAGE ="VBScript"%>
<%
第5章使用数据库使用109
下载
Set objConnection = Server.CreateObject("ADODB.Connection")
o b j C o n n e c t i o n . O p e n " F i l e d s n = S q l S e r v e r . d s n "
SQLQuery = "SELECT * FROM Tsgl"
Set rsCustomersList = objConnection.Execute(SQLQuery)
% >
<%Do Until rsCustomersList.EOF%>
< t r >
<td bgcolor="f7efde" align=center>
<%= rsCustomersList("Tsgl_MC")%>
<%= rsCustomersList("Tsgl_CBS") %>
< b r >
< / t d >
</tr>
<%
rsCustomersList.MoveNext
Loop
% >
< % o b j C o n n e c t i o n . c l o s e % >
本例中,表Ts g l包含Ts g l _ M C和Ts g l _ C B S两个字段,在记事本中输入以上代码,保存为
L i s t . a s p,用H T T P的方式打开浏览。
图5-6 选择SQL Server数据源
110使用ASP与SQL Server 网站架设
下载
图5-7 选择SQL Server的登陆方式
图5-8 选择数据库
第5章使用数据库使用111
下载
图5-9 检测SQL Server数据源
5.6.2 不使用O D B C与数据库连接
通过建立C o n n e c t i o n对象及R e c o r d e s t对象,A S P可以方便地与任何与OLD DB兼容的数据库
进行连接并进行查询、修改、更新等操作。
1) 与A C C E S S数据库进行连接,代码如下:
<%@ LANGUAGE = "VBScript" %>
<!--#include file="ADOVBS.INC"-->
<%
Set objConnection = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("db1.mdb")
objConnection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
SQLQuery = "SELECT * FROM 表1"
Set rsRecordset = Server.CreateObject("ADODB.Recordset")
rsRecordset.Open SQLQuery,objConnection, adOpenKeyset, adLockReadOnly
% >
<%Do Until rsRecordset.EOF%>
< t r >
<td bgcolor="f7efde" align=center>
<%= rsRecordset("Name")%>
<br>
<%= rsRecordset("Age") %>
< b r >
< / t d >
112使用ASP与SQL Server 网站架设
下载
</tr>
<%
rsRecordset.MoveNext
Loop
% >
< % o b j C o n n e c t i o n . c l o s e % >
在记事本中输入以上代码,保存为l i s t . a s p,用H T T P的方式打开并浏览。
2) 与SQL SERV E R数据库进行连接,代码如下:
<%@ LANGUAGE = "VBScript" %>
<!--#include file="ADOVBS.INC"-->
<%
Set objConnection = Server.CreateObject("ADODB.Connection")
objConnection.Open "driver={SQL Server};server=jcserver;uid=sa;database=MIS;"
SQLQuery = "SELECT * FROM TSGL"
Set rsRecordset = Server.CreateObject("ADODB.Recordset")
rsRecordset.Open SQLQuery,objConnection, adOpenKeyset, adLockReadOnly
% >
<%Do Until rsRecordset.EOF%>
< t r >
<td bgcolor="f7efde" align=center>
<%= rsRecordset("Tsgl_MC")%>
<br>
<%= rsRecordset("Tsgl_CBS") %>
< b r >
< / t d >
</tr>
<%
rsRecordset.MoveNext
Loop
% >
< % o b j C o n n e c t i o n . c l o s e % >
完了
我是看晕拉太长了