仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 364|回复: 7
打印 上一主题 下一主题

[学习教程] ASP教程之ASP存储历程的利用办法

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:13:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
帮助用户快速实现各种应用服务,ASP商有整合各方面资源的能力,可在短期内为用户提供所需的解决方案。例如,典型的ERP安装,如果要在客户端安装的话需要半年到二年的时间,但是美国的一些ASP商如USI和CORIO能在90—120天内提供ERP应用方案。存储历程  1、利用Command工具和Parameter工具传送参数

本讲将次要利用MicrosoftSQLServer7.0数据库,先创建一个毗连文件AdoSQL7.asp备用,今后用到时不再出格申明。

<%AdoSQL7.asp

OptionExplicit

Response.Expires=0

第一部分:创建毗连

DimCnn,StrCnn

SetCnn=Server.CreateObject("ADODB.Connection")

StrCnn="Provider=sqloledb;UserID=sa;Password=;InitialCatalog=pubs;DataSource=ICBCZJP"

Cnn.OpenStrCnn

%>

注重:本人利用时要将DataSource设为你的数据库服务器地点的呆板名。

别的,之前利用Access数据库时,用MicrosoftAccess97能够很便利的检察字段及数据,而利用SQLServer数据库,特别是其实不在数据库服务器,而是在另外一台呆板上调试ASP剧本时,要检察字段及数据便需别的安装工具,这里向你供应一个工具:Msqry32.exe(MicrosoftQuery),这个文件随Office97安装,一样平常位于目次“MicrosoftOfficeOffice”下。

例wuf70.asp:

<%@LANGUAGE="VBSCRIPT"%>

<!--#includefile="AdoSQL7.asp"-->

<!--#includefile="adovbs.inc"-->

<%wuf70.asp

DimcmdTest,prmTest,rsTest

创立Command工具

SetcmdTest=Server.CreateObject("ADODB.Command")

‘Recordset、Command工具都能够经由过程ActiveConnection属性来毗连Connection工具

cmdTest.ActiveConnection=Cnn

SQL命令-含两个参数,用?暗示

cmdTest.CommandText="UpdatejobsSetjob_desc=?Wherejob_id=?"

设命令范例为SQL语句

cmdTest.CommandType=adCmdText

Prepared属性决意是不是将SQL命令先行编译,将其设为True,能够加速运转

cmdTest.Prepared=True



创立Parameter工具

SetprmTest=cmdTest.CreateParameter("job_desc",adVarChar,adParamInput,50,"收集")

将数据追加到Parameters数据汇合中

cmdTest.Parameters.AppendprmTest

SetprmTest=cmdTest.CreateParameter("job_id",adSmallInt,adParamInput,,"12")

cmdTest.Parameters.AppendprmTest

实行修正C不必要前往了局,复杂的利用cmdTest.Execute就能够了

cmdTest.Execute

从头设置参数运转C即可修正另外一条数据

cmdTest.Parameters("job_id")="1"

cmdTest.Parameters("job_desc")="测试"

cmdTest.Execute

从头设置参数运转

cmdTest("job_id")="14"

cmdTest("job_desc")="金融"

cmdTest.Execute

SetrsTest=Cnn.Execute("Selectjob_id,job_descFromjobs")

WhileNotrsTest.EOF

Response.WritersTest(0)&rsTest(1)&"<br>"

rsTest.MoveNext

Wend

Cnn.close:SetprmTest=Nothing

SetcmdTest=Nothing:SetCnn=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")。

2、在ASP中利用存储历程

甚么是存储历程(存储历程位于数据库服务器中,是一个SQL语句的汇合,可包括一个或多个SQL语句)、如何创立存储历程不属于本讲座的内容,本讲座次要是举例申明在ASP中怎样挪用存储历程。

利用存储历程的优点是年夜年夜的,存储历程比在ASP剧本中运转SQL命令效力更高;能够进步全体功能并加重收集负载(削减了在收集服务器和数据服务器之间的交互);能够优化ASP代码和加强代码天真性等等。

(一)在存储过程当中利用输出参数

本例中利用的存储历程为SQLServer7.0自带的“byroyalty”,内里的一条SQL语句十分复杂,不过是多了一个CREATEPROCEDUREbyroyalty,而且有一个输出参数为@percentage:

CREATEPROCEDUREbyroyalty@percentageint

AS

selectau_idfromtitleauthor

wheretitleauthor.royaltyper=@percentage

servebywww.cidu.net

例wuf71.asp

<%@LANGUAGE=VBScript%>

<!--#includefile="AdoSQL7.asp"-->

<!--#includefile="adovbs.inc"-->

<%wuf71.asp

DimcmdTest,prmTest,rsTest

SetcmdTest=Server.CreateObject("ADODB.Command")

cmdTest.CommandText="byroyalty"     存储历程名

设命令范例为存储历程

cmdTest.CommandType=adCmdStoredProc

创立Parameter工具

SetprmTest=Server.CreateObject("ADODB.Parameter")

‘Type属性对应wuf70.asp中的第二个参数

prmTest.Type=adInteger    4字节的带标记整型

‘Direction属性对应wuf70.asp中的第三个参数

prmTest.Direction=adParamInput

‘Value属性对应wuf70.asp中的第五个参数

prmTest.Value=30

cmdTest.Parameters.AppendprmTest

SetcmdTest.ActiveConnection=Cnn

‘必要前往一个纪录集,故利用SetrsTest=cmdTest.Execute

SetrsTest=cmdTest.Execute

WhileNotrsTest.EOF

Response.WritersTest(0) &"<br>"

rsTest.MoveNext

Wend

Cnn.close

SetrsTest=Nothing:SetprmTest=Nothing

SetcmdTest=Nothing:SetCnn=Nothing

%>

CommandText属性既能够指定SQL命令,也能够指定为存储历程大概是表称号。

在本例中,创立Parameter工具与wuf70.asp略有分歧,实在细心看看,意义也是差未几的,本例另有两个属性未用:prmTest.Name、prmTest.Size,加上Type、Direction和Value,对应于wuf70.asp中的五个参数。

(二)利用输入参数

从数据库表中获得一个纪录或盘算一个值时,必要利用前往输入参数的存储历程。为了举例,先在SQLServer的pubs库中新建一存储历程OUTemploy,该存储历程必要输出两个日期,然后输入一个最年夜值。

CREATEPROCEDUREOUTemploy

(

@job_lvltinyintOUTPUT,

@hire_date1datetime,

@hire_date2datetime

)

AS

select@job_lvl=MAX(job_lvl)fromemployee

wherehire_date>=@hire_date1andhire_date<=@hire_date2

有多种办法能够创建存储历程:

1.利用MicrosoftSQLServer的EnterpriseManager,翻开后在右边的树目次中顺次翻开:ConsoleRootCMicrosoftSQLServersCSQLServerGroupCICBCZJP(WindowsNT)CdatabasesCpubsCstoredprocedureCNewstoredprocedure,输出存储历程后,还可对其举行语法检测;

2.利用MicrosoftSQLServer的QueryAnalyzer,先毗连数据库服务器并选择pubs数据库。输出下面的存储历程并点击ExecuteQuery(或按F5);

3.利用VB6.0,翻开菜单“视图”/“数据视图窗口”后,右键单击“数据链接”/“新建数据链接”;

4.利用ASP剧本创立存储历程,例wuf75.asp:

<%@LANGUAGE=VBScript%>

<!--#includefile="AdoSQL7.asp"-->

<!--#includefile="adovbs.inc"-->

<%wuf75.asp

DimStrSQL

注:&Chr(10)&Chr(13)完整能够不要,次要是为了悦目

StrSQL="CREATEPROCEDUREOUTemploy(@job_lvltinyintOUTPUT,"&Chr(10)&Chr(13)&_

"@hire_date1datetime,@hire_date2datetime)AS"&Chr(10)&Chr(13)&_

"select@job_lvl=MAX(job_lvl)fromemployee"&_

"wherehire_date>=@hire_date1andhire_date<=@hire_date2"

Cnn.ExecuteStrSQL

Response.Write"创立存储历程乐成"

Cnn.close:SetCnn=Nothing

%>

存储历程创立后,除利用菜单,你还可使用SQL语句“DropProcedureOUTemploy”删除它。

例wuf72.aspC把所必要的输出参数送进存储历程并获得输入了局。

<%@LANGUAGE=VBScript%>

<!--#includefile="AdoSQL7.asp"-->

<!--#includefile="adovbs.inc"-->

<%wuf72.asp

DimcmdTest,prmTest

SetcmdTest=Server.CreateObject("ADODB.Command")

cmdTest.ActiveConnection=Cnn

cmdTest.CommandText="OUTemploy"  存储历程名

cmdTest.CommandType=adCmdStoredProc

创立Parameter工具

SetprmTest=cmdTest.CreateParameter("job_lvl",adTinyInt,adParamOutput)

cmdTest.Parameters.AppendprmTest

adTinyInt-1字节带标记整型

adDbDate-日期值(yyyymmdd)

SetprmTest=cmdTest.CreateParameter("hiredate1",adDBDate,adParamInput,,"1993-05-09")

cmdTest.Parameters.AppendprmTest

SetprmTest=cmdTest.CreateParameter("hiredate2",adDBDate,adParamInput,,"1994-02-01")

cmdTest.Parameters.AppendprmTest

cmdTest.Execute

‘上面三种表达体例意义一样

Response.Writecmdtest("job_lvl")&"<br>"

Response.WritecmdTest.Parameters("job_lvl")&"<br>"

Response.WritecmdTest.Parameters("job_lvl").Value

Cnn.close

SetprmTest=Nothing

SetcmdTest=Nothing:SetCnn=Nothing

%>

(三)利用前往代码参数

用Return语句能够从存储历程前往分歧的前往代码,以下面存储历程先获得一个纪录集,然后,如有叫Margaret的雇员则前往1,不然前往0。

CreateProcedureReturnemploy

AS

selectemp_id,fnamefromemployee

IfExists(SelectfnameFromemployeeWherefname=Margaret)

Return(1)

Else

Return(0)

例wuf73.asp

<%@LANGUAGE=VBScript%>

<!--#includefile="AdoSQL7.asp"-->

<!--#includefile="adovbs.inc"-->

<%wuf73.asp

DimcmdTest,prmTest,rsTest

SetcmdTest=Server.CreateObject("ADODB.Command")

cmdTest.ActiveConnection=Cnn

cmdTest.CommandText="Returnemploy"  存储历程名

cmdTest.CommandType=adCmdStoredProc

SetprmTest=cmdTest.CreateParameter("ReturnValue",adInteger,adParamReturnValue)

cmdTest.Parameters.AppendprmTest

SetrsTest=cmdTest.Execute()

WhileNotrsTest.EOF

Response.WritersTest(0)&"]["&rsTest(1)&"<br>"

rsTest.MoveNext

Wend

rsTest.Close:SetrsTest=Nothing

前往cmdtest("ReturnValue")之前,必需先封闭rsTest,不然了局毛病

Ifcmdtest("ReturnValue")=1Then

Response.Write"有该雇员"

Else

Response.Write"无该雇员"

EndIf

Cnn.close

SetprmTest=Nothing

SetcmdTest=Nothing:SetCnn=Nothing

%>

3、怎样处置年夜数据

这里的“年夜数据”次要是指Text(年夜文本)和image(图象)字段,接纳后面所述的办法没法准确猎取其数据。必需起首利用Size=rsTest(0).ActualSize猎取字段值的实践长度,然后再利用rsTest(0).GetChunk(Size)获得数据。在实践利用过程当中,因为这些字段都对照年夜,为了节俭、公道利用服务器资本,一样平常均接纳分段读取的办法。例wuf74.asp:

<%@LANGUAGE=VBScript%>

<!--#includefile="AdoSQL7.asp"-->

<!--#includefile="adovbs.inc"-->

<%wuf74.asp

DimStrSQL,rsTest

‘pr_info是一个文本字段

StrSQL="Selectpr_info,pub_idFrompub_info"

SetrsTest=Cnn.Execute(StrSQL)



DimBasicSize,BeginSize,LText

DoWhileNotrsTest.EOF

Response.WritersTest(1)&"<br>"

‘每次读取1024字节

BasicSize=1024

BeginSize=0

WhileBeginSize<rsTest(0).ActualSize

LText=rsTest(0).GetChunk(BasicSize)

BeginSize=BeginSize+BasicSize

‘逐段输入到客户端

Response.WriteLText

Wend

Response.Write"<br><br>"

rsTest.MoveNext

Loop

Cnn.close

SetrsTest=Nothing:SetCnn=Nothing

%>

在本例中,每次最多读取1024字节,分屡次读完。反之,假如将年夜数据写至数据库中,办法相似下面,不外不是利用GetChunk办法,而是利用AppendChunk办法:

rsTest(0).AppendChunkLtext

注重:最初先容一个关于SQLServer数据库的小技能,假如你碰到过这类情形:数据库的中文数据显现出来均是乱码,请不要惊惶。你只需往我的站点下载sqlsrv32.dll掩盖“C:WindowsSystem”下的同名文件就能够了。成绩产生的泉源是SQLServer驱动程序,典范的情形产生在Windows98第二版(SQLServer驱动程序的版本号为3.70.06.23)或Windows2000中大概安装了MDAC2.5(版本号为3.70.08.20)。实现规模效益。与传统的用户拥有硬件软件所有权和使用权以及传统的应用服务商提供一对一的服务模式不同,ASP拥有应用系统所有权,用户拥有使用权,应用系统集中放在ASP的数据中心中,集中管理,分散使用,以一对多的租赁的形式为众多用户提供有品质保证的应用技术服务,实现规模效益。
透明 该用户已被删除
沙发
 楼主| 发表于 2015-1-19 05:13:09 | 只看该作者
ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。
若天明 该用户已被删除
板凳
发表于 2015-1-25 10:18:03 | 只看该作者
Application:这个存储服务端的数据,如果不清除,会直到web应用程序结束才清除(例如重启站点)
爱飞 该用户已被删除
地板
发表于 2015-2-2 21:39:19 来自手机 | 只看该作者
我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
活着的死人 该用户已被删除
5#
发表于 2015-2-8 06:58:27 | 只看该作者
另外因为asp需要使用组件,所以了解一点组件的知识(ADODB也是组件)
admin 该用户已被删除
6#
发表于 2015-2-24 23:16:14 | 只看该作者
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
再见西城 该用户已被删除
7#
发表于 2015-3-7 14:00:40 | 只看该作者
学习ASP其实应该上升到如何学习程序设计这种境界,其实学习程序设计又是接受一种编程思想。比如ASP如何学习,你也许在以前的学习中碰到过。以下我仔细给你说几点:
飘灵儿 该用户已被删除
8#
发表于 2015-3-21 23:12:16 | 只看该作者
最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-19 05:46

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表