爱飞 发表于 2015-1-16 22:55:23

ASP网页编程之Command工具

优点:简单易学、开发速度快、有很多年“历史”,能找到非常多别人做好的程序来用、配合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,,,,)
参数及申明如表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安全

兰色精灵 发表于 2015-1-20 06:08:48

接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。

透明 发表于 2015-1-28 20:12:17

先学习用frontpage熟悉html编辑然后学习asp和vbscript建议买书进行系统学习

愤怒的大鸟 发表于 2015-2-5 22:48:38

如何更好的使自己的东西看上去很不错等等。其实这些都不是问题的实质,我们可以在实践中不断提升自己,不断充实自己。

灵魂腐蚀 发表于 2015-2-14 01:09:18

哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?

冷月葬花魂 发表于 2015-3-4 03:39:55

交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。

再现理想 发表于 2015-3-11 16:05:19

那么,ASP.Net有哪些改进呢?

柔情似水 发表于 2015-3-19 01:47:23

ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。

乐观 发表于 2015-3-27 03:09:29

运用ASP可将VBscript、javascript等脚本语言嵌入到HTML中,便可快速完成网站的应用程序,无需编译,可在服务器端直接执行。容易编写,使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行。
页: [1]
查看完整版本: ASP网页编程之Command工具