|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
优点:简单易学、开发速度快、有很多年“历史”,能找到非常多别人做好的程序来用、配合activeX功能强大,很多php做不到的asp+activeX能做到,例如银行安全控件command|command工具
Command工具特定地为处置各类范例的命令而计划,出格是那些必要参数的命令。与Connection工具类似,Command工具能够运转前往纪录集和不前往纪录集两品种型的命令。实践上,假如命令不含有参数,那末它其实不体贴是利用Connection工具,仍是Command工具,仍是Recordset工具。
9.2.1前往纪录集
关于一个前往纪录集的命令,可以使用Execute办法。但是,与Connection工具分歧,必需利用CommandText属性,而不克不及在Execute办法中利用命令文本。
SetcmdAuthors=Server.CreateObject("ADODB.Command")
cmdAuthors.CommandText="Authors"
SetrsAuthors=cmdAuthors.Execute
这是告知Command工具往实行一个复杂的、前往一个只读纪录集的命令的最复杂办法。
Execute办法也有一些可选参数,如表9-2所示:
表9-2Command工具的Execute办法的参数及申明
参数RecordsAffected与Options同后面注释的一样,别的也能够利用CommandType属性设置命令范例:
SetcmdAuthors=Server.CreateObject("ADODB.Command")
cmdAuthors.CommandText="Authors"
cmdAuthors.CommandType=adCmdTable
假如不设置其他参数,也能够在Execute行上设置,必需为它们利用逗号:
SetrsAuthors=cmdAuthors.Execute(,,adCmdTable)
在本章前面处置存储历程时,将会看到参数Parameters的用处。
改动光标范例
值得注重是,利用Execute办法前往的纪录集具出缺省的光标范例。这意味着这是只能前移的、只读的纪录集。固然利用Execute办法不克不及改动这类情形,但对这个成绩有一个办理的办法。
假如必要利用一个命令,而且请求分歧的光标和锁定范例,那末应当利用Recordset的Open办法,此时Command工具作为Recordset的数据源。比方:
cmdAuthors.ActiveConnection=strConn
cmdAuthors.CommandText="Authors"
cmdAuthors.CommandType=adCmdTable
rsAuthors.OpencmdAuthors,,adOpenDynamic,adLockOptimistic
注重,在Open命令行中疏忽了毗连细节,由于毗连设置在Command工具中。毗连细节在命令翻开前已设置在Command工具的ActiveConnection属性中。
9.2.2操纵命令
关于操纵命令,好比那些无纪录前往的更新命令,全部历程类似,只需移往设置纪录集的代码:
SetcmdUpdate=Server.CreateObject("ADODB.Command")
strSQL="UPDATETitlesSETPrice=Price*1.10"&"WHEREType=Business"
cmdUpdate.ActiveConnection=strConn
cmdUpdate.CommandText=sSQL
cmdUpdate.CommandType=adCmdText
cmdUpdate.Execute,,adExecuteNoRecords
注重,我们在此设置了命令范例,然后在Execute行中增添了分外的设置选项。这段代码运转UPDATE命令,而且包管不会创立新的纪录集。
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所示:
要在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办法的参数及申明
一旦创立了参数就能够将其追加到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入手下手编号)参数举行了赋值。利用索引号比利用名字索引速率快,但很明显利用名字使代码更容易读。
重点注重Parameters汇合中参数的按次必需与存储过程当中参数的按次相分歧。
运转带参数的命令
一旦到场参数,便可当即运转命令,同时这些参数的值传进存储历程。如今可用一个友爱的网页往更新用户选择的范例的书价。比方,假定有一个名为UpdatePrices.asp的网页,其运转时的界面如-2所示:
-2UpdatePrices.asp网页运转时的界面
经由过程数据库中猎取书范例的列表,能够很轻松地震态创立该页面。起首要做的是包括文件Connection.asp,该文件包括了毗连字符串(保留在变量strConn中)和对ADO常数的援用,这在后面的章节已会商过。
<!--#INCLUDEFILE="../Include/Connection.asp"-->
接上去,能够创立一个窗体(在这儿不显现大批文本,仅仅用一个样本文件)。该窗体挪用一个名为StoreProcedure.asp的文件。
<FORMNAME="UpdatePrices"Method="post"ACTION="StoredProcedure.asp">
<TABLE>
<TR>
<TD>BookType:</TD>
<TD><SELECTNAME="lstTypes"></TD>
如今入手下手编写ASP剧本从title表中读取书的范例。利用一个SQL字符串只前往独一的书范例,然后将前往值放到HTML的OPTION标志中:
<%
DimrecTypes
DimsDQ
sDQ=Chr(34)doublequotecharacter
SetrecTypes=Server.CreateObject("ADODB.Recordset")
recTypes.Open"usp_BookTypes",strConn
WhileNotrecTypes.EOF
Response.Write"<OPTIONVALUE="&sDQ&recTypes("type")&sDQ&_
">"&recTypes("type")
recTypes.MoveNext
Wend
recTypes.Close
SetrecTypes=Nothing
%>
显现书的范例后,接着能够构建窗体的其他部分,包含一个同意用户输出书价变更百分数的文本框。
</SELECT>
</TD>
</TR>
<TR>
<TD>PercentValue</TD>
<TD><INPUTNAME="txtPercent"TYPE="TEXT"></TD>
</TR>
</TABLE>
<P>
<INPUTTYPE="submit"VALUE="RunQuery">
</FORM>
如今看一下RunQuery按钮挪用的ASP文件StoredProcedure.asp。起首,声明变量并从挪用窗体掏出书的范例和百分数。
DimcmdUpdate
DimlRecs
DimsType
DimcPercent
Gettheformvalues
sType=Request.Form("lstTypes")
cPercent=Request.Form("txtPercent")
如今能够向用户显现一些确认信息,告知他们将产生甚么。
Telltheuserwhatsbeingdone
Response.Write"Updatingallbooks"
IfsType"all"Then
Response.Write"oftype<B>"&sType&"</B>"
EndIf
Response.Write"by"&cPercent&"%<P>"
如今从头回到代码外部,在此创立Command工具和参数。
SetcmdUpdate=Server.CreateObject("ADODB.Command")
WithcmdUpdate
.ActiveConnection=strConn
.CommandText="usp_UpdatePrices"
.CommandType=adCmdStoredProc
使用夙昔面网页的窗体中提取的数据值,利用快速办法创立和增添参数。
Addtheparameters
.Parameters.Append.CreateParameter("@Type",adVarWChar,adParamInput,_
12,sType)
.Parameters.Append.CreateParameter("@Percent",adCurrency,_
adParamInput,,cPercent)
如今,运转存储历程。
Executethecommand
.ExecutelRecs,,adExecuteNoRecords
EndWith
为了确认,能够告知用户已更新几笔记录。
Andfinallytelltheuserwhatshappened
Response.Write"Procedurecomplete."&lRecs&"wereupdated."
SetcmdUpdate=Nothing
%>
如许就有了两个复杂界面。前者创立了一个供选择的项目列表,后者利用个中某个项目值更新数据。这是很多必要显现和更新数据的ASP页面的基本。
3.传送数组参数
Parameters参数汇合一样平常来讲对照好用,但偶然稍有贫苦(特别关于老手)。幸亏有一种快速办法,利用Execute办法的Parameters参数。比方,挪用存储历程usp_UpdatePrices,但不利用Parameters汇合。
创立一个Command工具,并同后面一样设置其属性。
SetcmdUpdate=Server.CreateObject("ADODB.Command")
Setthepropertiesofthecommand
WithcmdUpdate
.ActiveConnection=strConn
.commandText="usp_UpdatePrices"
.commandType=adCmdStroreProc
但这里恰是差别地点。我们仅是经由过程Execute办法传送参数给存储历程,而不是创立参数并增加到汇合中。
Executethecommand
.ExecutelngRecs,Array(strType,curPercent),adExecuteNoRecords
EndWith
这里利用了Array函数,将单个变量转换为数组,以适于办法挪用。这类办法固然也出缺点:
·只能利用输出参数。由于不克不及指定参数的范例和传送偏向,而缺省为输出参数。
·假如要屡次挪用存储历程,这类办法速率就对照慢,由于ADO将向数据存储扣问参数的内容及数据范例。
汇合办法和数组办法之间在速率上的差别十分之小,几近能够疏忽。以是,假如只要输出参数,可任意利用哪种。实践上,人们更喜好利用Parameters汇合的办法,只管它稍为烦琐,可是使参数的属性加倍明白。
4.输入参数
我们已晓得怎样取得奉命令影响的纪录数,假如必要更多信息,却又不想前往一个纪录集,怎样办?大概想从存储过程当中前往两个或三个值,但又不想操心创立一个纪录集。在这时候,能够界说一个输入参数,其值由存储历程供应。
比方,关于更旧书价的程序,假如想在更新以后找出最低价格,可将存储历程改成:
CREATEPROCEDUREusp_UpdatePricesMax
@TypeChar(12),
@PercentMoney,
@MaxMoneyOUTPUT
AS
BEGIN
UPDATETitles
SETPrice=Price*(1+@Percent/100)
WHEREType=@Type
SELECT@Max=MAX(Price)
FROMTitles
END
这只是在实行更新后运转了一个复杂的SELECT语句,并将值赋给输入参数。
如今能够改写StroreProcedure.asp的代码从而猎取变量@MAX的值。
<%
DimcmdUpdate
DimlngRecs
DimstrType
DimcurPercent
DimcurMax
Gettheformvalues
strType=Request.Form("lstTypes")
curPercent=Request.Form("txtPercent")
Telltheuserwhatsbeingdone
Response.Write"Updatingallbooks"&"oftype<B>"&strType&"</B>"&_
"by"&curPercent&"%<P>"
SetcmdUpdate=Server.CreateObject("ADODB.Command")
Setthepropertiesofthecommand
WithcmdUpdate
.ActiveConnection=strConn
.CommandText="usp_UpdatePricesMax"
.CommandType=adCmdStoredProc
我们只是在汇合中到场了另外一个参数,但此次指定为输入参数。注重它并没有赋值,由于其值将由存储历程供应,记着这是一个输入参数。
Addtheparameters
.Parameters.Append.CreateParameter("@Type",adVarWChar,adParamInput,_
12,strType)
.Parameters.Append.CreateParameter("@Percent",adCurrency,_
adParamInput,,curPercent)
.Parameters.Append.CreateParameter("@Max",adCurrency,adParamOutput)
Executethecommand
.ExecutelngRecs,,adExecuteNoRecords
一旦实行这个历程,便可从汇合中获得该值。
Extracttheoutputparameter,whichthestored
procedurehassuppliedtotheparameterscollection
curMax=.Parameters("@Max")
EndWith
Andfinallytelltheuserwhatshappened
Response.Write"Procedurecomplete."&lngRecs&_
"recordswereupdated.<P>"
Response.Write"Thehighestpricebookisnow"&_
FormatCurrency(curMax)
SetcmdUpdate=Nothing
%>
假如有不止一个输入参数,可用不异的办法会见。可使用参数名或索引号掏出汇合中的值。
5.前往值
对函数前往值的处置分歧于存储历程前往值的处置,这经常招致搅浑。在函数中,常常是前往一个布尔值来标明函数运转的乐成与否。
IfSomeFunctionName()=TrueThen
Functionsucceeded
但在挪用一个存储历程时,却不克不及利用一样的办法,由于存储是用Execute办法运转的,同时前往一个纪录集。
SetrsAuthors=cmdAuthors.Execute
假如得不到一个前往值,怎样断定是不是已准确实行存储历程?当产生毛病时,会呈报毛病,如许便可利用前一章供应的毛病处置代码来处置毛病。但关于一些非致命的逻辑毛病怎样办?
比方,思索向employee表增加一个新人员的情况。你大概不想避免两个人员同名的情形,但想说明这个情形。那末,可使用一个前往值以标明是不是已有同名的人员存在。存储历程以下:
CREATEPROCEDUREusp_AddEmployee
@Emp_IDChar(9),
@FNameVarchar(20),
@MinitChar(1),
@LNameVarchar(30),
@Job_IDSmallInt,
@Job_LvlTinyInt,
@Pub_IDChar(4),
@Hire_DateDatetime
AS
BEGIN
DECLARE@ExistsInt--Returnvalue
--Seeifanemployeewiththesamenameexists
IFEXISTS(SELECT*
FROMEmployee
WHEREFName=@FName
ANDMInit=@MInit
ANDLName=@LName)
SELECT@Exists=1
ELSE
SELECT@Exists=0
INSERTINTOEmployee(emp_id,fname,minit,lname,
job_id,job_lvl,pub_id,hire_date)
VALUES(@Emp_Id,@FName,@MInit,@LName,@Job_ID,
@Job_Lvl,@Pub_ID,@Hire_Date)
RETURN@Exists
END
该历程起首反省是不是有同名的人员存在,并据此设定响应的变量Exists,若存在同名,就设为1,不然为0。然后将该人员加到表中,同时把Exists的值作为前往值前往。
注重只管前往了一个值,但并未将其声明为存储历程的参数。
挪用该历程的ASP代码以下:
<!--#INCLUDEFILE="../include/Connection.asp"-->
<%
DimcmdEmployee
DimlngRecs
DimlngAdded
SetcmdEmployee=Server.CreateObject("ADODB.Command")
Setthepropertiesofthecommand
WithcmdEmployee
.ActiveConnection=strConn
.CommandText="usp_AddEmployee"
.CommandType=adCmdStoredProc
Createtheparameters
Noticethatthereturnvalueisthefirstparameter
.Parameters.Append.CreateParameter("RETURN_VALUE",adInteger,_
adParamReturnValue)
.Parameters.Append.CreateParameter("@Emp_id",adChar,adParamInput,9)
.Parameters.Append.CreateParameter("@fname",adVarWChar,adParamInput,20)
.Parameters.Append.CreateParameter("@minit",adChar,adParamInput,1)
.Parameters.Append.CreateParameter("@lname",adVarWChar,adParamInput,30)
.Parameters.Append.CreateParameter("@job_id",adSmallInt,adParamInput)
.Parameters.Append.CreateParameter("@job_lvl",adUnsignedTinyInt,adParamInput)
.Parameters.Append.CreateParameter("@pub_id",adChar,adParamInput,4)
.Parameters.Append.CreateParameter("@hire_date",adDBTimeStamp,_
adParamInput,8)
Settheparametervalues
.Parameters("@Emp_id")=Request.Form("txtEmpID")
.Parameters("@fname")=Request.Form("txtFirstName")
.Parameters("@minit")=Request.Form("txtInitial")
.Parameters("@lname")=Request.Form("txtLastName")
.Parameters("@job_id")=Request.Form("lstJobs")
.Parameters("@job_lvl")=Request.Form("txtJobLevel")
.Parameters("@pub_id")=Request.Form("lstPublisher")
.Parameters("@hire_date")=Request.Form("txtHireDate")
Runthestoredprocedure
.ExecutelngRecs,,adExecuteNoRecords
Extractthereturnvalue
lngAdded=.Parameters("RETURN_VALUE")
EndWith
Response.Write"Newemployeeadded.<P>"
IflngAdded=1Then
Response.Write"Anemployeewiththesamenamealreadyexists."
EndIf
SetcmdEmployee=Nothing
%>
必要重点注重,前往值应该作为汇合中第一个参数被创立。即便前往值其实不作为一个参数呈现在存储过程当中,老是Parameters汇合中的第一个Parameters。
因而,出格夸大一点:
存储历程的前往值必需声明为Parameters汇合中第一个参数,同时参数的Direction值必需为adParamReturnValue。
利用前往值
如今界说一个初始窗体,如-3所示:
按下AddEmployee按钮会发生如-4所示的显现:
再增加一样的细节(ID号分歧)会失掉如-5所示的界面:
6.更新参数
无需输出一切的参数细节,只需挪用Refresh办法,就可以让ADO完成更新。比方,假定已创立了一个带有与后面例子不异的参数的历程usp_AddEmployee,而且没有改动运转的页面。
WithcmdEmployee
.ActiveConnection=strConn
.CommandText="usp_Addemployee"
.CommandType=adCmdStoredProc
然后挪用Refresh办法。
.Parameters.Refresh
这告知ADO向数据存储哀求每一个参数的细节,并创立Parameters汇合。然后能够为其赋值。
.Parameters("@Emp_Id")=Request.Form("txtEmpID")
.Parameters("@FName")=Request.Form("txtFirstName")
.Parameters("@MInit")=Request.Form("txtInitial")
.Parameters("@LName")=Request.Form("txtLastName")
.Parameters("@Job_ID")=Request.Form("lstJobs")
.Parameters("@Job_Lvl")=Request.Form("txtJobLevel")
.Parameters("@Pub_ID")=Request.Form("lstPublisher")
.Parameters("@Hire_Date")=Request.Form("txtHireDate")
注重其实不必要创立任何参数,包含前往值。
这仿佛真是一条捷径,但应意想到这类办法也形成了功能上的丧失,由于ADO必需向供应者查询以取得存储历程的参数细节。只管云云,这类办法仍是很有效的,特别是在从参数中掏出准确的值有坚苦的时分。
实践上,能够编写一个小有用程序作为开辟工具利用,用来完成更新并创建Append语句,能够将其粘贴到本人的代码中。它看上往应当与-6所示的GenerateParameters.aspASP页面相似。
其代码相称复杂。起首是包括毗连符串和另外一个ADOX常数文件。
<!--#INCLUDEFILE="../Include/Connection.asp"-->
<!--#INCLUDEFILE="../Include/ADOX.asp"-->
接上去创立一个窗体,指定方针为PrintParameters.aspASP页面。
<FORMNAME="Procedures"METHOD="post"ACTION="PrintParameters.asp">
ConnectionString:<BR>
<TEXTAREANAME="txtConnection"COLS="80"ROWS="5">
<%=strConn%>
</TEXTAREA>
<P>
StoredProcedure:<BR>
<SELECTNAME="lstProcedures">
然后,利用ADOX从SQLServer中失掉存储历程的列表,同时创立一个含有这些存储历程名字的列表框。
<%
DimcatPubs
DimprocProcedure
Predefinethequotecharacter
strQuote=Chr(34)
SetcatPubs=Server.CreateObject("ADOX.Catalog")
catPubs.ActiveConnection=strConn
ForEachprocProcedureIncatPubs.Procedures
Response.Write"<OPTIONVALUE="&_
strQuote&procProcedure.Name&_
strQuote&">"&procProcedure.Name
Next
SetprocProcedure=Nothing
SetcatPubs=Nothing
%>
</SELECT>
<P>
<INPUTTYPE="submit"VALUE="PrintParamaters">
</FORM>
这是一个复杂的窗体,包含一个用于显现毗连字符串的TEXTAREA控件和用于显现存储历程称号的SELECT控件。之前没有见过的是ADOX,ADOX是数据界说与平安的ADO扩大,能够用来会见数据存储的目次(或是元数据)。
本书不盘算先容ADOX的内容,但其非常复杂。进一步的细节可拜见《ADOProgrammersReference》,Wrox出书社出书,2.1版或2.5版都行。
下面的例子利用了Procedures汇合,这个汇合包括数据存储中的一切存储历程的列表。按下PrintParameters按钮时,将失掉-7所示的显现:
能够复杂地从这里拷贝参数行到代码中。在后面利用了一个之前从未见过的包括文件。该文件包括了几个将ADO常数(比方数据范例、参数偏向等)转换为字符串值的函数:
<!--#INCLUDEFILE="../Include/Descriptions.asp"-->
接上去,界说一些变量,提取用户哀求并创立Command工具。
<%
DimcmdProc
DimparP
DimstrConnection
DimstrProcedure
DimstrQuote
Gettheconnectionandprocedurenamefromtheuser
strQuote=Chr(34)
strConnection=Request.Form("txtConnection")
strProcedure=Request.Form("lstProcedures")
Updatetheuser
Response.Write"Connectingto<B>"&strConnection&"</B><BR>"
Response.Write"Documentingparametersfor<B>"&_
strProcedure&"</B><P><P>"
SetcmdProc=Server.CreateObject("ADODB.Command")
Setthepropertiesofthecommand,usingthename
oftheprocedurethattheuserselected
WithcmdProc
.ActiveConnection=strConnection
.CommandType=adCmdStoredProc
.CommandText=strProcedure
然后利用Refresh办法主动填写Parameters汇合。
.Parameters.Refresh
如今能够遍历全部汇合,写出包括创立参数所需的细节内容的字符串。
ForEachparPIn.Parameters
Response.Write".Parameters.Append&_
"("strQuote&parP.Name&_
strQuote&","&_
DataTypeDesc(parP.Type)&","&_
ParamDirectionDesc(parP.Direction)&_
","&_
parP.Size&")<BR>"
Next
EndWith
SetcmdProc=Nothing
%>
在Descriptions.asp包括文件中能够找到函数DataTypeDesc和ParamDirectionDesc。
Descriptions.asp包括文件和其他的例子文件能够在Web站点http://www.wrox.com中找到。
这是一个十分复杂的手艺,它较好地利用了Refresh办法。
缺点:正版成本价格贵(盗版就不说了)、不够安全,大多数服务器用windows系统,没有linux安全 |
|