大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> JSP专区 -> ASP存储过程的使用方法

ASP存储过程的使用方法

时间: 2021-07-31 作者:daque

一、运用command东西和parameter东西传播参数本讲将重要运用microsoft sql server7.0数据库,先创造一个贯穿文献adosql7.asp备用,此后用到时不复更加证明。<% ''adosql7.aspoption explicitresponse.expires = 0 ''第一局部: 创造贯穿dim cnn, strcnnset cnn = server.createobject("adodb.connection")strcnn = "provider=sqloledb; user id=sa; password=; initial catalog=pubs; data source=icbczjp"cnn.open strcnn%>提防:本人运用时要将data source设为你的数据库效劳器地方的呆板名。其余,往日运用access数据库时,用microsoft access97不妨很简单的察看字段及数据,而运用sql server数据库,更加是并不在数据库效劳器,而是在另一台呆板上调节和测试asp剧本时,要察看字段及数据便需其余安置东西,这边向你供给一个东西:msqry32.exe(microsoft query),这个文献随office97安置,普遍坐落目次“microsoft office\office”下。例wuf70.asp:<%@ language="vbscript" %><!--#include file="adosql7.asp"--><!--#include file="adovbs.inc"--><% '' wuf70.aspdim cmdtest, prmtest, rstest''创造 command 东西set cmdtest = server.createobject("adodb.command")‘recordset、command东西都不妨经过activeconnection属性来贯穿connection东西cmdtest.activeconnection = cnn''sql吩咐 - 含两个参数, 用 ? 表白cmdtest.commandtext = "update jobs set job_desc = ? where job_id = ?"''设吩咐典型为 sql 语句cmdtest.commandtype = adcmdtext''prepared 属性确定能否将 sql 吩咐先行编写翻译,将其设为true,不妨加速运转cmdtest.prepared = true ''创造 parameter 东西set prmtest=cmdtest.createparameter("job_desc",advarchar,adparaminput,50,"搜集")''将数据追加到 parameters 数据汇合中cmdtest.parameters.append prmtest set prmtest = cmdtest.createparameter("job_id",adsmallint,adparaminput,,"12")cmdtest.parameters.append prmtest ''实行窜改 – 不须要归来截止,大略的运用cmdtest.execute 就不妨了cmdtest.execute ''从新树立参数运转 – 便可窜改另一条数据cmdtest.parameters("job_id") = "1"cmdtest.parameters("job_desc") = "尝试"cmdtest.execute ''从新树立参数运转cmdtest("job_id") = "14"cmdtest("job_desc") = "金融"cmdtest.execute set rstest = cnn.execute("select job_id,job_desc from jobs")while not rstest.eof    response.write rstest(0) & rstest(1) & "<br>"    rstest.movenextwend cnn.close : set prmtest = nothingset cmdtest = nothing: set cnn = nothing%>领会:1.command东西的createparameter本领用来为sql吩咐或保存进程创造参数东西,公有五个参数(五个参数都是可选项):第一个参数:参数东西的称呼;第二个参数:参数东西的数据典型,品种太多,仍旧参考ado扶助吧,这边advarchar(字符串值)、adsmallint(2 字节带标记整型);第三个参数:参数典型。不妨是:adparaminput(引导输出参数)、adparamoutput( 引导为输入参数)、adparamreturnvalue(引导为归来值)、adparamunknown(引导参数典型没辙决定)、adparaminputoutput(引导为输出/输入参数);第四个参数:参数的数据长度,最佳指定于与数据库中对应字段长度十分,免得运用时堕落,更加数据典型为varchar时,即使是整型或日子型则不用供给该值;第六个参数:参数的树立初值。2.cmdtest.parameters.append本领减少一个parameter东西到parameters数据汇合中,从本例中也可看到怎样运用多个参数。3.从本例不妨看到,只须要从新设定输出参数,便可实行对其余数据的窜改,特殊简单,这一思绪在编制程序时也是最常用的本领之一。4.重设参数,既不妨运用cmdtest.parameters,也不妨简略为cmdtest("job_id")。 二、在asp中运用保存进程什么是保存进程(保存进程坐落数据库效劳器中,是一个sql语句的汇合,可包括一个或多个sql语句)、还好吗创造保存进程不属于本讲座的实质,本讲座主假如举例证明在asp中怎样挪用保存进程。运用保存进程的长处是大大的,保存进程比在asp剧本中运转sql吩咐功效更高;不妨普及完全本能并减少搜集负载(缩小了在搜集效劳器和数据效劳器之间的交互);不妨优化asp代码和巩固代码精巧性之类。(一)在保存进程中运用输出参数本例中运用的保存进程为sql server7.0自带的“byroyalty”,内里的一条sql语句特殊大略,无非是多了一个create procedure byroyalty,而且有一个输出参数为@percentage:create procedure byroyalty @percentage intasselect au_id from titleauthorwhere titleauthor.royaltyper = @percentageserve by www.cidu.net例wuf71.asp<% @language = vbscript %><!--#include file="adosql7.asp"--><!--#include file="adovbs.inc"--><% '' wuf71.aspdim cmdtest, prmtest, rstestset cmdtest = server.createobject("adodb.command")cmdtest.commandtext = "byroyalty"          ''保存进程名''设吩咐典型为 保存进程cmdtest.commandtype = adcmdstoredproc ''创造 parameter 东西set prmtest = server.createobject("adodb.parameter")‘type属性对应wuf70.asp中的第二个参数prmtest.type = adinteger        ''4 字节的带标记整型‘direction属性对应wuf70.asp中的第三个参数prmtest.direction = adparaminput‘value属性对应wuf70.asp中的第六个参数prmtest.value = 30cmdtest.parameters.append prmtest set cmdtest.activeconnection = cnn‘须要归来一个记载集,故运用set rstest = cmdtest.executeset rstest = cmdtest.execute while not rstest.eof    response.write rstest(0)  & "<br>"    rstest.movenextwend cnn.closeset rstest = nothing : set prmtest = nothingset cmdtest = nothing: set cnn = nothing %>    commandtext属性既不妨指定sql吩咐,也不妨指定于保存进程大概是表称呼。    在本例中,创造parameter东西与wuf70.asp略有各别,本来提防看看,道理也是差不离的,本例再有两个属性未用:prmtest.name、prmtest.size,加上type、direction和value,对应于wuf70.asp中的五个参数。 (二)运用输入参数从数据库表中博得一个记载或计划一个值时,须要运用归来输入参数的保存进程。为了举例,先在sql server的pubs库中兴建一保存进程outemploy,该保存进程须要输出两个日子,而后输入一个最大值。create procedure outemploy(@job_lvl tinyint output,@hire_date1 datetime, @hire_date2 datetime )asselect @job_lvl = max(job_lvl) from employeewhere hire_date >= @hire_date1 and hire_date <= @hire_date2有多种本领不妨创造保存进程:1.运用microsoft sql server的enterprise manager,翻开后在左边的树目次中顺序翻开:console root – microsoft sql servers – sql server group – icbczjp(windows nt) – databases – pubs – stored procedure – new stored procedure,输出保存进程后,还可对其举行语法检验和测定;2.运用microsoft sql server的query analyzer,先贯穿数据库效劳器并采用pubs数据库。输出上头的保存进程并点击execute query(或按f5);3.运用vb6.0,翻开菜单“视图”/“数据视图窗口”后,右键单击“数据链接”/“兴建数据链接”;4.运用asp剧本创造保存进程,例wuf75.asp:<% @language = vbscript %><!--#include file="adosql7.asp"--><!--#include file="adovbs.inc"--><% '' wuf75.aspdim strsql''注: & chr(10) & chr(13) 实足不妨不要, 主假如为了场面strsql="create procedure outemploy ( @job_lvl tinyint output, " & chr(10) & chr(13) &_       "@hire_date1 datetime, @hire_date2 datetime) as " & chr(10) & chr(13) &_       "select @job_lvl = max(job_lvl) from employee " &_       "where hire_date >= @hire_date1 and hire_date <= @hire_date2" cnn.execute strsqlresponse.write "创造保存进程胜利"cnn.close: set cnn = nothing%>    保存进程创造后,除去运用菜单,你还不妨运用sql语句“drop procedure outemploy”简略它。    例wuf72.asp – 把所须要的输出参数送入保存进程并博得输入截止。<% @language = vbscript %><!--#include file="adosql7.asp"--><!--#include file="adovbs.inc"--><% '' wuf72.aspdim cmdtest, prmtestset cmdtest = server.createobject("adodb.command")cmdtest.activeconnection = cnncmdtest.commandtext = "outemploy"    ''保存进程名cmdtest.commandtype = adcmdstoredproc ''创造 parameter 东西set prmtest = cmdtest.createparameter("job_lvl",adtinyint,adparamoutput)cmdtest.parameters.append prmtest''adtinyint - 1 字节带标记整型 ''addbdate - 日子值 (yyyymmdd) set prmtest = cmdtest.createparameter("hiredate1",addbdate,adparaminput,,"1993-05-09")cmdtest.parameters.append prmtest set prmtest = cmdtest.createparameter("hiredate2",addbdate,adparaminput,,"1994-02-01")cmdtest.parameters.append prmtest cmdtest.execute‘底下三种表白办法道理一律response.write cmdtest("job_lvl") & "<br>"response.write cmdtest.parameters("job_lvl") & "<br>"response.write cmdtest.parameters("job_lvl").value cnn.closeset prmtest = nothingset cmdtest = nothing: set cnn = nothing%>(三)运用归来代码参数用return语句不妨从保存进程归来各别的归来代码,如底下保存进程先博得一个记载集,而后,若有叫margaret的雇员则归来1,要不归来0。create procedure returnemployasselect emp_id, fname from employeeif exists(select fname from employee where fname=''margaret'')       return(1)else       return(0) 例wuf73.asp<% @language = vbscript %><!--#include file="adosql7.asp"--><!--#include file="adovbs.inc"--><% '' wuf73.aspdim cmdtest, prmtest, rstestset cmdtest = server.createobject("adodb.command")cmdtest.activeconnection = cnncmdtest.commandtext = "returnemploy"    ''保存进程名cmdtest.commandtype = adcmdstoredproc set prmtest = cmdtest.createparameter("returnvalue",adinteger,adparamreturnvalue)cmdtest.parameters.append prmtest set rstest = cmdtest.execute()while not rstest.eof       response.write rstest(0) & " ][ " & rstest(1) & "<br>"       rstest.movenextwendrstest.close: set rstest = nothing''归来 cmdtest("returnvalue") 之前,必需先封闭rstest, 要不截止缺点 if cmdtest("returnvalue") = 1 then       response.write "有该雇员"else       response.write "无该雇员"end if  cnn.closeset prmtest = nothingset cmdtest = nothing: set cnn = nothing%> 三、怎样处置大数据这边的“大数据”主假如指text(大文本)和image(图像)字段,沿用前方所述的本领没辙精确获得其数据。必需开始运用size = rstest(0).actualsize获得字段值的本质长度,而后再运用rstest(0).getchunk(size)博得数据。在本质运用进程中,因为那些字段都比拟大,为了俭朴、有理运用效劳器资源,普遍均采用分段读取的本领。例wuf74.asp:<% @language = vbscript %><!--#include file="adosql7.asp"--><!--#include file="adovbs.inc"--><% '' wuf74.aspdim strsql, rstest‘pr_info 是一个文古字段strsql = "select pr_info,pub_id from pub_info"set rstest = cnn.execute(strsql) dim basicsize, beginsize, ltextdo while not rstest.eof           response.write rstest(1) & "<br>"       ‘历次读取 1024字节       basicsize = 1024       beginsize = 0       while beginsize < rstest(0).actualsize              ltext = rstest(0).getchunk(basicsize)              beginsize = beginsize + basicsize              ‘逐段输入到存户端        response.write ltext       wend              response.write "<br><br>"    rstest.movenext       loop cnn.closeset rstest = nothing: set cnn = nothing%>在本例中,历次最多读取1024字节,分屡次读完。反之,即使将大数据写至数据库中,本领一致上头,然而不是运用getchunk本领,而是运用appendchunk本领:rstest(0).appendchunk ltext 提防:结果引见一个对于sql server数据库的小本领,即使你遇到过这种情景:数据库的华文数据表露出来均是乱码,请不要慌乱。你只有去我的站点载入sqlsrv32.dll掩盖“c:\windows\system”下的同名文献就不妨了。题目爆发的泉源是sql server启动步调,典范的情景爆发在windows98第二版(sql server启动步调的本子号为3.70.06.23)或windows2000中大概安置了mdac2.5(本子号为3.70.08.20)。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.