⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24-1.cfm.htm

📁 最全的asp.net教程,对现在正在学.net的学生有很好的辅助效果
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>使用命令对象</TITLE>
</HEAD>
<BODY LINK="#0000ff">

<B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P ALIGN="JUSTIFY">使用命令对象</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">命令对象代表一个命令(例如,一个SQL查询或一个SQL存储过程)。第22章,“Activex数据对象”,和第23章,“使用记录集”,分别介绍了如何用连接对象的Execute方法和记录集对象的Open方法执行命令字符串。考虑下面这两个例子:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">RS.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>SELECT * FROM Mytable</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>,MyConn</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">MyConn.Execute </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>UPDATE Mytable SET Mycolumn=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>’</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>Hello</FONT><FONT FACE="Playbill,Courier New" SIZE=3>’”</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">这两个例子都使用了SQL命令字符串。在第一个例子中,用命令字符串打开记录集。在第二个例子中,执行命令字符串来更新数据。</P>
<P ALIGN="JUSTIFY">代替命令字符串,你可以使用命令对象。命令对象可以用来代表一个专门的命令。你可以用命令对象的一个实例返回记录集或执行一个不返回记录集的SQL命令。这里有一个例子:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">&lt;!--#INCLUDE VIRTUAL=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADOVBS.inc</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>--&gt;</P>
<P ALIGN="JUSTIFY">&lt;%</P>
<P ALIGN="JUSTIFY">Set MyConn=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADODB.Connection</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">Set MyCommand=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADODB.Command</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">MyConn.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>FILEDSN=d:\Program Files\</P>
<P ALIGN="JUSTIFY">             Common Files\ODBC\Data Sources\MyData.dsn</P>
<P ALIGN="JUSTIFY">Set MyCommand.ActiveConnection=MyConn</P>
<P ALIGN="JUSTIFY">MyCommand.CommandText=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>UPDATE Mytable SET Mycolumn=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>’</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>Hello</FONT><FONT FACE="Playbill,Courier New" SIZE=3>’”</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">MyCommand.CommandType=adCMDText</P>
<P ALIGN="JUSTIFY">MyCommand.Execute</P>
<P ALIGN="JUSTIFY">MyConn.Close</P>
<P ALIGN="JUSTIFY">%&gt;</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">在这个例子中,创建了命令对象的一个实例。接着,ActiveConnection属性把命令和 一个打开的连接联系在一起。(用Set语句完成这个任务,因为你是在分配一个对象。)CommandText属性指定要执行什么SQL语句。CommandType属性指明该命令是一个命令的文本定义。最后,调用Execute方法执行这个命令。</P>
<P ALIGN="JUSTIFY">在这个例子中,命令对象用来返回一个记录集。但是,使用命令对象,你可以通过两种途径返回记录集。这是第一种途径:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">&lt;!--#INCLUDE VIRTUAL=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADOVBS.inc</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>--&gt;</P>
<P ALIGN="JUSTIFY">&lt;%</P>
<P ALIGN="JUSTIFY">Set MyConn=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADODB.Connection</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">Set MyCommand=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADODB.Command</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">MyConn.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>FILEDSN=d:\Program Files\</P>
<P ALIGN="JUSTIFY">             Common Files\ODBC\Data Sources\MyData.dsn</P>
<P ALIGN="JUSTIFY">Set MyCommand.ActiveConnection=MyConn</P>
<P ALIGN="JUSTIFY">MyCommand.CommandType=adCMdText</P>
<P ALIGN="JUSTIFY">MyCommand.commandText=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>SELECT * FROM Mytable</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">Set RS=MyCommand.Execute()</P>
<P ALIGN="JUSTIFY">RS.Close</P>
<P ALIGN="JUSTIFY">MyConn.Close</P>
<P ALIGN="JUSTIFY">%&gt;</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">在这段脚本中,命令对象的Execute()方法被用来返回一个记录集。注意引号的使用,因为该方法被用来返回结果。用命令对象创建了记录集对象的一个实例后,你可以用标准的方式操作它。</P>
<P ALIGN="JUSTIFY">你也可以和一个已经存在的记录集一起使用命令对象,象这样:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">&lt;!--#INCLUDE VIRTUAL=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADOVBS.inc</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>--&gt;</P>
<P ALIGN="JUSTIFY">&lt;%</P>
<P ALIGN="JUSTIFY">Set MyConn=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADODB.Connection</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">Set MyCommand=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADODB.Command</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">Set RS=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADODB.RecordSet</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">MyConn.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>FILEDSN=d:\Program Files\</P>
<P ALIGN="JUSTIFY">             Common Files\ODBC\Data Sources\MyData.dsn</P>
<P ALIGN="JUSTIFY">Set MyCommand.ActiveConnection=MyConn</P>
<P ALIGN="JUSTIFY">MyCommand.CommandType=adCMdText</P>
<P ALIGN="JUSTIFY">MyCommand.commandText=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>SELECT * FROM Mytable</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">    RS.Open MyCommand,adOpenStatic,adLockOptimstic</P>
<P ALIGN="JUSTIFY">RS.Close</P>
<P ALIGN="JUSTIFY">MyConn.Close</P>
<P ALIGN="JUSTIFY">%&gt;</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">用命令对象打开一个已经存在的记录集对象的好处是你可以指定记录集的游标和锁定类型。在这个例子中,命令对象用来打开一个使用静态游标和adLockOptimistic锁定的记录集。注意打开记录集时如果使用了命令对象,那么你不需指定连接对象,命令对象决定该使用哪个连接。</P>
<P ALIGN="JUSTIFY">上面的例子讲述了如何使用命令对象。但是没有讲述为什么要使用连接对象。为什么你要专门创建一个命令对象,而不使用命令字符串呢?</P>
<P ALIGN="JUSTIFY">使用命令对象有一个主要的优点。你可以和命令对象一起使用SQL存储过程。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">使用SQL存储过程有什么好处</P>
</B><P ALIGN="JUSTIFY">第12章,“高级SQL”,讲述了如何创建SQL存储过程。当你建设好一个站点后,把尽可能多的SQL命令转换为存储过程是个好主意。与其在ASP网页内部执行SQL查询,不如调用包含这些查询的存储过程。</P>
<P ALIGN="JUSTIFY">使用SQL存储过程的理由有很多:</P>
<P ALIGN="JUSTIFY">    ■SQL存储过程执行起来比SQL命令文本快得多。当一个SQL语句包含在存储过程中时,服务器不必每次执行它时都要分析和编译它。</P>
<P ALIGN="JUSTIFY">    ■你可以在多个网页中调用同一个存储过程。这使你的站点易于维护。如果一个SQL语句需要做某些改动,你只要做一次即可。</P>
<P ALIGN="JUSTIFY">    ■你可以在存储过程中利用Transact-SQL的强大功能。一个SQL存储过程可以包含多个SQL语句。你可以使用变量和条件。这意味着你可以用存储过程建立非常复杂的查询,以非常复杂的方式更新数据库。</P>
<P ALIGN="JUSTIFY">    ■最后,这也许是最重要的,在存储过程中可以使用参数。你可以传送和返回参数。你还可以得到一个返回值(从SQL RETURN语句)。</P>
<P ALIGN="JUSTIFY">简而言之,能用存储过程就要用存储过程。存储过程有着极大的优点</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">使用命令对象调用存储过程</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">假设你想取出表Mytable中的所有记录并在一个ASP网页中显示它们。而且,假设你想以尽可能高效的方式从表中取出记录。在这种情况下,你应该使用存储过程。</P>
<P ALIGN="JUSTIFY">要建立应该新的存储过程,从Microsoft SQL Sever程序组中启动ISQL/w。然后,在查询窗口中输入以下的文本:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">CREATE PROCEDURE sp_myporc AS</P>
<P ALIGN="JUSTIFY">SELECT * FROM  Mytable</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">单击执行查询按钮(看起来象一个绿色三角形),建立这个存储过程。该存储过程的名字是sp_myproc。</P>
<P ALIGN="JUSTIFY">要在一个ASP网页中调用sp_myproc,你可以使用命令对象的一个实例。这里有一个例子:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">&lt;!--#INCLUDE VIRTUAL=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADOVBS.inc</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>--&gt;</P>
<P ALIGN="JUSTIFY">&lt;%</P>
<P ALIGN="JUSTIFY">Set MyConn=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADODB.Connection</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">Set MyCommand=Sever.CreateObject(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADODB.Command</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>)</P>
<P ALIGN="JUSTIFY">MyConn.Open </FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>FILEDSN=d:\Program Files\</P>
<P ALIGN="JUSTIFY">             Common Files\ODBC\Data Sources\MyData.dsn</P>
<P ALIGN="JUSTIFY">Set MyCommand.ActiveConnection=MyConn</P>
<P ALIGN="JUSTIFY">MyCommand.CommandType=adCMdStoredProc</P>
<P ALIGN="JUSTIFY">MyCommand.commandText=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>sp_myproc</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</P>
</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">Set RS=MyCommand.Execute()</P>
<P ALIGN="JUSTIFY">WHILE NOT RS.EOF</P>
<P ALIGN="JUSTIFY">    Response.Write(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>&lt;BR&gt;</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>&amp;RS(</FONT><FONT FACE="Playbill,Courier New" SIZE=3>“</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>Mycolumn</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>))</P>
<P ALIGN="JUSTIFY">    RS.MoveNext</P>
<P ALIGN="JUSTIFY">WEND</P>
<P ALIGN="JUSTIFY">RS.Close</P>
<P ALIGN="JUSTIFY">MyConn.Close</P>
<P ALIGN="JUSTIFY">%&gt;</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">这段脚本通过调用存储过程sp_myproc取出记录,显示了表Mytable中的所有记录。当你用命令对象调用存储过程时,你应该把该命令对象的CommandType属性设为adCMDStoredProc。CommandText属性用来指定要调用的存储过程。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">使用返回状态值</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">你可以用命令对象从一个存储过程得到返回状态值。例如,假设你想统计一个表中的记录总数。效率最高的方法是建立一个存储过程,如下例所示:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">CREATE PROCEDURE sp_CountMytabe AS</P>
<P ALIGN="JUSTIFY">RETURN(SELECT COUNT(*) FROM Mytable)</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">这个存储过程返回表Mytable中的记录总数。SQL集合函数COUNT()计算该表中的记录数。RETURN语句返回这个数。</P>
<P ALIGN="JUSTIFY">要得到一个存储过程的返回状态值,你必须为命令对象建立一个参数。命令对象有一个名为Parameters的集合,是一个参数对象的集合。</P>
<P ALIGN="JUSTIFY">你可以用命令对象的CreateParameter()方法建立一个参数。接下来,用Append方法把这个参数添加到命令对象的Parameters集合中。这里有一个例子:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">&lt;!--#INCLUDE VIRTUAL=</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>ADOVBS.inc</FONT><FONT FACE="Playbill,Courier New" SIZE=3>”</FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3>--&gt;</P>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -