马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全编程|初级9.2.3存储历程
存储历程的利用是Command工具失掉使用的一个范畴。存储历程(偶然也称存储查询)是存储在数据库中事后界说的SQL查询语句。
为何应当创立和利用存储历程而不是在代码中间接利用SQL字符串呢?次要有以下几个来由:
・存储历程被数据库编译过。如许能够发生一个“实行企图”,因而数据库切实地晓得它将做甚么,从而加速了历程的实行速率。
・存储历程一般被数据库高速缓存,如许使它们运转得更快,由于此时不必要从磁盘中读取它们。并不是一切的数据库都撑持这类缓存机制,好比微软的Access就不撑持,而SQLServer却撑持。
・经由过程指定命据库中的表只能被存储历程修正,能够确保数据更平安。这意味着具有潜伏伤害的SQL操纵不会实行。
・能够制止将ASP代码和冗杂的SQL语句混在一同,从而使ASP代码更容易于保护。
・能够将一切SQL代码会合寄存于服务器。
・能够在存储过程当中利用输入参数,同意前往纪录集或其他的值。
一样平常说来,存储历程几近老是比相称的SQL语句实行速率快。
为了利用存储历程,只需将存储历程的名字作为命令文本,并设置响应的范例。比方,思索后面更旧书价的例子。假如在SQLServer上创立一个存储历程,能够编写代码:
CREATEPROCEDUREusp_UpdatePrices
AS
UPDATETitles
SETPrice=Price*1.10
WHERETYPE=Business
关于微软的Access数据库,可使用一个复杂的更新查询语句完成不异的义务,如-1所示:
-1利用微软的Access数据库完成更新查询
要在ASP网页中运转该存储历程,只必要利用以下代码:
SetcmdUpdate=Server.CreateObject("ADODB.Command")
cmdUpdate.ActiveConnection=strConn
cmdUpdate.CommandText="usp_UpdatePrices"
cmdUpdate.CommandType=adCmdStoredProc
cmdUpdate.Execute,,adExecuteNoRecords
这只是运转存储历程。没有纪录集前往,由于只是在更新数据。必要记着的是,除非的确必要,不要创立纪录集。
固然如许做也能够,但并非很天真,由于仅仅处置一品种型的书。更好的做法是创立一个同意我们选择书范例的历程,如许就不用为每类书创立一个历程。一样也可往失落流动的10%更新,如许使得天真性更好。那末,怎样才干做到这一点呢,很复杂,利用参数。
1.参数
存储历程的参数(或变量)与一样平常的历程和函数的参数一样,能够传到函数外部,然后函数可使用它的值。SQLServer(其他数据库也一样,包含Access)中的存储历程都具有如许的功效。
为了使存储历程能处置多品种型的书,乃至同意用户指订价格的增添(或削减),必要增添一些参数:
CREATEPROCEDUREusp_UpdatePrices
@TypeChar(12),
@PercentMoney
AS
UPDATETitles
SETPrice=Price*(1+@Percent/100)
WHEREType=@Type
如今,存储历程usp_UpdatePrices带有两个参数:
・一个是书的范例(@Type)。
・一个是书价变更的百分比(@Percent)。
与VBScript的函数一样,这些参数都是变量。但是,与VBScript和其他剧本言语分歧的是:在这些剧本言语中的变量都是variant范例,而SQL变量具有断定的范例(char、Money等等)。必需恪守SQL变量的定名标准,即变量必需以标记@入手下手。
注重,我们让百分数作为一个整数(如10代表10%),而不是作为一个分数值传进此历程。这只是让存储历程变得更直不雅一些。
2.Parameters汇合
那末,如今有了带参数的存储历程,但怎样经由过程ADO来挪用它呢?我们已见到了怎样用Command工具挪用不带参数的存储历程,实践上,它们之间并没有甚么分歧。分歧的地方在于Parameters汇合的利用。
Parameters汇合包括存储过程当中每一个参数的Parameter工具。但是,ADO其实不会主动地晓得这些参数是甚么,因而,必需用CreateParameter办法创立它们,接纳上面的情势:
SetParameter=Command.CreateParameter(Name,[Type],[Direction],[Size],[Value])
参数及申明如表9-3所示:
表9-3CreateParameter办法的参数及申明
参数
说明
Name
参数名。这是Parameters汇合中的参数名,不是存储过程当中的参数名。但是,利用不异的名字是一个好的做法
Type
参数的数据范例。能够是一个adDataType常数,详见附录
Direction
参数的偏向,指明是参数向存储历程供应信息,仍是存储历程向ADO前往信息。能够是上面的值之一:
adParamInput,参数是传给存储历程的输出参数
adParamOutput,参数是从存储历程检索出的输入参数
adParamInputOutput,参数可同时作为输出和输入参数
adParamReturnValue,该参数包括存储历程前往的形态
Size
参数长度。关于流动长度的范例,好比整型,该值能够疏忽
Value
参数的值
一旦创立了参数就能够将其追加到Parameters汇合中,比方:
SetparValue=cmdUpdate.CreateParameter("@Type",adVarWChar,adParamInput,_
12,"Business")
cmdUpdate.Parameters.AppendparValue
SetparValue=cmdUpdate.CreateParameter("@Percent",adCurrency,_
adParamInput,,10)
cmdUpdate.Parameters.AppendparValue
没有需要显式地创立一个工具往保留参数,缺省的Variant范例已能够事情得相称好。假如不想创立一个变量,也能够走捷径,比方上面的代码:
cmdUpdate.Parameters.Append=_
cmdUpdate.CreateParameter("@Percent",adCurrency,adParamInput,,10)
这利用CreateParameter办法前往一个Parameter工具,并用Append办法吸收它。这类办法比利用变量运转得快,却加长了代码行,可读性对照差。能够依据本人的喜好选择个中一种办法。
参数加到Parameters汇合后,就保存在个中,因而,纷歧定在创立参数时就为每一个参数赋值。能够在命令运转前的任什么时候候设置参数的值。比方:
cmdUpdate.Parameters.Append=_
cmdUpdate.CreateParameter("@Percent",adCurrency,adParamInput)
cmdUpdate.Parameters("@Percent")=10
前一章提到了会见汇合中的值有好几种办法,Parameters汇合并没有甚么分歧。下面的例子利用参数的名字在汇合中检索参数,也能够利用索引号举行检索:
cmdUpdate.Parameters(0)=10
以上代码对参数汇合中第一个(Parameters汇合从0入手下手编号)参数举行了赋值</p>[1][2][3]下一页
asp是基于web的一种编程技术,可以说是cgi的一种。它可以完成以往cgi程序的所有功能,如计数器、留言簿、公告板、聊天室等等。 |