??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲人成a在线v网站,电影午夜精品一区二区三区,国产成人小视频http://www.aygfsteel.com/guming123416/category/6970.htmljava学习天堂,个h关于JAVA的论坛bbs.javaworker.cn,Ƣ迎大家讉Kzh-cnTue, 28 Aug 2007 19:47:09 GMTTue, 28 Aug 2007 19:47:09 GMT60手把手教你制作Google Sitemap(详细制作教程和协议讲?http://www.aygfsteel.com/guming123416/archive/2007/08/28/140579.htmllovajava_yelovajava_yeTue, 28 Aug 2007 08:36:00 GMThttp://www.aygfsteel.com/guming123416/archive/2007/08/28/140579.htmlhttp://www.aygfsteel.com/guming123416/comments/140579.htmlhttp://www.aygfsteel.com/guming123416/archive/2007/08/28/140579.html#Feedback0http://www.aygfsteel.com/guming123416/comments/commentRss/140579.htmlhttp://www.aygfsteel.com/guming123416/services/trackbacks/140579.htmlGoogle SiteMap Protocol是Google自己推出的一U站点地囑֍议,此协议文件基于早期的robots.txt文g协议Qƈ有所升。在Google官方指南中指出加入了Google SiteMap文g的网站将更有利于Google|页爬行机器人的爬行索引Q这样将提高索引|站内容的效率和准确度。文件协议应用了单的XML格式Q一q?个标{,其中关键标签包括链接地址、更新时间、更新频率和索引优先权?/p> Google SiteMap文g生成后格式如下: <urlset xmlns="http://www.google.com/schemas/sitemap /0.84"> <url> <loc>http://duduwolf.winzheng.com</loc> <lastmod>2005-06-03T04:20-08:00</lastmod> <changefreq>always</changefreq> <priority>1.0</priority> </url> <url> <loc>http://duduwolf.winzheng.com/post/140.html</loc> <lastmod>2005-06-02T20:20:36Z</lastmod> <changefreq>daily</changefreq> <priority>0.8</priority> </url> </urlset> XML标签
  • changefreq:面内容更新频率?
  • lastmod:面最后修Ҏ?
  • loc:面怹链接地址
  • priority:相对于其他页面的优先?
  • url:相对于前4个标{父标{?
  • urlset:相对于前5个标{父标{?
我将一句一句分解讲解这个xml文g的每一个标{:
  1. <urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
    q一行定义了此xml文g的命名空_相当于网|件中?lt;html>标签一L作用?
  2. <url>q是具体某一个链接的定义入口Q你所希望展示在SiteMap文g中的每一个链接都要用<url>?lt;/url>包含在里面,q是必须的?
  3. <loc>http://duduwolf.winzheng.com</loc>?lt;loc>描述出具体的链接地址Q这里需要注意的是链接地址中的一些特D字W必{换ؓXML(HTML)定义的{义字W,如下表:
    字符 转义后的字符
    HTML字符 字符~码
    and(? & &amp; &
    单引?/td> &apos; &apos; '
    双引?/td> " &quot; "
    大于?/td> > &gt; >
    于?/td> < &lt; <
  4. <lastmod>2005-06-03T04:20:32-08:00</lastmod><lastmod>是用来指定该链接的最后更新时_q个很重要。Google的机器h会在索引此链接前先和上次索引记录的最后更新时间进行比较,如果旉一样就会蟩q不再烦引。所以如果你的链接内容基于上ơGoogle索引时的内容有所改变Q应该更新该旉Q让Google下次索引时会重新对该链接内容q行分析和提取关键字。这里必ȝISO 8601中指定的旉格式q行描述Q格式化的时间格式如下:
    • q_YYYY(2005)
    • q和月:YYYY-MM(2005-06)
    • q月日:YYYY-MM-DD(2005-06-04)
    • q月日小时分钟:YYYY-MM-DDThh:mmTZD(2005-06-04T10:37+08:00)
    • q月日小时分钟秒QYYYY-MM-DDThh:mmTZD(2005-06-04T10:37:30+08:00)
    q里需注意的是TZDQTZD指定是本地旉区域标记Q像中国是+08:00?
  5. <changefreq>always</changefreq>用这个标{֑诉Google此链接可能会出现的更新频率,比如首页肯定p用always(l常)Q而对于很久前的链接或者不再更新内容的链接可以用yearly(每年)。这里可以用来描q的单词p几个Q?always", "hourly", "daily", "weekly", "monthly", "yearly"Q具体含义我׃用解释了吧,光看单词的意思就明白了?
  6. <priority>1.0</priority> <priority>是用来指定此链接相对于其他链接的优先权比|此值定?.0 - 1.0之间
  7. q有</url>?lt;/urlset>Q这两个是来关闭xml标签的,q和HTML中的</body>?lt;/html>是一个道?
  8. 另外需要注意的?/strong>Q这个xml文g必须是utf-8的编码格式,不管你是手动生成q是通过代码生成Q徏议最好检查一下xml文g是否是utf-8~码Q最单的Ҏ是用记事本打开xml然后另存为时选择~码(或{换器)为UTF-8?


lovajava_ye 2007-08-28 16:36 发表评论
]]>
ASP与存储过E?/title><link>http://www.aygfsteel.com/guming123416/archive/2006/02/22/31916.html</link><dc:creator>lovajava_ye</dc:creator><author>lovajava_ye</author><pubDate>Wed, 22 Feb 2006 02:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/guming123416/archive/2006/02/22/31916.html</guid><wfw:comment>http://www.aygfsteel.com/guming123416/comments/31916.html</wfw:comment><comments>http://www.aygfsteel.com/guming123416/archive/2006/02/22/31916.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/guming123416/comments/commentRss/31916.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/guming123416/services/trackbacks/31916.html</trackback:ping><description><![CDATA[ASP与存储过E?Stored Procedures)的文章不,但是我怀疑作者们是否真正实践q。我在初学时查阅q大量相兌料,发现其中提供的很多方法实际操作v来ƈ不是那么回事。对于简单的应用Q这些资料也许是有帮助的Q但仅限于此Q因为它们根本就是千一律,互相抄袭Q稍微复杂点的应用,全都语焉不详了?BR>    现在Q我基本上通过调用存储q程讉KSQL ServerQ以下的文字虽不敢保证绝Ҏ,但都是实늚ȝQ希望对大家能有帮助? <P>    存储q程是作ؓ可执行对象存攑֜数据库中的一个或多个SQL命o?BR>    定义L很抽象。存储过E其实就是能完成一定操作的一lSQL语句Q只不过q组语句是放在数据库中的(q里我们只谈SQL Server)。如果我们通过创徏存储q程以及在ASP中调用存储过E,可以避免将SQL语句同ASP代码h在一赗这样做的好处至有三个Q?BR>    W一、大大提高效率。存储过E本w的执行速度非常快,而且Q调用存储过E可以大大减同数据库的交互ơ数?BR>    W二、提高安全性。假如将SQL语句混合在ASP代码中,一旦代码失密,同时也就意味着库结构失密?BR>    W三、有利于SQL语句的重用?BR>    <BR>    在ASP中,一般通过command对象调用存储q程Q根据不同情况,本文也介l其它调用方法。ؓ了方便说明,Ҏ存储q程的输入输出,作以下简单分c:<BR>    <STRONG>1. 只返回单一记录集的存储q程</STRONG><BR>    假设有以下存储过E?本文的目的不在于讲述T-SQL语法Q所以存储过E只l出代码Q不作说?Q?/P> <P>   <FONT color=#008000> /*SP1*/<BR></FONT>    CREATE PROCEDURE dbo.getUserList<BR>    as<BR>    set nocount on<BR>    begin<BR>       select * from dbo.[userinfo]<BR>    end<BR>    go</P> <P>    以上存储q程取得userinfo表中的所有记录,q回一个记录集。通过command对象调用该存储过E的ASP代码如下:<BR>    <BR>    <FONT color=#008000>'**通过Command对象调用存储q程**</FONT><BR>    DIM MyComm,MyRst<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    MyComm.ActiveConnection = MyConStr          <FONT color=#008000>'MyConStr是数据库q接字串</FONT><BR>    MyComm.CommandText      = "getUserList"     <FONT color=#008000>'指定存储q程?/FONT><BR>    MyComm.CommandType      = 4                 <FONT color=#008000>'表明q是一个存储过E?/FONT><BR>    MyComm.Prepared         = true              <FONT color=#008000>'要求SQL命o先行~译</FONT><BR>    Set MyRst = MyComm.Execute<BR>    Set MyComm = Nothing</P> <P>    存储q程取得的记录集赋给MyRstQ接下来Q可以对MyRstq行操作?BR>    在以上代码中QCommandType属性表明请求的cdQ取值及说明如下Q?BR>      -1   表明CommandText参数的类型无法确?BR>      1    表明CommandText是一般的命ocd<BR>      2    表明CommandText参数是一个存在的表名U?BR>      4    表明CommandText参数是一个存储过E的名称<BR>    <BR>    q可以通过Connection对象或Recordset对象调用存储q程Q方法分别如下:</P> <P>    <FONT color=#008000>'**通过Connection对象调用存储q程**<BR></FONT>    DIM MyConn,MyRst<BR>    Set MyConn = Server.CreateObject("ADODB.Connection")<BR>    MyConn.open MyConStr                            <FONT color=#008000>'MyConStr是数据库q接字串<BR></FONT>    Set MyRst  = MyConn.Execute("getUserList",0,4) <FONT color=#008000> '最后一个参断含义同CommandType</FONT><BR>    Set MyConn = Nothing</P> <P>    <FONT color=#008000>'**通过Recordset对象调用存储q程**</FONT><BR>    DIM MyRst<BR>    Set MyRst = Server.CreateObject("ADODB.Recordset")<BR>    MyRst.open "getUserList",MyConStr,0,1,4<BR>    <FONT color=#008000>'MyConStr是数据库q接字串,最后一个参断含义与CommandType相同</FONT></P> <P>    <BR>    <STRONG>2. 没有输入输出的存储过E?BR></STRONG>    L以下存储q程Q?/P> <P>    <FONT color=#008000>/*SP2*/<BR></FONT>    CREATE PROCEDURE dbo.delUserAll<BR>    as<BR>    set nocount on<BR>    begin<BR>       delete from dbo.[userinfo]<BR>    end<BR>    go</P> <P>    该存储过E删去userinfo表中的所有记录,没有M输入及输出,调用Ҏ与上面讲q的基本相同Q只是不用取得记录集Q?/P> <P>   <FONT color=#008000> '**通过Command对象调用存储q程**</FONT><BR>    DIM MyComm<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    MyComm.ActiveConnection = MyConStr          <FONT color=#008000>'MyConStr是数据库q接字串</FONT><BR>    MyComm.CommandText      = "delUserAll"      <FONT color=#008000>'指定存储q程?BR></FONT>    MyComm.CommandType      = 4                <FONT color=#008000> '表明q是一个存储过E?BR></FONT>    MyComm.Prepared         = true              <FONT color=#008000>'要求SQL命o先行~译</FONT><BR>    MyComm.Execute                              <FONT color=#008000>'此处不必再取得记录集<BR></FONT>    Set MyComm = Nothing  </P> <P>    当然也可通过Connection对象或Recordset对象调用此类存储q程Q不q徏立Recordset对象是ؓ了取得记录集Q在没有q回记录集的情况下,q是利用Command对象吧?/P> <P><BR>    <STRONG>3. 有返回值的存储q程</STRONG><BR>    在进行类似SP2的操作时Q应充分利用SQL Server强大的事务处理功能,以维护数据的一致性。ƈ且,我们可能需要存储过E返回执行情况,为此Q将SP2修改如下Q?/P> <P>    <FONT color=#008000>/*SP3*/<BR></FONT>    CREATE PROCEDURE dbo.delUserAll<BR>    as<BR>    set nocount on<BR>    begin<BR>       BEGIN TRANSACTION<BR>       delete from dbo.[userinfo]<BR>       IF @@error=0 <BR>          begin<BR>             COMMIT TRANSACTION<BR>             return 1<BR>          end<BR>       ELSE<BR>          begin<BR>             ROLLBACK TRANSACTION<BR>             return 0<BR>          end         <BR>       return<BR>    end<BR>    go</P> <P>    以上存储q程Q在delete利执行Ӟq回1Q否则返?Qƈq行回滚操作。ؓ了在ASP中取得返回|需要利用Parameters集合来声明参敎ͼ</P> <P>    <FONT color=#008000>'**调用带有q回值的存储q程q取得返回?*</FONT><BR>    DIM MyComm,MyPara<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    MyComm.ActiveConnection = MyConStr         <FONT color=#008000> 'MyConStr是数据库q接字串<BR></FONT>    MyComm.CommandText      = "delUserAll"      <FONT color=#008000>'指定存储q程?BR></FONT>    MyComm.CommandType      = 4                 <FONT color=#008000>'表明q是一个存储过E?/FONT><BR>    MyComm.Prepared         = true              <FONT color=#008000>'要求SQL命o先行~译<BR></FONT>   <FONT color=#008000> '声明q回?BR></FONT>    Set Mypara = MyComm.CreateParameter("RETURN",2,4)<BR>    MyComm.Parameters.Append MyPara<BR>    MyComm.Execute<BR>    <FONT color=#008000>'取得q回?BR></FONT>    DIM retValue<BR>    retValue = MyComm(0)    <FONT color=#008000>'或retValue = MyComm.Parameters(0)</FONT><BR>    Set MyComm = Nothing<BR>    <BR>    在MyComm.CreateParameter("RETURN",2,4)中,各参数的含义如下Q?BR>    W一个参?"RETURE")为参数名。参数名可以L讑֮Q但一般应与存储过E中声明的参数名相同。此处是q回|我习惯上设ؓ"RETURE"Q?BR>    W二个参?2)Q表明该参数的数据类型,具体的类型代码请参阅ADO参考,以下l出常用的类型代码:<BR>    adBigInt: 20 ;<BR>    adBinary : 128 ; <BR>    adBoolean: 11 ;<BR>    adChar: 129 ;<BR>    adDBTimeStamp: 135 ;<BR>    adEmpty: 0 ;<BR>    adInteger: 3 ;<BR>    adSmallInt: 2 ; <BR>    adTinyInt: 16 ;<BR>    adVarChar: 200 ;<BR>    <FONT color=#0000ff>对于q回|只能取整形,?1?99Z留|</FONT><BR>    W三个参?4)Q表明参数的性质Q此?表明q是一个返回倹{此参数取值的说明如下Q?BR>    0 : cd无法定Q?1: 输入参数Q?: 输入参数Q?Q输入或输出参数Q?: q回?BR>    <BR>    以上l出的ASP代码Q应该说是完整的代码Q也x复杂的代码,其实</P> <P>    Set Mypara = MyComm.CreateParameter("RETURN",2,4)<BR>    MyComm.Parameters.Append MyPara<BR>        <BR>    可以化ؓ</P> <P>    MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)</P> <P>    甚至q可以l简化,E后会做说明?BR>    对于带参数的存储q程Q只能用Command对象调用(也有资料说可通过Connection对象或Recordset对象调用Q但我没有试成过)?/P> <P><BR>    <STRONG>4. 有输入参数和输出参数的存储过E?/STRONG><BR>    q回值其实是一U特D的输出参数。在大多数情况下Q我们用到的是同时有输入及输出参数的存储q程Q比如我们想取得用户信息表中Q某ID用户的用户名Q这时候,有一个输入参?---用户IDQ和一个输出参?---用户名。实现这一功能的存储过E如下:</P> <P>    <FONT color=#008000>/*SP4*/<BR></FONT>    CREATE PROCEDURE dbo.getUserName<BR>       @UserID int,<BR>       @UserName varchar(40) output<BR>    as<BR>    set nocount on<BR>    begin<BR>       if @UserID is null return<BR>       select @UserName=username <BR>           from dbo.[userinfo] <BR>           where userid=@UserID<BR>       return<BR>    end<BR>    go</P> <P>    调用该存储过E的ASP代码如下Q?/P> <P>   <FONT color=#008000> '**调用带有输入输出参数的存储过E?*<BR></FONT>    DIM MyComm,UserID,UserName<BR>    UserID = 1<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    MyComm.ActiveConnection = MyConStr          <FONT color=#008000>'MyConStr是数据库q接字串<BR></FONT>    MyComm.CommandText      = "getUserName"     <FONT color=#008000>'指定存储q程?BR></FONT>    MyComm.CommandType      = 4                 <FONT color=#008000>'表明q是一个存储过E?/FONT><BR>    MyComm.Prepared         = true             <FONT color=#008000> '要求SQL命o先行~译<BR></FONT>    <FONT color=#008000>'声明参数<BR></FONT>    MyComm.Parameters.append MyComm.CreateParameter("@UserID",3,1,4,UserID)<BR>    MyComm.Parameters.append MyComm.CreateParameter("@UserName",200,2,40)<BR>    MyComm.Execute<BR>    <FONT color=#008000>'取得出参</FONT><BR>    UserName = MyComm(1)<BR>    Set MyComm = Nothing</P> <P>    在以上代码中Q可以看刎ͼ与声明返回g同,声明输入参数旉?个参敎ͼ声明输出参数旉?个参数。声明输入参数时5个参数分别ؓQ?FONT color=#0000ff>参数名、参数数据类型、参数类型、数据长度、参数?/FONT>。声明输出参数时Q没有最后一个参敎ͼ参数倹{?BR>    需要特别注意的是:<FONT color=#0000ff>在声明参数时Q顺序一定要与存储过E中定义的顺序相同,而且各参数的数据cd、长度也要与存储q程中定义的相同</FONT>?BR>    如果存储q程有多个参敎ͼASP代码会显得繁琐,可以使用with命o化代码:</P> <P>    <FONT color=#008000>'**调用带有输入输出参数的存储过E?化代?**</FONT><BR>    DIM MyComm,UserID,UserName<BR>    UserID = 1<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    with MyComm<BR>       .ActiveConnection = MyConStr         <FONT color=#008000> 'MyConStr是数据库q接字串</FONT><BR>       .CommandText      = "getUserName"     <FONT color=#008000>'指定存储q程?BR></FONT>       .CommandType      = 4                 <FONT color=#008000>'表明q是一个存储过E?/FONT><BR>       .Prepared         = true              <FONT color=#008000>'要求SQL命o先行~译</FONT><BR>       .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)<BR>       .Parameters.append .CreateParameter("@UserName",200,2,40)<BR>       .Execute<BR>    end with<BR>    UserName = MyComm(1)<BR>    Set MyComm = Nothing<BR>    <BR>    假如我们要取得ID??0Q?0位用L用户名,是不是要创徏10ơCommand对象呢?不是的。如果需要多ơ调用同一存储q程Q只需改变输入参数Q就会得C同的输出Q?/P> <P>    <FONT color=#008000>'**多次调用同一存储q程**</FONT><BR>    DIM MyComm,UserID,UserName<BR>    UserName = ""<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    for UserID = 1 to 10<BR>       with MyComm<BR>          .ActiveConnection = MyConStr          <FONT color=#008000>'MyConStr是数据库q接字串<BR></FONT>          .CommandText      = "getUserName"    <FONT color=#008000> '指定存储q程?BR></FONT>          .CommandType      = 4                 <FONT color=#008000>'表明q是一个存储过E?/FONT><BR>          .Prepared         = true              <FONT color=#008000>'要求SQL命o先行~译</FONT><BR>          if UserID = 1 then<BR>             .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)<BR>             .Parameters.append .CreateParameter("@UserName",200,2,40)<BR>             .Execute<BR>          else<BR>             <FONT color=#008000>'重新l入参赋?此时参数g发生变化的入参以及出参不必重新声?<BR></FONT>             .Parameters("@UserID") = UserID<BR>             .Execute<BR>          end if<BR>       end with<BR>       UserName = UserName + MyComm(1) + ","   <FONT color=#008000> '也许你喜Ƣ用数组存储<BR></FONT>    next<BR>    Set MyComm = Nothing</P> <P>    通过以上代码可以看出Q?FONT color=#0000ff>重复调用同一存储q程Ӟ只需为值发生改变的输入参数重新赋值即?/FONT>Q这一Ҏ在有多个输入输出参数Q且每次调用时只有一个输入参数的值发生变化时Q可以大大减代码量?/P> <P><BR>    <STRONG>5. 同时hq回倹{输入参数、输出参数的存储q程<BR></STRONG>    前面说过Q在调用存储q程Ӟ声明参数的顺序要与存储过E中定义的顺序相同。还有一点要特别注意Q?FONT color=#0000ff>如果存储q程同时hq回g及输入、输出参敎ͼq回D最先声?/FONT>?BR>    Z演示q种情况下的调用ҎQ我们改善一下上面的例子。还是取得ID?的用L用户名,但是有可能该用户不存?该用户已删除Q而userid是自增长的字D?。存储过E根据用户存在与否,q回不同的倹{此Ӟ存储q程和ASP代码如下Q?/P> <P>    <FONT color=#008000>/*SP5*/<BR></FONT>    CREATE PROCEDURE dbo.getUserName<BR>       <FONT color=#008000>--Z加深?序"的印象,以下两参数的定义顺序颠倒一?BR></FONT>       @UserName varchar(40) output,<BR>       @UserID int<BR>    as<BR>    set nocount on<BR>    begin<BR>       if @UserID is null return<BR>       select @UserName=username <BR>           from dbo.[userinfo] <BR>           where userid=@UserID<BR>       if @@rowcount>0<BR>          return 1<BR>       else<BR>          return 0<BR>       return<BR>    end<BR>    go</P> <P>   <FONT color=#008000> '**调用同时hq回倹{输入参数、输出参数的存储q程**</FONT><BR>    DIM MyComm,UserID,UserName<BR>    UserID = 1<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    with MyComm<BR>       .ActiveConnection = MyConStr          <FONT color=#008000>'MyConStr是数据库q接字串<BR></FONT>       .CommandText      = "getUserName"    <FONT color=#008000> '指定存储q程?/FONT><BR>       .CommandType      = 4                 <FONT color=#008000>'表明q是一个存储过E?/FONT><BR>       .Prepared         = true              <FONT color=#008000>'要求SQL命o先行~译<BR></FONT>       <FONT color=#008000>'q回D最先被声明<BR></FONT>       .Parameters.Append .CreateParameter("RETURN",2,4)<BR>       <FONT color=#008000>'以下两参数的声明序也做相应颠?BR></FONT>       .Parameters.append .CreateParameter("@UserName",200,2,40)<BR>       .Parameters.append .CreateParameter("@UserID",3,1,4,UserID)<BR>       .Execute<BR>    end with<BR>    if MyComm(0) = 1 then<BR>       UserName = MyComm(1)<BR>    else<BR>       UserName = "该用户不存在"<BR>    end if<BR>    Set MyComm = Nothing</P> <P><BR>    <STRONG>6. 同时q回参数和记录集的存储过E?/STRONG><BR>    有时候,我们需要存储过E同时返回参数和记录集,比如在利用存储过E分|Q要同时q回记录集以及数据总量{参数。以下给Z个进行分处理的存储q程Q?/P> <P>   <FONT color=#008000> /*SP6*/<BR></FONT>    CREATE PROCEDURE dbo.getUserList<BR>       @iPageCount int OUTPUT,   <FONT color=#008000>--总页?BR></FONT>       @iPage int,               <FONT color=#008000>--当前号</FONT><BR>       @iPageSize int            <FONT color=#008000>--每页记录?BR></FONT>    as<BR>    set nocount on<BR>    begin<BR>       <FONT color=#008000>--创徏临时?/FONT> <BR>       create table #t (ID int IDENTITY,  <FONT color=#008000> --自增字段<BR></FONT>                        userid int,<BR>                        username varchar(40))<BR>       <FONT color=#008000>--向时表中写入数?BR></FONT>       insert into #t <BR>          select userid,username from dbo.[UserInfo]<BR>             order by userid<BR>       <BR>       <FONT color=#008000>--取得记录L</FONT> <BR>       declare @iRecordCount int<BR>       set @iRecordCount = @@rowcount</P> <P>       <FONT color=#008000>--定总页?/FONT><BR>       IF @iRecordCount%@iPageSize=0<BR>          SET @iPageCount=CEILING(@iRecordCount/@iPageSize)<BR>       ELSE<BR>          SET @iPageCount=CEILING(@iRecordCount/@iPageSize)+1<BR> <BR>       <FONT color=#008000>--若请求的号大于总页敎ͼ则显C最后一?/FONT><BR>       IF @iPage > @iPageCount<BR>          SELECT @iPage = @iPageCount</P> <P>       <FONT color=#008000>--定当前늚始末记录<BR></FONT>       DECLARE @iStart int    --start record<BR>       DECLARE @iEnd int      --end record<BR>       SELECT @iStart = (@iPage - 1) * @iPageSize<BR>       SELECT @iEnd = @iStart + @iPageSize + 1</P> <P>      <FONT color=#008000> --取当前页记录</FONT>    <BR>       select * from #t where ID>@iStart and ID<@iEnd</P> <P>       <FONT color=#008000>--删除临时?/FONT><BR>       DROP TABLE #t</P> <P>       <FONT color=#008000>--q回记录L</FONT><BR>       return @iRecordCount<BR>    end<BR>    go</P> <P>    在上面的存储q程中,输入当前号及每记录数Q返回当前页的记录集Q总页数及记录L。ؓ了更具典型性,记录L以返回值的形式q回。以下是调用该存储过E的ASP代码(具体的分|作略?:</P> <P>   <FONT color=#008000> '**调用分页存储q程**</FONT><BR>    DIM pagenow,pagesize,pagecount,recordcount<BR>    DIM MyComm,MyRst<BR>    pagenow = Request("pn")<BR>    <FONT color=#008000>'自定义函数用于验证自然数</FONT><BR>    if CheckNar(pagenow) = false then pagenow = 1<BR>    pagesize = 20<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    with MyComm<BR>       .ActiveConnection = MyConStr         <FONT color=#008000> 'MyConStr是数据库q接字串</FONT><BR>       .CommandText      = "getUserList"    <FONT color=#008000> '指定存储q程?/FONT><BR>       .CommandType      = 4                 <FONT color=#008000>'表明q是一个存储过E?/FONT><BR>       .Prepared         = true             <FONT color=#008000> '要求SQL命o先行~译</FONT><BR>       <FONT color=#008000>'q回?记录总量)</FONT> <BR>       .Parameters.Append .CreateParameter("RETURN",2,4)<BR>      <FONT color=#008000> '出参(总页?<BR></FONT>       .Parameters.Append .CreateParameter("@iPageCount",3,2)<BR>       <FONT color=#008000>'入参(当前号)<BR></FONT>       .Parameters.append .CreateParameter("@iPage",3,1,4,pagenow)<BR>       <FONT color=#008000>'入参(每页记录?<BR></FONT>       .Parameters.append .CreateParameter("@iPageSize",3,1,4,pagesize)<BR>       Set MyRst = .Execute<BR>    end with<BR>    if MyRst.state = 0 then        <FONT color=#008000>'未取到数据,MyRst关闭<BR></FONT>       recordcount = -1<BR>    else<BR>       MyRst.close    <FONT color=#008000>'注意Q若要取得参数|需先关闭记录集对象</FONT><BR>       recordcount = MyComm(0)<BR>       pagecount   = MyComm(1)<BR>       if cint(pagenow)>=cint(pagecount) then pagenow=pagecount<BR>    end if<BR>    Set MyComm = Nothing</P> <P>    <FONT color=#008000>'以下昄记录<BR></FONT>    if recordcount = 0 then<BR>       Response.Write "无记?<BR>    elseif recordcount > 0 then<BR>       MyRst.open<BR>       do until MyRst.EOF<BR>       ......<BR>       loop<BR>       <FONT color=#008000>'以下昄分页信息</FONT><BR>       ......<BR>    else  <FONT color=#008000>'recordcount=-1</FONT><BR>       Response.Write "参数错误"<BR>    end if</P> <P>    对于以上代码Q只有一炚w要说明:<FONT color=#0000ff>同时q回记录集和参数Ӟ若要取得参数Q需先将记录集关闭,使用记录集时再将其打开</FONT>?/P> <P><BR>    <STRONG>7. q回多个记录集的存储q程<BR></STRONG>    本文最先介l的是返回记录集的存储过E。有时候,需要一个存储过E返回多个记录集Q在ASP中,如何同时取得q些记录集呢Qؓ了说明这一问题Q在userinfo表中增加两个字段Qusertel及usermailQƈ讑֮只有d用户可以查看q两内宏V?/P> <P>    <FONT color=#008000>/*SP7*/<BR></FONT>    CREATE PROCEDURE dbo.getUserInfo<BR>       @userid int,<BR>       @checklogin bit<BR>    as<BR>    set nocount on<BR>    begin<BR>       if @userid is null or @checklogin is null return<BR>       select username<BR>          from dbo.[usrinfo]<BR>          where userid=@userid<BR>       <FONT color=#008000>--若ؓd用户Q取usertel及usermail</FONT><BR>       if @checklogin=1<BR>          select usertel,usermail<BR>             from dbo.[userinfo]<BR>             where userid=@userid<BR>       return<BR>    end<BR>    go</P> <P>    以下是ASP代码Q?/P> <P>    <FONT color=#008000>'**调用q回多个记录集的存储q程**</FONT><BR>    DIM checklg,UserID,UserName,UserTel,UserMail<BR>    DIM MyComm,MyRst<BR>    UserID = 1<BR>    <FONT color=#008000>'checklogin()定义函数Q判断访问者是否登?BR></FONT>    checklg = checklogin()<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    with MyComm<BR>       .ActiveConnection = MyConStr         <FONT color=#008000> 'MyConStr是数据库q接字串</FONT><BR>       .CommandText      = "getUserInfo"     <FONT color=#008000>'指定存储q程?BR></FONT>       .CommandType      = 4                 <FONT color=#008000>'表明q是一个存储过E?/FONT><BR>       .Prepared         = true              <FONT color=#008000>'要求SQL命o先行~译</FONT><BR>       .Parameters.append .CreateParameter("@userid",3,1,4,UserID)<BR>       .Parameters.append .CreateParameter("@checklogin",11,1,1,checklg)<BR>       Set MyRst = .Execute<BR>    end with<BR>    Set MyComm = Nothing</P> <P>    <FONT color=#008000>'从第一个记录集中取?/FONT><BR>    UserName = MyRst(0)<BR>    <FONT color=#008000>'从第二个记录集中取?/FONT><BR>    if not MyRst is Nothing then<BR>       Set MyRst = MyRst.NextRecordset()<BR>       UserTel  = MyRst(0)<BR>       UserMail = MyRst(1)<BR>    end if<BR>    Set MyRst = Nothing</P> <P>    以上代码中,<FONT color=#0000ff>利用Recordset对象的NextRecordsetҎQ取得了存储q程q回的多个记录集</FONT>?/P> <P><BR>    xQ针对ASP调用存储q程的各U情况,本文已做了较为全面的说明。最后说一下在一个ASPE序中,调用多个存储q程的不同方法?BR>    在一个ASPE序中,调用多个存储q程臛_有以下三U方法是可行的:<BR>    <STRONG>1. 创徏多个Command对象</STRONG><BR>    <BR>    DIM MyComm<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    <FONT color=#008000>'调用存储q程一<BR></FONT>    ......<BR>    Set MyComm = Nothing<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>   <FONT color=#008000> '调用存储q程?/FONT><BR>    ......<BR>    Set MyComm = Nothing<BR>    ......</P> <P>   <STRONG> 2. 只创Z个Command对象Q结束一ơ调用时Q清除其参数</STRONG></P> <P>    DIM MyComm<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>   <FONT color=#008000> '调用存储q程一<BR></FONT>    .....<BR>    <FONT color=#008000>'清除参数(假设有三个参?<BR></FONT>    MyComm.Parameters.delete 2<BR>    MyComm.Parameters.delete 1<BR>    MyComm.Parameters.delete 0<BR>   <FONT color=#008000> '调用存储q程二ƈ清除参数<BR></FONT>    ......<BR>    Set MyComm = Nothing</P> <P>    此时要注意:清除参数的顺序与参数声明的顺序相反,原因嘛,我也不知道?/P> <P>    <STRONG>3. 利用Parameters数据集合的RefreshҎ重置Parameter对象</STRONG></P> <P>    DIM MyComm<BR>    Set MyComm = Server.CreateObject("ADODB.Command")<BR>    <FONT color=#008000>'调用存储q程一</FONT><BR>    .....<BR>   <FONT color=#008000> '重置Parameters数据集合中包含的所有Parameter对象<BR></FONT>    MyComm.Parameters.Refresh<BR>   <FONT color=#008000> '调用存储q程?/FONT><BR>    .....<BR>    Set MyComm = Nothing<BR>  <BR>    一般认为,重复创徏对象是效率较低的一U方法,但是l测?试工具为Microsoft Application Center Test)Q结果出人意料:<BR>    <FONT color=#0000ff>Ҏ2 >= Ҏ1 >> Ҏ3<BR></FONT>    Ҏ2的运行速度大于{于Ҏ1(最多可?%左右)Q这两种Ҏ的运行速度q大于方?(最多竟高达130%)Q所以徏议在参数多时Q采用方?Q在参数较少Ӟ采用Ҏ2?/P> <P>    ׃一天的旉Q终于把我对于在ASP中调用存储过E的一些粗的l验形成了文字。这其中Q有些是我只知其果而不明其因的Q有些可能是错误的,但是Q这些都是经q我亲n实践的。各位看官批判地接受吧。有不同意见Q希望一定向我指明,先谢了?/P><img src ="http://www.aygfsteel.com/guming123416/aggbug/31916.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/guming123416/" target="_blank">lovajava_ye</a> 2006-02-22 10:26 <a href="http://www.aygfsteel.com/guming123416/archive/2006/02/22/31916.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƶ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ν</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">߶</a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank">ͻȪ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ӧñر</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">³ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ٲ</a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">˴</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƫ</a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>