|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
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的数据中心中,集中管理,分散使用,以一对多的租赁的形式为众多用户提供有品质保证的应用技术服务,实现规模效益。 |
|