??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲人成色4444在线观看,亚洲免费福利在线视频,国产亚洲情侣久久精品http://www.tkk7.com/jjshcc/category/44986.htmlzh-cnWed, 07 Jul 2010 13:37:46 GMTWed, 07 Jul 2010 13:37:46 GMT60二域名如何׃nCookies【{?| 2005-12-09?/title><link>http://www.tkk7.com/jjshcc/archive/2010/07/05/325284.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Mon, 05 Jul 2010 06:51:00 GMT</pubDate><guid>http://www.tkk7.com/jjshcc/archive/2010/07/05/325284.html</guid><wfw:comment>http://www.tkk7.com/jjshcc/comments/325284.html</wfw:comment><comments>http://www.tkk7.com/jjshcc/archive/2010/07/05/325284.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jjshcc/comments/commentRss/325284.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jjshcc/services/trackbacks/325284.html</trackback:ping><description><![CDATA[之前没哪ơ实践过Q只是听一堆h说不可以或者不成功Q今天测试了下,成功实现?br /> OSQwin2003<br /> BrowseQIE6QMozilla1.5QNetscape8.0QFriefox1.0QOpera8.51<br /> <br /> 步骤Q?br /> 1、在iis新徏站点3?font color="#000000">Q?/font>www.goalercn.com(? goalercn.com)Qimg.goalercn.comQblog.goalercn.com<br /> 2、在www.goalercn.com下徏立文件testcookies.aspQ代码如下:<span><br /> <span id="code_121.36278514274242"><% <br /> Response.Cookies("Type") = "Test Cookies"<br /> Response.Cookies("Type").Expires = date()+30<br /> Response.Cookies("Type").Domain = ".goalercn.com"<br /> Response.Cookies("Type").Secure = False<br /> Response.Write Request.Cookies("Type")<br /> %></span></span><br />  3、在ad.goalercn.com下徏立文件testcookies.aspQ代码如下:<span><br /> <span id="code_7.182621103473949"><%Response.Write Request.Cookies("Type")%></span></span><br />  4、在blog.goalercn.com下徏立文件testcookies.aspQ代码同?br /> 5、因为是本机试Q修改hosts文gQ把4个域名都指向?27.0.0.1Q也是d如下内容Q?br />     127.0.0.1     ad.goalercn.com<br />     127.0.0.1     blog.goalercn.com<br />     127.0.0.1     www.goalercn.com<br />     127.0.0.1     goalercn.com<br /> 6、关闭所有浏览器Q开ie,打开http://www.goalercn.com/demo/testcookies.aspQ显C出文本? 容:Test Cookies<br /> 7、新建窗口,打开http://ad.goalercn.com/temp/testcookies.aspQ显C出文本? 容:Test Cookies<br /> 8、新建窗口,打开http://blog.goalercn.com/temp/testcookies.aspQ同hC出如上文本内容<br /> 9、换其他4个浏览器Q都成功?br /> <br /> 注意点:<br /> 1、Response.Cookies("Type").Secure = FalseQSecure属性一定要是falseQ或者直接不执行q行Q如? Secure = TrueQ则ad和blog?U域名是取g了?br /> 2、Response.Cookies("Type").Domain = ".goalercn.com"Qdomain的|我设|? ?goalercn.com"Q也是没有前面的点Q在IE下成?br /> 其他4个浏览器没测试?br /> 3、path我猜是不应该讄的?br /> 4、在局域网内其他机器上Q修改host指向到我机器的IPQ取值成功?br /> 5、在局域网另外一台机器上架设ad.goalercn.comQ把testcookies.asp文gcopyq去Q同时修改host到当前机器,取? 成功 <img src ="http://www.tkk7.com/jjshcc/aggbug/325284.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jjshcc/" target="_blank">Eric_jiang</a> 2010-07-05 14:51 <a href="http://www.tkk7.com/jjshcc/archive/2010/07/05/325284.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Persits.Upload.1 '800a0001' 的解x法,能解冻Ihttp://www.tkk7.com/jjshcc/archive/2010/06/22/324144.htmlEric_jiangEric_jiangTue, 22 Jun 2010 04:07:00 GMThttp://www.tkk7.com/jjshcc/archive/2010/06/22/324144.htmlhttp://www.tkk7.com/jjshcc/comments/324144.htmlhttp://www.tkk7.com/jjshcc/archive/2010/06/22/324144.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/324144.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/324144.htmlArticle PS02022586
800A0001 Unspecified error

Problem Description

When uploading files with AspUpload 3.0 (and higher), the following error may be thrown by the Save method:

Persits.Upload.1 (0x800A0001)
Unspecified error

Solution

In most cases it means that your upload script uses Request.Form or Request.QueryString prior to calling Upload.Save . As a result, the BinaryRead method of the Request object fails.

You must never use Request.Form in your upload script because the ENCTYPE="multipart/form-data" attribute of your form makes this collection unusable. Use Upload.Form instead. Remeber, however, that the Upload.Form collection is populated by a call to Upload.Save, therefore you can only use Upload.Form after a successful call to Upload.Save.



单来?是说你使用了这个组?׃要再使用 Request.Form or Request.QueryString 来获取参敎ͼ都要用Upload.Form来获取,不然报错这个错

Eric_jiang 2010-06-22 12:07 发表评论
]]>
VB数组详解http://www.tkk7.com/jjshcc/archive/2010/06/12/323410.htmlEric_jiangEric_jiangSat, 12 Jun 2010 02:46:00 GMThttp://www.tkk7.com/jjshcc/archive/2010/06/12/323410.htmlhttp://www.tkk7.com/jjshcc/comments/323410.htmlhttp://www.tkk7.com/jjshcc/archive/2010/06/12/323410.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/323410.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/323410.html     数组是一l具有相同类型和名称的变量的集合。这些变量称为数l的元素Q每个数l元素都有一个编Pq个~号叫做下标Q我们可以通过 下标来区别这些元素。数l元素的个数有时也称之ؓ数组的长度?br />     一般情况下Q数l的元素cd必须相同Q可以是前面讲过的各U基本数据类型。但当数l类型被指定?span style="color: red;">变体型时Q它的各个元素就可以是不同的cd?br /> 数组和变量一P也是有作用域的,按作用域的不同可以把数组分ؓQ过E数组(或称为局 部数l?、模块数组以及全局数组?br />     二、定长数l和动态数l?br />     定长数组
   定长数组的长度是在定义时q定的Q在E序q行q程中是固定不变的。其定义格式为:
   Dim 数组?[下界TO]上界)[Ascd名]
   其中Q数l的下界和类型是可选的。所谓下界和上界Q就是数l下标的最值和最大倹{缺省下界时QvB? 认的下界?Q但通常Z习惯上是?开始的Q因?我们可以讄让数l的默认下界?Q这需要在每个模块?#8220;(声明)”部分d一行代码:
   如果? 义数l时不指定其cdQ默认是变体型的?br />   下面举例说明定长数组的定义:
  ①Dim a(1 to 3)As Integer
  ②Dim b(5 to 9)As String
  ③Dim c(7)As Integer
  ④Dim d(6)
     其中Q例①定义了一个具有三 个元素的整型数组Q其下标??。例②定义了一个具有五个元素的字符型数l,其下标从5??span style="color: red;">例③~省了下界,它定义了一个具有八个元素的整型数组Q其下标??。例④则~省了下界和cdQ定义的是具有七个元素的变体型数l,其下标从0?。如果在该模块的“(声明)”部分d了Option base 1Q则例③和例④的下标都是从l开始了?br /> 在定义定长数l时Q其上界和下界必L常数或常量表辑ּ?br />     动态数l?br /> ? 很多情况下,数组的长度事先是无法预测的,而且有时可能需要在E序? 改变数组的长度以适应新的情况Q因此出C动态数l。动态数l是在定义数l只指定数组名及其类型,{以后知道数l的长度或需要改变数l长度时再用 “ReDim”指定它的长度。现举例如下Q?br />     Dim X AS Integer
    Dim a()As String
……
    ReDim a(x)
……
    X=X+3
    ReDim a(x)
    其中?#8220;…”代表其它代码。这D代码首先定 义了一个整型变量和—个字符型的动态数l,之后l过一pdq算后变量X得到一个定|再?#8220;ReDim”指定数组的长度,最后根据需要又再一ơ改变了 数组的长度?br />     虽然可以一ơ或多次改变动态数l的长度Q但当重新指定数l长度时Q数l内原有的数据降会被清除。如果既x变数l的长度Q又想保留数 l原有的数据Q则在?#8220;ReDim”旉要加?#8220;Preserve”关键字。例如:ReDim Preserve a(x)。但要注意,如果~小数组长度Q那么数l中出新的下界C界之间的元素清除,即使用?#8220;Preserve'’关键字,也不会保留这些元素, 如果仍然讉Kq些元素会引v“下标界”的错?
   当不需要再使用某个动态数l时Q我们可以?#8220;Erase”删除该数l,以释放该数组占用的内存空_例如QErase a()?br /> 三、多l数l及数组元素的引?br />    一个数l可以是一l的Q也可以是多l。当需要表C^面中的一个点坐标Q? 需要用Cl数l?表示I间中的一个点Ӟ需要用Cl数l。多l数l的定义格式为:
    Dim数组?[下界TO]上界[QTO 上界[下界 TO]    [Q?#8230;])[AScd名]
多维数组的定义格式与—一l数l基本上是一致的Q只是多加几个上界和下界?br />     现在举例 如下Q?br />     Dim a(1 TO 3,1 TO 4)    As Integer
    Dim b(5, 9)    As Siring
    Dim b(4, 3)
    q三行语句分别定义了一个两l数l,W一个指定了下界及类?W二个只指定了类?nbsp;   使用默认的下?最后一个下界和cd都没有指定,其类型是变体型的?br />    Ҏl元素的引用Q是数组名加下标的Ş式。例如:
   Dim a(5)as Integer
   Dim b(3,4)as Integer
   a(1)=3
   a(2)=5
   a(3)=a(1)+a(2)
   b(2,1)=a(2)
   msgbox a(3)
   msgbox b(2,1Q?br />   在此例中Q先Ҏla的前三个元素赋|再给数组b的一个元素赋|最后显 CZ个数l元素的倹{用数组元素Ӟ其下标不要超Z下界至上界的范围?br />


Eric_jiang 2010-06-12 10:46 发表评论
]]>
改进ASPE序中的字符串处理性能http://www.tkk7.com/jjshcc/archive/2010/06/10/323216.htmlEric_jiangEric_jiangThu, 10 Jun 2010 03:33:00 GMThttp://www.tkk7.com/jjshcc/archive/2010/06/10/323216.htmlhttp://www.tkk7.com/jjshcc/comments/323216.htmlhttp://www.tkk7.com/jjshcc/archive/2010/06/10/323216.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/323216.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/323216.html?/strong>
  
  ~写 ASP 面Ӟ开发h员实际上是创Z个格式化的文本流Q通过 ASP 提供?Response 对象写入 Web 客户端。创建此文本的Ҏ有多U,而您选择的方法将?Web 应用E序的性能和可~放性生很大媄响。很多次Q在我帮助客户优化其 Web 应用E序的性能Ӟ发现其中一个比较有效的Ҏ是更?HTML 的创徏方式。本文将介绍几种常用技术,q测试它们对一个简单的 ASP 面的性能所产生的媄响?br />   
  ASP 设计
  
  许多 ASP 开发h员都遵@良好的Y件工E原则,可能地其代码模块化。这U设计通常使用一些包含文Ӟq些文g中包含对面的特定不q箋部分q行格式化生成的函数。这些函数的字符串输出(通常?HTML 表格代码Q可以通过各种l合创徏一个完整的面。某些开发h员对此方法进行了改进Q将q些 HTML 函数Ud Visual Basic COM lg中,希望充分利用已编译的代码提供的额外性能?br />   
  管q种设计Ҏ很不错,但创建组成这些不q箋 HTML 代码lg的字W串所使用的方法将?Web 站点的性能和可~放性生很大的影响Q无论实际的操作是在 ASP 包含文g中执行还是在 Visual Basic COM lg中执行?br />   
  字符串连?/strong>
  
  L以下 WriteHTML 函数的代码片断。名?Data 的参数只是一个字W串数组Q其中包含一些要格式化ؓ表格l构的数据(例如Q从数据库返回的数据Q?br />   
  Function WriteHTML( Data )
  Dim nRep
  For nRep = 0 to 99
  sHTML = sHTML & vbcrlf _
  & "<TR><TD>" & (nRep + 1) & "</TD><TD>" _
  & Data( 0, nRep ) & "</TD><TD>" _
  & Data( 1, nRep ) & "</TD><TD>" _
  & Data( 2, nRep ) & "</TD><TD>" _
  & Data( 3, nRep ) & "</TD><TD>" _
  & Data( 4, nRep ) & "</TD><TD>" _
  & Data( 5, nRep ) & "</TD></TR>"
  Next
  WriteHTML = sHTML
  End Function
  
  q是很多 ASP ?Visual Basic 开发h员创?HTML 代码时常用的Ҏ。sHTML 变量中包含的文本q回到调用代码,然后使用 Response.Write 写入客户端。当Ӟq还可以表示为直接嵌入不包含 WriteHTML 函数的页面的cM代码。此代码的问题是QASP ?Visual Basic 使用的字W串数据cdQBSTR ?Basic 字符Ԍ实际上无法更攚w度。这意味着每当字符串长度更ҎQ内存中字符串的原始表示形式都将遭到破坏Q而且创Z个包含新字符串数据的新的表示形式Q这增加分配内存和解除分配内存的操作。当ӞASP ?Visual Basic 已ؓ您解决了q一问题Q因此实际开销不会立即昄出来。分配内存和解除分配内存要求基本q行时代码解除各个专用锁定,因此需要大量开销。当字符串变得很大ƈ且有大块内存要被快速连l地分配和解除分配时Q此问题变得ؓ明显Q就像在大型字符串连接期间出现的情况一栗尽这一问题对单用户环境的媄响不大,但在服务器环境(例如Q在 Web 服务器上q行?ASP 应用E序Q中Q它导致严重的性能和可~放性问题?br />   
  下面Q我们回CqC码片D:此代码中要执行多个字符串分配操作?{案?16 个。在q种情况下,“&”q算W的每次应用都将D变量 sHTML 所指的字符串被破坏和重新创建。前面已l提刎ͼ字符串分配的开销很大Qƈ且随着字符串的增大而增加,因此Q我们可以对上述代码q行改进?br />   
  快捷的解x?/strong>
  
  有两U方法可以缓解字W串q接的媄响,W一U方法是试减小要处理的字符串的大小Q第二种Ҏ是尝试减执行字W串分配操作的数目。请参见下面所C的 WriteHTML 代码的修订版本?br />   
  Function WriteHTML( Data )
  
  Dim nRep
  
  For nRep = 0 to 99
  sHTML = sHTML & ( vbcrlf _
  & "<TR><TD>" & (nRep + 1) & "</TD><TD>" _
  & Data( 0, nRep ) & "</TD><TD>" _
  & Data( 1, nRep ) & "</TD><TD>" _
  & Data( 2, nRep ) & "</TD><TD>" _
  & Data( 3, nRep ) & "</TD><TD>" _
  & Data( 4, nRep ) & "</TD><TD>" _
  & Data( 5, nRep ) & "</TD></TR>" )
  Next
  
  WriteHTML = sHTML
  
  End Function
  
  乍一看,可能很难发现q段代码与上一个代码示例的差别。其实,此代码只是在 sHTML = sHTML & 后的内容外面加上了括受这实际上是通过更改优先序Q来减小大多数字W串q接操作中处理的字符串大。在最初的代码CZ中,ASP ~译器将查看{号双的表辑ּQƈ从左到右q行计算。结果,每次重复都要q行 16 个连接操作,q些操作针对不断增长?sHTML q行。在新版本中Q我们提C编译器更改操作序。现在,它将按从左到叟뀁从括号内到括号外的序计算表达式。此技术得每ơ重复包?15 个连接操作,q些操作针对的是不会增长的较字W串Q只有一个是针对不断增长的大?sHTML。图 1 昄了这U优化方法与标准q接Ҏ在内存用模式方面的比较?br />   
 

  
?1Q标准连接与加括可接在内存使用模式斚w的比?/center>
  
  在特定情况下Q用括号可以对性能和可~放性生十分显著的影响Q后文将Ҏq行q一步的说明?br />   
  StringBuilder
  
  我们已经扑ֈ了解军_W串q接问题的快h法,在多数情况下Q此Ҏ可以辑ֈ性能和投入的最佛_^衡。但是,如果要进一步提高构建大型字W串的性能Q需要采用第二种ҎQ即减少字符串分配操作的数目。ؓ此,需要?StringBuilder。StringBuilder 是一个类Q用于维护可配置的字W串~冲区,理插入到此~冲区的新文本片断,q仅在文本长度超出字W串~冲区长度时对字W串q行重新分配。Microsoft .NET 框架免费提供了这样一个类 (System.Text.StringBuilder)Qƈ在该环境下进行的所有字W串q接操作中用它。在 ASP 和传l的 Visual Basic 环境中,我们无法讉K此类Q因此需要自行创建。下面是使用 Visual Basic 6.0 创徏?StringBuilder cȝ例(为简zv见,省略了错误处理代码)?br />   
  Option Explicit
  
  ' 默认的缓冲区初始大小和增长系?br />   Private Const DEF_INITIALSIZE As Long = 1000
  Private Const DEF_GROWTH As Long = 1000
  
  ' ~冲区大和增长
  Private m_nInitialSize As Long
  Private m_nGrowth As Long
  
  ' ~冲区和~冲数器
  Private m_sText As String
  Private m_nSize As Long
  Private m_nPos As Long
  
  Private Sub Class_Initialize()
  ' 讄大小和增长的默认?br />   m_nInitialSize = DEF_INITIALSIZE
  m_nGrowth = DEF_GROWTH
  ' 初始化缓冲区
  InitBuffer
  End Sub
  
  ' 讄初始大小和增长数?br />   Public Sub Init(ByVal InitialSize As Long, ByVal Growth As Long)
  If InitialSize > 0 Then m_nInitialSize = InitialSize
  If Growth > 0 Then m_nGrowth = Growth
  End Sub
  
  ' 初始化缓冲区
  Private Sub InitBuffer()
  m_nSize = -1
  m_nPos = 1
  End Sub
  
  ' 增大~冲?br />   Private Sub Grow(Optional MinimimGrowth As Long)
  ' 初始化缓冲区Q如有必要)
  If m_nSize = -1 Then
  m_nSize = m_nInitialSize
  m_sText = Space$(m_nInitialSize)
  Else
  ' 只是增长
  Dim nGrowth As Long
  nGrowth = IIf(m_nGrowth > MinimimGrowth,
  m_nGrowth, MinimimGrowth)
  m_nSize = m_nSize + nGrowth
  m_sText = m_sText & Space$(nGrowth)
  End If
  End Sub
  
  ' 缓冲区大小调整到当前用的大小
  Private Sub Shrink()
  If m_nSize > m_nPos Then
  m_nSize = m_nPos - 1
  m_sText = RTrim$(m_sText)
  End If
  End Sub
  
  ' d单个文本字符?br />   Private Sub AppendInternal(ByVal Text As String)
  If (m_nPos + Len(Text)) > m_nSize Then Grow Len(Text)
  Mid$(m_sText, m_nPos, Len(Text)) = Text
  m_nPos = m_nPos + Len(Text)
  End Sub
  
  ' d一些文本字W串
  Public Sub Append(ParamArray Text())
  Dim nArg As Long
  For nArg = 0 To UBound(Text)
  AppendInternal CStr(Text(nArg))
  Next nArg
  End Sub
  
  ' q回当前字符串数据ƈ调整~冲区大?br />   Public Function ToString() As String
  If m_nPos > 0 Then
  Shrink
  ToString = m_sText
  Else
  ToString = ""
  End If
  End Function
  
  ' 清除~冲区ƈ重新初始?br />   Public Sub Clear()
  InitBuffer
  End Sub
  
  此类中用的基本原则是,在类U别变?(m_sText) 用作字符串缓冲区Qƈ使用 Space$ 函数以空格字W填充此~冲Z其讄为特定的大小。如果要更多文本与现有文本q接在一P则在查缓冲区的大以存放新文本后,使用 Mid$ 函数在正位|插入文本。ToString 函数返回当前存储在~冲Z的文本,q将~冲区的大小调整够容Ux文本的正长度。?StringBuilder ?ASP 代码如下所C:
  
  Function WriteHTML( Data )
  
  Dim oSB
  Dim nRep
  
  Set oSB = Server.CreateObject( "StringBuilderVB.StringBuilder" )
  ' 用大和增长pL初始化缓冲区
  oSB.Init 15000, 7500
  
  For nRep = 0 to 99
  oSB.Append "<TR><TD>", (nRep + 1), "</TD><TD>", _
  Data( 0, nRep ), "</TD><TD>", _
  Data( 1, nRep ), "</TD><TD>", _
  Data( 2, nRep ), "</TD><TD>", _
  Data( 3, nRep ), "</TD><TD>", _
  Data( 4, nRep ), "</TD><TD>", _
  Data( 5, nRep ), "</TD></TR>"
  Next
  
  WriteHTML = oSB.ToString()
  Set oSB = Nothing
  
  End Function
  
  使用 StringBuilder 需要一定的开销Q因为每ơ用此cL都必d建它的实例,q且在创建第一个类实例时必d载包含此cȝ DLL。对 StringBuilder 实例q行额外Ҏ调用时也需要开销。用加括号?#8220;&”ҎӞStringBuilder 如何执行取决于多个因素,包括q接的数目、要构徏的字W串的大以及选择?StringBuilder 字符串缓冲区的初始化参数的性能。请注意Q在多数情况下,缓冲区中所需的空间量估计得略高一些要q远好于让其不断增长?br />   
  内置Ҏ
  
  ASP 包含一U非常快L创徏 HTML 代码的方法,只需多次调用 Response.Write。Write 函数使用隐式优化的字W串~冲区,此缓冲区能够提供非常优秀的性能Ҏ。修改后?WriteHTML 代码如下所C:
  
  Function WriteHTML( Data )
  
  Dim nRep
  
  For nRep = 0 to 99
  Response.Write "<TR><TD>"
  Response.Write (nRep + 1)
  Response.Write "</TD><TD>"
  Response.Write Data( 0, nRep )
  Response.Write "</TD><TD>"
  Response.Write Data( 1, nRep )
  Response.Write "</TD><TD>"
  Response.Write Data( 2, nRep )
  Response.Write "</TD><TD>"
  Response.Write Data( 3, nRep )
  Response.Write "</TD><TD>"
  Response.Write Data( 4, nRep )
  Response.Write "</TD><TD>"
  Response.Write Data( 5, nRep )
  Response.Write "</TD></TR>"
  Next
  
  End Function
  
  虽然q段代码很可能ؓ我们提供最佳的性能和可~放性,但在某种E度上已l破坏了装Q因为现在会函数内部的代码直接写入 Response ,所以调用代码׃一定程度的控制权。另外,Ud此代码(例如Q移?COM lgQ将变得更加困难Q因为此函数?Response 存在依赖关pR?br />   
  
  
  上面提到的四U方法分别通过一个简单的 ASP 面Q包含一个由虚拟字符串数l提供数据的单个表格Q进行了试。我们?Application Center Test? (ACT) 从单个客LQWindows? XP ProfessionalQPIII-850MHzQ?12MB RAMQ针?100Mb/sec |络中的单个服务器(Windows 2000 Advanced ServerQ双 PIII-1000MHzQ?56MB RAMQ执行了试。ACT 配置Z?5 个线E,以模?5 个用戯接至|站时的负蝲。每个测试都包括 20 U预热时间和随后?100 U负载时_在负载期间创Z可能多的请求?br />   
  通过更改主表格@环中的重复次敎ͼ针对不同数目的连接操作重复运行测试,?WriteHTML 函数中的代码片断所C。运行的每个试都用上文提到的四种不同的方法执行?br />   
  l果
  
  下面的一pd图表昄了各U方法对整个应用E序吞吐量的影响Q以?ASP 面的响应时间。通过q些图表Q我们可以了解应用程序支持的h数目Q以及用L待页面下载至览器所需的时间?br />   
  ?1Q用的q接Ҏ~写的说?br />   
 

  在模拟典?ASP 应用E序工作负荷斚wQ此试与实际情늛差甚q,从表 2 中可以明昄刎ͼ即重复 420 ơ,此页面仍不是特别大。现在很多复杂的 ASP 面在这些数字上都是比较高的Q设|有可能出此测试范围的限制?br />   
  ?2Q测试示例的面大小和连接数?br />   
 

  
 

  
?2Q吞吐量l果?/center>
  
  从图 2 的图表中可以看到Q正如我们所预期的,多重 Response.Write Ҏ (RESP) 在测试的整个重复试范围中ؓ我们提供了最佳的吞吐量。但令h惊讶的是Q标准字W串q接Ҏ (CAT) 的下降如此巨大,而加括号的方?(PCAT) 在重复执?300 多次时性能依旧要好很多。在大约重复 220 ơ之处,字符串缓存带来的性能提高过?StringBuilder Ҏ (BLDR) 固有的开销Q在q一点以上,在此 ASP 面中?StringBuilder 所需的额外开销是值得的?br />   
 

  
?3Q响应时间结果图

  

  
?4Q省?CAT 的响应时间结果图

  
  ?3 和图 4 中的图表昄了按“到第一字节的时?#8221;量的响应时_以毫Uؓ单位Q。因为标准字W串q接Ҏ (CAT) 的响应时间增加过快,所以又提供了未包括此方法的图表Q图 4Q,以便分析其他Ҏ之间的差异。有一点值得注意Q多?Response.Write Ҏ (RESP) ?StringBuilder Ҏ (BLDR) 随重复次数的增加呈现一U近似线性的增长Q而标准连接方?(CAT) 和加括号的方?(PCAT) 则在过一定的阈g后开始迅速增加?br />   
  
  
  本文着重讲qC如何?ASP 环境中应用不同的字符串构建技术,q些内容同样适用于所有?Visual Basic 代码创徏大型字符串的ҎQ例如手动创?XML 文档。以下原则可以帮助您定哪种Ҏ最适合您的需要?br />   
  首先试加括L“&”ҎQ尤其是在处理现有代码时。这U方法对代码l构的媄响微乎其微,但您会发现应用程序的性能显著增强,甚至会超出预定目标?br />   
  在不破坏所需的封装别的情况下?Response.Write。用此ҎQ可以避免不必要的内存内字符串处理,从而提供最佳的性能?br />   
  使用 StringBuilder 构徏真正大型或连接数目较多的字符丌Ӏ?br />   
  管您可能未看到本文所C的q种性能增长Q但我已在真实的 ASP Web 应用E序中用了q些技巧,只需要很的额外投入可以在性能和可~放性方面获得很大的提高?/span>

Eric_jiang 2010-06-10 11:33 发表评论
]]>权限被拒l错误当试图 [重新~译一?ASP ?DLL ?/title><link>http://www.tkk7.com/jjshcc/archive/2010/06/05/322817.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Sat, 05 Jun 2010 00:30:00 GMT</pubDate><guid>http://www.tkk7.com/jjshcc/archive/2010/06/05/322817.html</guid><wfw:comment>http://www.tkk7.com/jjshcc/comments/322817.html</wfw:comment><comments>http://www.tkk7.com/jjshcc/archive/2010/06/05/322817.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jjshcc/comments/commentRss/322817.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jjshcc/services/trackbacks/322817.html</trackback:ping><description><![CDATA[<p><font style="background-color: #cce8cf">       试图重新~译 Windows 95 ?Windows 98 的计机q行 Microsoft 个h Web 服务?QPWSQ?4.0 的上一个自定义 ActiveX 动态链接库 (DLL) Ӟ您可能会收到一条错误消息类g以下内容Q?<br /> 权限被拒l: <filepath>' <br /> 其中 <filepath> 是\径以在活动服务器面 (ASP) DLL?/font></p> <p><font style="background-color: #cce8cf">如果您试N命名 DLL ?Windows 资源理器中的,您可能会看到一条错误消息类g以下内容Q?<br /> 不能重命?<filename>Q请执行下列操作Q?讉K被拒l?</font></p> <p><font style="background-color: #cce8cf">L保磁盘未满或写保?br /> 而且文g当前未在使用中?<br /> 其中 <filename> ?DLL 的文件名?/font></p> <p><font style="background-color: #cce8cf">如果试图删除?DLL ?Windows 资源理器中的,您可能会看到一条错误消息类g以下内容Q?<br /> 不能删除 <filename>: 讉K被拒l?</font></p> <p><font style="background-color: #cce8cf">L保磁盘未满或写保?br /> 而且文g当前未在使用中?<br />  <br /> 原因<br />        ?ASP 实例化自定义 ActiveX DLL 使用 Server.CreateObject("ActiveX.Class")DLL 获取实例化,在本例中?..?ASP 实例化自定义 ActiveX DLL 使用 <br /> Server.CreateObject("ActiveX.Class")</font></p> <p><font style="background-color: #cce8cf">DLL 获取实例化,在本例中?PWS ?Web 服务q程中?一旦被实例?DLL PWS 不会释放?DLL?<br />  <br /> 解决Ҏ<br />         停止q?PWS 启动?SysTray 图标不能释放?ActiveX DLL 是实例化一个活动服务器面 (ASP) 的锁?若要解除锁定 DLL 上的Q?..停止q?PWS 启动?SysTray 图标不能释放?ActiveX DLL 是实例化一个活动服务器面 (ASP) 的锁?nbsp;  <br />       </font><font style="background-color: #cce8cf">若要解除锁定 DLL 上的QPWS 必须手动停止使用命o提示?默认状态下QPws.exe ȝ在文件夹 C:\Windows\System\Inetsrv?若要停止 PWSQ键入以下命令: <br /> windows\system\inetsrv\pws.exe /stop<br />       然后Q您可以重新启动 PWS 手动重新从命令提C符Q启动时通过使用以下命oQ?<br /> windows\system\inetsrv\pws.exe /start<br />      一旦停?PWSQ这释?ActiveX DLL?如有必要Q请重新~译 DLL?一?PWS 的重新启动它再?DLL 旉定它获取 ASP 通过实例化?/font></p> <font style="background-color: #cce8cf"> <p><br /> <br /> 另一个解x?br />        在运行行键入: net stop iisadmin/yQ然后按 Enter。这在 DLL 中运行生成时停止所有服务?<br />        生成 DLL 完成后键? net start w3svc 从运行的行。您的服务将再次为最多?<br />  </font></p> <img src ="http://www.tkk7.com/jjshcc/aggbug/322817.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jjshcc/" target="_blank">Eric_jiang</a> 2010-06-05 08:30 <a href="http://www.tkk7.com/jjshcc/archive/2010/06/05/322817.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决DLLlg注册成功但无法用的问题http://www.tkk7.com/jjshcc/archive/2010/06/04/322696.htmlEric_jiangEric_jiangFri, 04 Jun 2010 00:31:00 GMThttp://www.tkk7.com/jjshcc/archive/2010/06/04/322696.htmlhttp://www.tkk7.com/jjshcc/comments/322696.htmlhttp://www.tkk7.com/jjshcc/archive/2010/06/04/322696.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/322696.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/322696.html 如FSOQ在NTFS格式?br /> Regsvr32 %systemroot%\system32\scrrun.dll
如果注册成功Q但ASP中依然无法?br /> 先看scrrun.dll在NTFS格式下的权限Q看是否加入userl中Q如没有L下命?br /> cacls %systemroot%\system32\scrrun.dll /d guests
而在FAT32格式下面Q因为没有文件权限,无需要上面的步骤
而注册表中依然有用户权限
h看HKEY_CLASSES_ROOT\Scripting.FileSystemObject的权限,请加上Userl可dq行权限
同理Q别的DLLlg能注册成功但无法使用也大多是q种问题?/a>

单的回答一下,因ؓIIS的登录用户不是DLL注册时候的用户。解x?把IIS用户改ؓ你这个DLL注册的用P或?有没有办法把q个DLL注册l所有用P不知道你懂没Q反正就q么点回{了Qadministrator 讄密码Q而且IIS用户那里自己输入administrator 和密?别去查找Q?

Eric_jiang 2010-06-04 08:31 发表评论
]]>
ASP国际化多语言详细Ҏ http://www.tkk7.com/jjshcc/archive/2010/06/03/322626.htmlEric_jiangEric_jiangThu, 03 Jun 2010 07:36:00 GMThttp://www.tkk7.com/jjshcc/archive/2010/06/03/322626.htmlhttp://www.tkk7.com/jjshcc/comments/322626.htmlhttp://www.tkk7.com/jjshcc/archive/2010/06/03/322626.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/322626.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/322626.html a.建立语言?
1.在各个子pȝ建立"语言?目录 ,
如BBS--> language -->Simplified
--->Traditional
--->English
2 为每个ASP,js,HTC 建立语言文g,如ACMBBStopic.asp.lang ,treeview.htc.lang ,
用来存放语言全局变量?
如目录Language\English\ ACMBBSShow.asp.lang
Public Const LangRollway="reverse roll"
Public Const LangInvaildUser="invaild user"
Public Const LangMailbox="mail box"
Public Const LangSysSetup="system setup"
Public Const LangACMBBS="Acer BBS"
Public Const LangBulltn="Acer bulltin"
Public Const LangPersnSetup="personal setting"
Public Const LangPublicTools="Public Tools"
如目录Language\ Simplified \ ACMBBSShow.asp.lang
Public Const LangRollway="反向滚动"
Public Const LangInvaildUser="非法用户"
Public Const LangMailbox="邮g资料?
Public Const LangSysSetup="pȝ讄"
Public Const LangACMBBS="明碁|咖"
Public Const LangBulltn="公告?
Public Const LangPersnSetup="个h讑֮"
Public Const LangPublicTools="组工具"
语言全局变量命名规则;
必须是VBscript 变量定义方式 Public Const
变量名ؓ Q?"Lang" + Message Descption

b. 讑֮Global.asa
SUB Session_OnStart
Session.CODEPAGE="1252" '1252En '950J体 '936?
Session.Contents("Language")="EngLish" 'EngLish 'Traditional 'Simplified
Session.Contents("StrCharset")="big5" 'iso-8859-1 'big5 'gb2312
End Sub
c. 引用语言?
1.建立 BBS--> language -->script 目录, IncludeLang.vbs
2.在各个asp,js,HTC头部


3.使用思想
o ?*.lang {语a包用Function GetFileContents d变量?
o 使用vbscript中EXECUTEҎ在Server执行
IncludeLang.vbs 内容如下

'//'*********************************************************
'// ' Purpose: open include 文g
'// ' Inputs: strIncludeFile 路径
'// ' Returns: All Text
'//'*********************************************************

Function GetFileContents(strIncludeFile)
On Error Resume Next
Dim objFSO
Dim objText
Dim strPage
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objText = objFSO.OpenTextFile(Server.MapPath(strIncludeFile))
GetFileContents= objText.ReadAll
objText.Close
Set objText = Nothing
Set objFSO = Nothing
IF Err Then
Response.Write "Error open this language package file<<" & strIncludeFile & ">>!"
Response.End
END IF
End Function

'//'*********************************************************
'// ' Purpose: 动?include 文g
'// ' Inputs: strIncludeFile 路径,语言U类
'// ' Returns: 执行变量到全局变量
'//'*********************************************************
Function IncludeLangFile(StrFileName,Language)
On Error Resume Next
dim StrLangPackagePath
dim StrLanguagePath
StrLanguagePath=Language
StrLangPackagePath="./Language/" & StrLanguagePath & "/" & StrFileName
Execute(GetFileContents(StrLangPackagePath))
IF Err Then
Response.Write "Error Include this language package file<<" & strIncludeFile & ">>! check the file's syntax"
Response.End
END IF
End Function
2.囄部分
为带有汉字图片徏?BBS--> language -->simplified-->Image
--->traditional-->Image
--->English -->Image
动态Include



3.COM部分
使用resource file 控制语言版本,ql自动判断语a版本

注意Q?resource file 体字码必d体机器输入,J体字码必须在繁体机器输?


4.其他

多语a版本参考规则﹕
1.英文译长度量与汉语长度相当?
2.要符合各个版本的语言习惯?
3.英文版中Title ,text标签文本H按钮文本﹐select option 中英文单?首字母大??
介词H连?,冠词 使用写?
4. 英文版中~写全部使用大写?
5. 英文版中check ,radio ,英文首字母大?
6. 英文版中状态信息用小写?



Eric_jiang 2010-06-03 15:36 发表评论
]]>
ASP中调用DLLCZhttp://www.tkk7.com/jjshcc/archive/2010/06/01/322482.htmlEric_jiangEric_jiangTue, 01 Jun 2010 12:34:00 GMThttp://www.tkk7.com/jjshcc/archive/2010/06/01/322482.htmlhttp://www.tkk7.com/jjshcc/comments/322482.htmlhttp://www.tkk7.com/jjshcc/archive/2010/06/01/322482.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/322482.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/322482.html  服务器端lg

  首先,服务器端的组件要有别于客L的组?客户端的lg是通过|络传输,依靠HTML来v作用.而且只能在IE上有?但是服务器端的组件是q行在服务器?它在服务器上执行各种操作.因此,所有的览器都能n?它依靠的是服务器而不是浏览器.

  当IIS被请求执行一个ASPE序,它首先会在ASP文g中找到? %>标签之间的代?q且执行?也可以是〈script runat=server>?script>之间的代?.如果q个ASPE序在先前被调用q?那么它就会用内存中的~译q的E序来向用户q回HTML代码,如果没有,那么它就重新~译.q里ASP比CGI多一炚w度优势,因ؓCGI是每一个请求都使用一个线E?q样大大消耗了服务器的资源.

  想不想你写的E序自己p在IISq行!?!现在你就行了!使用VB5(当然现在是VB6?,你就能徏立Dynamic Linked Libraries (DLL文g),它能在IIS上直接运?如果有asp文g来请求的?.

  pȝ和Y件的要求

  你需要一?2位的操作pȝ来运行ASP.当然你也得安装IIS或PWS.我们下面的程序是在windows95+PWS+VB5的环境下开发的.

  我们开始吧

  启动你的VB,选择ActiveX图标.q个图标可以在新建工E找?VB会提供一个默认的工程?project1)和类?class1).我们会将q两个名字都Ҏ.在改名之?请首先确认我们拥有Microsoft Active Server Pages Object Library,它在我们的程序非常有?从菜单中选择"工程",然后在其中选择"引用",׃出现"引用"H口从中选择Microsoft Active Server Pages Object Library.

  l工E和cd?

  现在我们来根据自q爱好来ؓproject1和class1来命名吧!l它们命名也是很重要?我们以后会用q个工程名和cd来创个组件的实例!后面详细介绍.

  如何改名,我就不想多说?我们的工E名改ؓExmaple,cd为Helloword

  怎样使用工程和类

  现在我们有了我们自己的工E?Example1)和类?HelloWorld).以后我们׃在ASP代码中用它们的名字来引用这个组?在ASP中我们就q样引用,如下:

  Set ObjReference = Server.CreateObject("ProjectName.ClassName")

  对于我们工程的引用就?Set ObjReference = Server.CreateObject("Example1.HelloWorld")

  现在我们p用ObjReference来调用我们在lg中所创徏的函?子程?下面我们会来写一个SayHello的子E序,我们执行它的代码如下:

?
Set ObjReference = Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

  Z在HellowordcM使用ASP的方?你必d此类中写一个OnStartPage子函?如下:

Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
End Sub

  

  现在,无论什么时候用戯问一个带有本lg的ASP文g,IIS׃把ScriptingContext传送给我们的对象请我们使用.q个ScriptingContext包括了全部的ASPҎ和属?实现?q得我们有能力讉K所有ASP的对?看下面的代码:

Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
Set MyScriptingContext = PassedScriptingContext
Set MyApplication = MyScriptingContext.Application
Set MyRequest = MyScriptingContext.Request
Set MyResponse = MyScriptingContext.Response
Set MyServer = MyScriptingContext.Server
Set MySession = MyScriptingContext.Session
End Sub


  以后我们p用在VB中用MyApplication来代替ASP中的Application,同理可以代替Request,Server.....,不过我们来是要在OnStartPage之前来申明这些变?

Private MyScriptingContext As ScriptingContext
Private MyApplication As Application
Private MyRequest As Request
Private MyResponse As Response
Private MyServer As Server
Private MySession As Session

  

  使用ASP的对象我们的变量现在p像标准的ASP对象来用了!比如,我们l常在ASP中用Request.form()来收集提交表单的数据.现在我们在我们的VB中实现这个功?代码如下:

  用ASP中实?
?
MyTempVariable = Request.Form("userName")
Response.Write ("you entered "& MyTempVariable & "as your user name")
%>

  在VB中实?

MyTempVariable = MyRequest.Form("userName")
MyResponse.Write ("you entered "& MyTempVariable & "as your user name")


  通过使用MyResponse来代替Response,我们能够使用所有Response的方?当然,MyResponseq个名字可以随便来取,你甚臛_以就取Response.另一件我们得注意的是,我们得在我们的徏立的cM,写上OnEndPage子函?q个OnStartPage是相反的!OnStartPage是创建对?OnEndPage是消毁对?

  

Public Sub OnEndPage()
Set MyScriptingContext = Nothing
Set MyApplication = Nothing
Set MyRequest = Nothing
Set MyResponse = Nothing
Set MyServer = Nothing
Set MySession = Nothing
End Sub

  

  SayHelloҎ我们来徏立一个子函数,用于昄"Holle World".q个SayHelloҎ只是HelloWorldq个cM一个子函数,我们以后会在ASP中用以下的显C个方?

?
Set ObjReference = Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

  SayHello的程?很简单的!

Public Sub SayHello()
MyResponse.Write ("Hello World")
End Sub

  

  现在一个小型的lg~写完成,剩下的工作就是编译这个组??工程"菜单中保存它,取什么名字都可以,我们用Exmaple1.vbp?然后q在菜单中选择"make exmaple1.dll",其~译成DLL文g.一个组件就真正完成?

  注意,~译了此lg那么你就得先把你的PWSx,然后再编译此lg.否则VB׃告诉你些lg在用中.

  在ASP中用我们的自己的组?

  当你更正了在~译中的错误,成功地编译了example1q个工程,现在你就得拿Z最喜欢的HTML~辑器来写下下面的语?保存为ASP文g.

  〈HTML>〈HEAD>〈TITLE>Example 1?TITLE>?HEAD>

  〈BODY>

?
Set ObjReference = Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

  ?BODY>?HTML>

  q行后即可看到结?

  Hello World

  注册lg

  如果你想和你的朋?d分n你的lg,那么你就得在你的pȝ上注册你的组?我们一般用Regsvr32.exe来注册组?注册后你的组件会出现在Win95/Win98的windows/system目录?下面是一个注册的例子:

  Regsvr32.exe C:/wwwroot/Example1/Example1.dll

  在你的系l中,VB会自动给你注?所以你很少用到Regsvr32.exe

  我们q里只是写了一个非常小的组?你们可以写好自己的更大的lg,而且q可以用VB中的很多控g.

  让我们用lg来扩展我们的E序的功能吧!也希望多多的看到我们中国人的lg.



Eric_jiang 2010-06-01 20:34 发表评论
]]>
用VB生成DLL装ASP代码一个例子:q接access数据库等http://www.tkk7.com/jjshcc/archive/2010/06/01/322436.htmlEric_jiangEric_jiangTue, 01 Jun 2010 04:47:00 GMThttp://www.tkk7.com/jjshcc/archive/2010/06/01/322436.htmlhttp://www.tkk7.com/jjshcc/comments/322436.htmlhttp://www.tkk7.com/jjshcc/archive/2010/06/01/322436.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/322436.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/322436.html
VB生成的DLL装ASP代码来连接数据库QAccessQ?br />
本文用一个最单的q接access数据库的例子来说明如何将asp代码装为dll文g?br />
我们用vbQ最常见的方式来装asp代码?br />
我们需要封装的对象如下:

'Proconn.asp
dim ProConn
set ProConn=Server.CreateObject("ADODB.CONNECTION")
ProConn.Open "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")

我们下面的部分装
"driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ=" & Server.MapPath("DB.asp")

分析一下这D要装的内容,
它的前半部分是一个字W串Q?br /> "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="
?amp;q接上后半部分的另一个字W串?br /> 后半部分的另一个字W串是Server.MapPath对象函数的返回倹{?br />
下面开始这个封装的操作q程?br /> 首先
新徏一个VB下的ActiveX DLL工程Q工E的名称Project1更改成ConDBDLL
Ҏclass1的名U更Ҏcs
工程名和Ҏ名会在调用这个DLL的时候用到Q大家可以按照自己命名规则定义,但请注意好好使用?br /> q个DLL的代码部分书写如下:

Dim rp As Response
Dim rq As Request
Dim ap As Application
Dim sr As Server
Dim sn As Session

Public Sub OnStartPage(MyScriptingContext As ScriptingContext)
Set rp = MyScriptingContext.Response
Set rq = MyScriptingContext.Request
Set sr = MyScriptingContext.Server
Set ap = MyScriptingContext.Application
Set sn = MyScriptingContext.Session
End Sub

Public Sub OnEndPage()
Set rp = Nothing
Set rq = Nothing
Set sr = Nothing
Set ap = Nothing
Set sn = Nothing
End Sub
'以上语句是必ȝQ将原本的对象作了简化处理,q在两个基本函数中作了处?br />
Public Function ConnectDB() As Variant
ConnectDB = "driver={Microsoft Access Driver (*.mdb)};uid=;pwd=123;DBQ="
End Function
'上面q个函数是处理前半部分字W串的,直接q回q个字符串的内容

'另外定义下面q个函数来处理后半部分内?br /> Public Function DBPath() As Variant
DBPath = sr.MapPath("DB.asp")
End Function
'注意上面使用的是srQ不要用成Server?br />
C关键的一步,l这个工E添?Microsoft Active Server Pages ObjectContext Object Library" ?Reference
dҎQ选择菜单中的"Project"->"Reference",在打开的对话框里选择?br /> 对了Q还要选择?microsoft activeX data objects 2.6 library"

q行完以上操作,我们可以编译生成DLL了,Q别忘了前面的改工程名和Ҏ名)

准备好数据库文gDB.asp (由DB.mdb更改后缀而成Q密?23)

下面是调用装的连接数据库的asp文g代码Q?

׃是自己创建的DLLQ把它拷贝到相应的目录后Q必L册才能用?br /> 注册的方法,?#8220;q行”中执行:
Regsvr32.exe dllname.dll

取消q个DLL的注册的Ҏ是:Regsvr32.exe /u dllname.dll

注册完毕Q我们的工作基本上就做完了,现在我们可以使用q样的封装方法连接具有针Ҏ的数据库了?br />
不过有一炚w要特别注意的是:
׃
Dim ConDB
set ConDB=Server.CreateObject("ConDBDLL.Conn")
'ConDB是创徏的DLL对象
q是在ASP中创建的对象Q包括ProConnQ那么我们在M使用刎ͼ引用QProConn.asp的其他ASP文g中记得释放这两个对象Q?br /> ProConn.close
set ProConn=nothing
set ConDB=Nothing
否则pȝ会由于对象没有释放,而变得越来越不堪重负?br />
关于q个装ASP代码q接Access数据库的ҎQ我惛_全适用其他数据库的q接Ҏ?br />

再例如,下面的封装的例子Q?br />
首先要申明变量:

Private WenScriptingContext As ScriptingContext
Private WenApplication As Application
Private WenRequest As Request
Private WenResponse As Response
Private WenServer As Server
Private WenSession As Session

Z在WenConnectioncM使用ASP的内建对?必须在此cM写一个OnStartPage子函数。那是因为无Z么时候用戯问一个带有本lg的ASP文g,IIS׃把ScriptingContext传送给我们的对象请我们使用。这个ScriptingContext包括了全部的ASPҎ和属性,q得我们有能力讉K所有ASP的对象?br />
Public Sub OnStartPage (PassedScriptingContext As ScriptingContext)
Set WenScriptingContext = PassedScriptingContext
Set WenApplication = WenScriptingContext.Application
Set WenRequest = WenScriptingContext.Request
Set WenResponse = WenScriptingContext.Response
Set WenServer = WenScriptingContext.Server
Set WenSession = WenScriptingContext.Session
End Sub

我们既然用OnStartPage函数来创建对象,那么我们q里qOnEndPage子函数来释放对象Q?br />
Public Sub OnEndPage()
Set WenScriptingContext = Nothing
Set WenApplication = Nothing
Set WenRequest = Nothing
Set WenResponse = Nothing
Set WenServer = Nothing
Set WenSession = Nothing
End Sub

接下来定义两个函数RsResult()和DataSource()Q?br />
Public Function Rs(strsql As String) As Recordset
Dim oConn As Connection
Dim oRs As Recordset
Dim strconnstring As String
strconnstring = "driver={sql server};server=ServerName;uid=sa;pwd=;" & _
"database=DataBaseName"
oConn.Open strconnstring
oRs.ActiveConnection = oConn
strsql="Select * From tableName"
oRs.Open strsql, oConn, 1, 3
Set Rs = oRs
End Function

Public Function DataSourceConnection() As Variant
DataSourceConnection = "driver={sql server};server=ServerName;uid=sa;pwd=;database=DataBaseName"
End Function

三?存工E名为WenADODB.vbp和保存类名ؓWenConnection.clsQ然后点?#8220;文g”?gt;“生成WenADODB.DLL”~译成动态连接库文g。VB在编译好动态连接库文g的同时也该lg注册到注册表里了Q要是想在另外一台机器上注册该组件的话,L以下指o注册或反注册Q?br />
Regsvr32 x:\路径\WenADODB.dll x:\路径\为WenADODB.dll文g存放的盘W和路径

Regsvr32 /u x:\路径\WenADODB.dll 参数U为反注册

四?在ASP文g中调用WenADODB.dlllg的例子?br />
<%

Set Conn=Server.CreateObject("WenADODB.WenConnection") ‘调用lg创徏对象实例
objConn=Conn.DataSourceConnection()
application("strconn")=objConn

set Rs=Server.CreateObject("ADODB.Recordset")
sql="select * from TableName order by ID DESC"
Rs.open sql,application("strconn"),1,3
%>
<Table align="center" border="1">
<%
if Rs.Bof and Rs.Eof then
Response.Write "暂时q没有Q何数据?
else
Do while not Rs.Eof
%>
<tr width=100%>
<td width=50%><%=Rs("Field1")%></td><td width=50%><%=Rs("Field2")%></td>
</tr>
<%
Rs.MoveNext
Loop
end if
Rs.Close;Set Rs=Nothing
%>
</Table>

五?结

我们q里只是~写了一个连接数据库的简单的动态连接库文gQ利用VB的强大组件编写功能还可以写出功能更加强大跟齐全的lgQ来完成更加实用的Q?

关键?如何把ASP~写成DLL

q篇文章主要是把ASP代码变成lg,开发者不仅是加快了ASP的速度,而且也能保护自己的代?
下面,我们会来~写一个非常简单的lg,重点是知道怎样开发DLLlg,而不是其复杂的代?q些都要靠你们自׃后的努力?

服务器端lg

首先,服务器端的组件要有别于客L的组?客户端的lg是通过|络传输,依靠HTML来v作用.而且只能在IE上有?但是服务器端的组件是q行在服务器?它在服务器上执行各种操作.因此,所有的览器都能n?它依靠的是服务器而不是浏览器.

当IIS被请求执行一个ASPE序,它首先会在ASP文g中找到?%>标签之间的代?q且执行?也可以是〈scriptrunat=server>?script>之间的代?.如果q个ASPE序在先前被调用q?那么它就会用内存中的~译q的E序来向用户q回HTML代码,如果没有,那么它就重新~译.q里ASP比CGI多一炚w度优势,因ؓCGI是每一个请求都使用一个线E?q样大大消耗了服务器的资源.

想不想你写的E序自己p在IISq行!?!现在你就行了!使用VB5(当然现在是VB6?,你就能徏立DynamicLinkedLibraries(DLL文g),它能在IIS上直接运?如果有asp文g来请求的?.

pȝ和Y件的要求

你需要一?2位的操作pȝ来运行ASP.当然你也得安装IIS或PWS.我们下面的程序是在windows95+PWS+VB5的环境下开发的.

我们开始吧

启动你的VB,选择ActiveX图标.q个图标可以在新建工E找?VB会提供一个默认的工程?project1)和类?class1).我们会将q两个名字都Ҏ.在改名之?请首先确认我们拥有MicrosoftActiveServerPagesObjectLibrary,它在我们的程序非常有?从菜单中选择"工程",然后在其中选择"引用",׃出现"引用"H口
从中选择MicrosoftActiveServerPagesObjectLibrary.

l工E和cd?br />
现在我们来根据自q爱好来ؓproject1和class1来命名吧!l它们命名也是很重要?我们以后会用q个工程名和cd来创个组件的实例!后面详细介绍.

如何改名,我就不想多说?
我们的工E名改ؓExmaple,cd为Helloword

怎样使用工程和类

现在我们有了我们自己的工E?Example1)和类?HelloWorld).以后我们׃在ASP代码中用它们的名字来引用这个组?在ASP中我们就q样引用,如下:

SetObjReference=Server.CreateObject("ProjectName.ClassName")

对于我们工程的引用就?
SetObjReference=Server.CreateObject("Example1.HelloWorld")
现在我们p用ObjReference来调用我们在lg中所创徏的函?子程?下面我们会来写一个SayHello的子E序,我们执行它的代码如下:


?
SetObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>


Z在HellowordcM使用ASP的方?你必d此类中写一个OnStartPage
子函?如下:


PublicSubOnStartPage(PassedScriptingContextAsScriptingContext)
SetMyScriptingContext=PassedScriptingContext
EndSub



现在,无论什么时候用戯问一个带有本lg的ASP文g,IIS׃把ScriptingContext传送给我们的对象请我们使用.q个ScriptingContext包括了全部的ASPҎ和属?实现?q得我们有能力讉K所有ASP的对?看下面的代码:


PublicSubOnStartPage(PassedScriptingContextAsScriptingContext)
SetMyScriptingContext=PassedScriptingContext
SetMyApplication=MyScriptingContext.Application
SetMyRequest=MyScriptingContext.Request
SetMyResponse=MyScriptingContext.Response
SetMyServer=MyScriptingContext.Server
SetMySession=MyScriptingContext.Session
EndSub


以后我们p用在VB中用MyApplication来代替ASP中的Application,同理可以代替Request,Server.....,不过我们来是要在OnStartPage之前来申明这些变?


PrivateMyScriptingContextAsScriptingContext
PrivateMyApplicationAsApplication
PrivateMyRequestAsRequest
PrivateMyResponseAsResponse
PrivateMyServerAsServer
PrivateMySessionAsSession



使用ASP的对?br />
我们的变量现在就能像标准的ASP对象来用了!比如,我们l常在ASP中用Request.form()来收集提交表单的数据.现在我们在我们的VB中实现这个功?代码如下:

用ASP中实?
?
MyTempVariable=Request.Form("userName")
Response.Write("youentered"&MyTempVariable&"asyourusername")
%>


在VB中实?


MyTempVariable=MyRequest.Form("userName")
MyResponse.Write("youentered"&MyTempVariable&"asyourusername")



通过使用MyResponse来代替Response,我们能够使用所有Response的方?当然,MyResponseq个名字可以随便来取,你甚臛_以就取Response.
另一件我们得注意的是,我们得在我们的徏立的cM,写上OnEndPage子函?q个OnStartPage是相反的!OnStartPage是创建对?OnEndPage是消毁对?



PublicSubOnEndPage()
SetMyScriptingContext=Nothing
SetMyApplication=Nothing
SetMyRequest=Nothing
SetMyResponse=Nothing
SetMyServer=Nothing
SetMySession=Nothing
EndSub



SayHelloҎ

我们来徏立一个子函数,用于昄"HolleWorld".q个SayHelloҎ只是HelloWorldq个cM一个子函数,我们以后会在ASP中用以下的显C个方?br />

?
SetObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>



SayHello的程?很简单的!

PublicSubSayHello()
MyResponse.Write("HelloWorld")
EndSub



现在一个小型的lg~写完成,剩下的工作就是编译这个组??工程"菜单中保存它,取什么名字都可以,我们用Exmaple1.vbp?然后q在菜单中选择"makeexmaple1.dll",其~译成DLL文g.一个组件就真正完成?


注意,~译了此lg那么你就得先把你的PWSx,然后再编译此lg.否则VB׃告诉你些lg在用中.

在ASP中用我们的自己的组?

当你更正了在~译中的错误,成功地编译了example1q个工程,现在你就得拿Z最喜欢的HTML~辑器来写下下面的语?保存为ASP文g.


〈HTML>
〈HEAD>
〈TITLE>Example1?TITLE>
?HEAD>

〈BODY>

?
SetObjReference=Server.CreateObject("Example1.HelloWorld")
ObjReference.SayHello
%>

?BODY>
?HTML>

q行后即可看到结?

HelloWorld

注册lg

如果你想和你的朋?d分n你的lg,那么你就得在你的pȝ上注册你的组?我们一般用Regsvr32.exe来注册组?注册后你的组件会出现在Win95/Win98的windows/system目录?下面是一个注册的例子:

Regsvr32.exeC:/wwwroot/Example1/Example1.dll


在你的系l中,VB会自动给你注?所以你很少用到Regsvr32.exe

q里只是写了一个非常小的组?你可以写好自q更大的组?而且q可以用VB中的很多控g.


附录Q徏立注册DLL和反注册DLL文g的快h?br /> 有的E序员经常要注册或者反注册自己写的dll文gQ加一个快h式会减少自己的工作量Q?br />
Windows Registry Editor Version 5.00


[HKEY_CLASSES_ROOT\dllfile\shell]


[HKEY_CLASSES_ROOT\dllfile\shell\register]


[HKEY_CLASSES_ROOT\dllfile\shell\register\command]

@="regsvr32 %1"


[HKEY_CLASSES_ROOT\dllfile\shell\Unregister]

"Command"="regsvr32 %1 /u"


[HKEY_CLASSES_ROOT\dllfile\shell\Unregister\command]

@="regsvr32 %1 /u"

当我们需要注册或者反注册dllӞ只要在该dll文g上按下鼠标右键即可!



附录注册和注销dll文g的方法:
一个快速注?DLL ?OCX 的方?
有时候我们在 VB 中要引用某一?DLL ?OCX Ӟ会出现文件未注册的讯息,q时Q我们可以用h工注册的ҎQ也是直接在命令列中?regsvr32.exe 来做Q做法如下:

文g注册QC:\Windows\System\Regsvr32.exe C:\Windows\System\Test.ocx
取消注册QC:\Windows\System\Regsvr32.exe /u C:\Windows\System\Test.ocx

q些动作我们也可以直接写到程序中Q?Shell 来执行,但是我现在要说的Q都不是上面提到的方法!



1、在资源理器中扑ֈ C:\Windows\System\Regsvr32.exe q【复制?( 按鼠标右键选复?)
2、将目录Ud C:\Windows\SendTo 后,执行【脓上快h式?( 按鼠标右键选脓上快h?)
3、将快捷方式名称Ҏ【REGISTER?br /> 4、OK

现在Q如果您x某一个文件做注册动作Q例如:C:\Windows\System\Test.ocxQ您只要打开资源理器,扑ֈ C:\Windows\System\Test.ocxQ按鼠标右键选【传送到】【REGISTER】即可完成注册动作了Q?br />
注:有一个地方要注意的是QRegsvr32.exe 只能注册 32 位的文gQ如果要用它来注?16 位的文gQ会有错误讯息生?


附录 某些dll文g的功能:
一、轻松修复IE览?br />
  很多l常上网的朋友都有过 q样的遭遇:IE不能打开新的H口Q用鼠标点击链接也没有M反应。这旉装IE一般能解决问题。其实不必这么麻烦,使用Regsvr32命o可以轻松搞定?br />
  ?#8220;开?#8594;q行”中键?#8220;regsvr32 actxprxy.dll”命oQ点?#8220;定”按钮Q这时会弹出一个信息对话框“DllRegisterServer in actxprxy.dll succeeded”Q点?#8220;定”Q然后再?#8220;开?#8594;q行”中键?#8220;regsvr32 shdocvw.dll”命oQ单?#8220;定”卛_。重新启动后IE已经被轻松修复了?br />
二、解决Windows无法在线升的问?br />
  Windows的漏z很多,每隔一D|间就需要?#8220;Windows Update”升E序q行在线升Q不q?#8220;Windows Update”l常出现无法使用的情况,q时Q我们可以用Regsvr32来解册个问题?br />
  ?#8220;开?#8594;q行”中键?#8220;regsvr32 wupdinfo.dll”Q点?#8220;定”按钮Q这样在pȝ中就重新注册?#8220;Windows Update”lgQ重新启动后问题已经解决?br />
三、防范网l脚本病毒有新招

  |络脚本病毒嵌在|页中,上网时在不知不觉中机器就会感染上q种病毒。笔者认为单U用杀毒Y件ƈ不能有效地防范这些脚本病毒,必须从病毒传播的机理入手。网l脚本病毒的复制、传播都M开FSO对象QFile System ObjectQ文件系l对象)Q因此禁用FSO对象p有效地控制脚本病毒的传播。操作方法很单:

  ?#8220;开?#8594;q行”中键?#8220;regsvr32 /u scrrun.dll”可以禁用FSO对象Q如果需要用FSO对象Q键?#8220;regsvr32 scrrun.dll”命o卛_?br />
四、卸载Win XP自带?#8220;鸡肋”功能

  Win XP以功能强大而著Uͼ但有些功能却常常令h?#8220;鸡肋”之感Q比如Win XP自带的ZIP功能和图片预览功能,不仅占用了系l资源,功能也远不如W三方Y件强大。其实用Regsvr32命o可以很容易地卸蝲q些功能?br />
  ?#8220;开?#8594;q行”中键?#8220;regsvr32 /u zipfldr.dll”Q单?#8220;定”按钮Q弹出卸载成功信息框后就完成了ZIP功能的卸载;要恢复ZIP功能Q键?#8220;regsvr32 zipfldr.dll”卛_。同P卸蝲囄预览功能也很单,?#8220;开?#8594;q行”中键?#8220;regsvr32 /u thumbvw.dll”卛_Q如果要恢复该功能,只须键入“regsvr32 thumbvw.dll”?br />
五、让WMP播放器支持RM格式

  很多朋友喜欢用Windows Media PlayerQ以下简UWMPQ播攑֙Q但是它不支持RM格式Q难道非得安装其它播放Y件吗?W者有办法?br />
  以Win XPZQ首先下载一个RM格式插gQ解压羃后得C个文件夹Q?ReleaseQ用于Windows 9xQ和Release Unicode Q用于Windows 2000/XPQ;Release Unicode文g夹下的RealMediaSplitter.ax文g拯?#8220;pȝ盘符\WINDOWS\System32\”目录下;?#8220;开?#8594;q行”中键?#8220;regsvr32 RealMediaSplitter.ax”Q点?#8220;定”卛_。接着下蝲解码器,如Real AlternativeQ安装后p用WMP播放RM格式的媄x件了?br />
附录Q注册和反注册dll文g的批处理



dll.bat
------------------------------
@Regsvr32.exe AdminDLL.dll


un.bat
-------------------------------------
@Regsvr32.exe /u AdminDLL.dll


Eric_jiang 2010-06-01 12:47 发表评论
]]>
Visual Basic高效~程Q改qVB/COM+应用E序http://www.tkk7.com/jjshcc/archive/2010/05/31/322380.htmlEric_jiangEric_jiangMon, 31 May 2010 11:03:00 GMThttp://www.tkk7.com/jjshcc/archive/2010/05/31/322380.htmlhttp://www.tkk7.com/jjshcc/comments/322380.htmlhttp://www.tkk7.com/jjshcc/archive/2010/05/31/322380.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/322380.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/322380.html
译者序
原书?/div>
致谢
W??由随意编E{变ؓ遵@软g工程原则
1.1 规则1-1Q最大限度地发挥VB~译期类型检查的潜能
1.1.1 在每个模块的端使用Option Explicit语句
1.1.2 避免不经意地使用Variant数据cd
1.1.3 在VB IDE中运行时Q用Start With Full Compile命o
1.2 规则1-2Q用Debug.Assert昑ּ声明假设
1.3 规则1-3Q编译期条g不同Ӟ考虑使用#If语句
1.4 规则1-4Q抛出错误以提示异常
1.5 规则1-5Q有效的错误处理Q局部捕P全局处理
1.6 规则1-6Q了解类型和cȝ区别
1.7 规则1-7Q采用面向对象的设计Ҏ
1.8 规则1-8Q推荐采用用戯定义cd而不是类来定义值类?/div>
1.9 规则1-9Q一般Q务的自动?/div>

W??设计、构建和使用ZCOM的组?/div>
2.1 规则2-1Q从接口的角度进行思?/div>
2.2 规则2-2Q用自定义接口
2.3 规则2-3Q最好用IDL独立定义自定义接?/div>
2.4 规则2-4Q用自定义回调避免Zcȝ事g的局限?/div>
2.5 规则2-5Q要谨慎保持兼容?/div>
2.5.1 脚本客户端程?/div>
2.5.2 已编译的客户端程?/div>
2.5.3 版本兼容的接?/div>
2.6 规则2-6Q选用正确的COMȀzL?/div>
2.6.1 COMȀz?/div>
2.6.2 New操作W?/div>
2.6.3 CreateObject
2.6.4 GetObject
2.6.5 GetObjectContext.CreateInstance和Server.CreateObject
2.6.6 性能考虑
2.7 规则2-7Q慎重用Class_Terminate
2.8 规则2-8Q根据会话而不是实体来建模
2.9 规则2-9Q除了简单的规模应用系l,避免使用ActiveX可执行程?/div>

W??MTS、COM+和VB-中间?/div>
3.1 规则3-1Q理解MTS和COM+应用E序设计
3.2 规则3-2Q不要在MTS或COM+中用单?/div>
3.3 规则3-3Q了解New、CreateObject及GetObjectContext.CreateInstance的适用场合
3.3.1 MTS和Windows NT4
3.3.2 COM+和Windows 2000
3.3.3 使用New遇到的更多问?/div>
3.4 规则3-4Q理解用SetComplete的真实目?/div>
3.5 规则3-5Q对事务自动中止方式的思?/div>
3.6 规则3-6Q不要重新设计DBMS
3.7 规则3-7Q不必配|所有组?/div>
3.8 规则3-8Q避免将以后会后悔的东西~译qDLL
3.9 规则3-9Q将代码从MTS向COM+UL的实跉|?/div>
3.9.1 在COM+中不再需要调用GetObjectContext.CreateInstance
3.9.2 Me作ؓ参数传递时Q不再需要调用SafeRef
3.9.3 当事务中的次要对象返回错误时要小心;可能会获得Ş?Method~of Object Failed?的错误信息,而不是所指定的在错误传播之前q回的丰富错误信?/div>
3.9.4 使用ObjectConstruct字符?/div>
3.9.5 在COM+应用E序中进行进E内调用时执行声明性安全校?/div>
3.9.6 在COM+中刷新组件命令不再是必需?/div>
3.9.7 在安装Windows 2000以前版本的计机上,COM+导出的客户安装程序需要Microsoft Installer(MSI)
3.10 规则3-10Q编写运行于MTS和COM+中的代码的实跉|?/div>
3.10.1 创徏对象时坚持用GetObjectContext.CreateInstance
3.10.2 使用可编E控制的安全措施对访问权限进行校验,而不要依赖于声明性安全措?/div>
3.10.3 事务性方法调用失败时Q在ơ要对象中最好用DisableCommit而不是SetAbort
3.10.4 不要无意中将DLL安装到用戯机?/div>
3.10.5 坚持使用ObjectContext接口
3.10.6 分发对象引用时l用SafeRef

W??Web和VB
4.1 规则4-1Q理解IIS体系l构
4.1.1 IIS的内部结?/div>
4.1.2 提高服务器的可扩~?/div>
4.2 规则4-2Q管理应用程序状态以辑ֈ最高效?/div>
4.2.1 使用BAS模块数据
4.2.2 使用SPM
4.2.3 使用ASP Application对象
4.2.4 权衡各种Ҏ的利?/div>
4.3 规则4-3Q管理会话状态以辑ֈ最大可扩羃?/div>
4.3.1 会话限制在单机?/div>
4.3.2 在客h上存储会话信?/div>
4.3.3 使用cookie
4.3.4 QueryString变量
4.3.5 隐藏的表单域
4.3.6 在数据库中存储状态信?/div>
4.4 规则4-4Q理解DCOM和HTTP的区?/div>
4.4.1 使用RPC和DCOMq行通信
4.4.2 使用HTTP通信
4.4.3 在分布式应用E序中不使用ASP
4.4.4 使用HTTP的不利方?/div>
4.5 规则4-5Qؓ脚本环境Q如ASPQ编写COMlg
4.5.1 创徏默认接口
4.5.2 向可~写脚本的对象传递参?/div>
4.5.3 关于自定义接?/div>
4.5.4 解决Ҏ
4.6 规则4-6Q理解COM对象与ASP之间如何交互
4.6.1 ASP内置对象
4.6.2 VB COM对象和STA
4.6.3 充分利用STAU程模型
4.6.4 在VB中如何访问ASP内置对象
4.6.5 直接讉KASP内置对象的好?/div>
4.6.6 使用ASP内置对象的弊?/div>
4.7 规则4-7Q用XML代替专有数据传输格式
4.8 规则4-8Q慎重考虑表示和业务逻辑的关p?/div>
4.8.1 使用MTSlg
4.8.2 使用WebClasses
4.9 规则4-9Q从数据到表C的XSLT实现
4.9.1 XSLT的概?/div>
4.9.2 XSLTҎ的好?/div>
4.9.3 使用q程Ҏ转换数据?/div>
4.9.4 利用XSLT的方法{换数据集
4.9.5 XSLT的缺?/div>

W??VB高效数据讉K
5.1 规则5-1Q高效访问的基础Q往q开销、SQL语句和数据提供?/div>
5.1.1 使往q开销最?/div>
5.1.2 定发送SQL查询的最好方?/div>
5.1.3 选择合适的提供?/div>
5.2 规则5-2Q不要过分封装数据访?/div>
5.2.1 Ua的面向对象技?/div>
5.2.2 q求UaOOD效果的不之?/div>
5.2.3 解决办法Q用存储过E?/div>
5.2.4 如果需要多个数据库服务器该如何处理
5.3 规则5-3Q切莫将数据库连接当代数据成?/div>
5.4 规则5-4Q死锁是常见?防错性程序开?/div>
5.4.1 锁定
5.4.2 串行化事务和锁管理器
5.4.3 死锁
5.4.4 在应用程序设计中量减小死锁的几?/div>
5.4.5 事务运行时间降到最?/div>
5.4.6 锁定时间降x?nbsp;
5.5 规则5-5Q尽可能使用firehose游标
5.6 规则5-6:作出正确的数据搜索决{(避免滥用SelectSingleNodeQ?/div>
5.6.1 Seek-and-Findlg
5.6.2 了解解决具体问题需选用哪一U方?/div>


Eric_jiang 2010-05-31 19:03 发表评论
]]>使用application提高ASP数据昄效率http://www.tkk7.com/jjshcc/archive/2010/05/27/321999.htmlEric_jiangEric_jiangThu, 27 May 2010 03:44:00 GMThttp://www.tkk7.com/jjshcc/archive/2010/05/27/321999.htmlhttp://www.tkk7.com/jjshcc/comments/321999.htmlhttp://www.tkk7.com/jjshcc/archive/2010/05/27/321999.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/321999.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/321999.html 所谓缓存其实就是在内存中开辟一个用来保存数据的I间.
使用~存你就不必屡次的拜访你保具有硬盘上的数据了Q由于这些数据我们希望每个用户都能看到成效一?考虑使用的是application对象,׃它是 一切拜访者的q的对?存储的消息和定义的事情能够ؓ一切者拜访者?q里要用asp内置对象application?
关于application:
2个办法[lock ?unlock],
2个集合[content ?staticobjects],
2个事情[开端的application_onstart ?application_end]
application变量不会׃用户的分开而消?一旦徏?不断{到|站关闭和程序卸载ؓ?正由于如?使用的时分要特别当心!,否则会占用内? (虚拟L提供商很不高兴了).
我们是把数据写入一个自定义的application里面,在制定的工夫dh?大致思A是q样.

实例演示.先徏立一个简单的数据?写个functiond一?写入一个dim变量temp?

E序代码
<%  Function DisplayRecords()
'q个函数本来l一个变量temp付上记蝲的?
Dim sql, conn, rs
'W合条g的sql语句
sql = "Select id, [szd_f], [szd_t] FROM admin"
'打开数据库连?
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ="&Server.MapPath("db.mdb")
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 1, 3
'当符合sq语句l的数据没有显现完毕时
If Not rs.EOF Then
'ltemp变量赋?
Dim temp
temp = "<table width=""90%"" align=""center"""
temp = temp & " border=""1"" bordercolor=""silver"""
temp = temp & " cellspacing=""2"" cellpadding=""0"">"
temp = temp & "<tr bgcolor=""#CCDDEE""><td width=""5%"""
temp = temp & ">ID</td><td>操作</td>"
temp = temp & "<td>数?lt;/td></tr>"
While Not rs.EOF
temp = temp & "<tr><td bgcolor=""#CCDDEE"">"
temp = temp & rs("ID") & "</td><td>" & rs("szd_f")
temp = temp & "</td><td>" & rs("szd_t")
temp = temp & "</td></tr>"
rs.MoveNext
Wend
temp = temp & "</table>"
'temp赋值完?把它再前往l函?
DisplayRecords = temp
Else
DisplayRecords = "Data Not Available."
End If
'开释内?
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Function %>

ok,上面的函数改造完?调用的时分就是DisplayRecords.
上面是application大显本领?

E序代码
<%'该函数是写入~存
Function DisplayCachedRecords(Secs)
Dim retVal, datVal, temp1
'Secs是每ơ要h数据的工? retVal是数?datVal是剩余工?
retVal = Application("cache_demo") '获得appliction的?
datVal = Application("cache_demo_date") '获得appliction的?
'判别datVal 的?也就是要计算工夫q来了没
If datVal = "" Then
'假如是空,datValgؓ当前工夫按秒加上secs定义的工?
datVal = DateAdd("s",Secs,Now)
End If
'temp1是判别当前工夫和datVal的秒?
temp1 = DateDiff("s", Now, datVal)
'假如retVal已经是上面函数的前往g工夫大于0
If temp1 > 0 And retVal <> "" Then
'本函数前往记蝲?
DisplayCachedRecords = retVal
Response.Write "<b><font color=""green"">利用~存d数据"
Response.Write " ... (" & temp1 & " U剩?</font></b>"
Response.Write "<br><br>"
Else
'retVal 是空的话,p予DisplayRecords的值给变量temp2
Dim temp2
temp2 = DisplayRecords()
'保存到Application.------------------>重点
Application.Lock
Application("cache_demo") = temp2
Application("cache_demo_date") = DateAdd("s",Secs,Now)
Application.UnLock
DisplayCachedRecords = temp2
' q里随便写上了记载的~存的过来工?l对ȝ数倒差 :
Response.Write "<b><font color=""red"">h~存昄 ..."
Response.Write "</font></b><br><br>"
End If
End Function
%>


说明完毕.

调用办法:<%=DisplayCachedRecords(20)%>

Eric_jiang 2010-05-27 11:44 发表评论
]]>
Microsoft.XMLHttplg的属性方?/title><link>http://www.tkk7.com/jjshcc/archive/2010/05/26/321934.html</link><dc:creator>Eric_jiang</dc:creator><author>Eric_jiang</author><pubDate>Wed, 26 May 2010 09:18:00 GMT</pubDate><guid>http://www.tkk7.com/jjshcc/archive/2010/05/26/321934.html</guid><wfw:comment>http://www.tkk7.com/jjshcc/comments/321934.html</wfw:comment><comments>http://www.tkk7.com/jjshcc/archive/2010/05/26/321934.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/jjshcc/comments/commentRss/321934.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/jjshcc/services/trackbacks/321934.html</trackback:ping><description><![CDATA[<p>一、用步骤:<br />                   1、创建XMLHTTP对象 //需MSXML4.0支持<br />                   2、打开与服务端的连接,同时定义指o发送方式,服务|页(URL)和请求权限等。客L通过Open命o打开与服务端的服务网늚q接。与?br />                   通HTTP指o传送一P可以?GET"Ҏ?POST"Ҏ指向服务端的服务|页?br />                   3、发送指令?br />                   4、等待ƈ接收服务端返回的处理l果?br />                   5、释放XMLHTTP对象</p> <p>                  二、XMLHTTPҎQ?br />                   OpenQ?bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword Q?br />                   bstrMethodQ?nbsp;  数据传送方式,即GET或POST?br />                   bstrUrlQ?nbsp;     服务|页的URL?br />                   varAsyncQ?nbsp;   <br />                   是否同步执行。缺省ؓTrueQ即同步执行Q但只能在DOM中实施同步执行。用中一般将其置为FalseQ即异步执行?br />                   bstrUserQ?nbsp;    用户名,可省略?br />                   bstrPasswordQ用户口令,可省略?/p> <p>                  SendQ?varBody Q?br />                   varBodyQ指令集。可以是XML格式数据Q也可以是字W串Q流Q或者一个无W号整数数组。也可以省略Q让指o通过OpenҎ的URL参数代入?/p> <p>                  setRequestHeaderQ?bstrHeader, bstrvalue Q?br />                   bstrHeaderQHTTP ?header)<br />                   bstrvalueQ?HTTP ?header)的?br />                   如果OpenҎ定义为POSTQ可以定义表单方式上传:<br />                   xmlhttp.setRequestHeaderQ?"Content-Type", <br />                   "application/x-www-form-urlencoded"Q?/p> <p>                  三、XMLHTTP属性:<br />                   onreadystatechangeQ在同步执行方式下获得返回结果的事g句柄。只能在DOM中调用?br />                   responseBodyQ?nbsp;    l果q回为无W号整数数组?br />                   responseStreamQ?nbsp;   l果q回为IStream?br />                   responseText Q?nbsp;    l果q回为字W串?br />                   responseXMLQ?nbsp;    l果q回为XML格式数据?br />                   具体的用方?br />                   创徏XMLHTTP对象的语句如下:</p> <p><br />                         Set objXML = CreateObject("Msxml2.XMLHTTP") ?br />                         Set objXML = CreateObject("Microsoft.XMLHTTP")<br />                         'Or for version 3.0 of XMLHTTP, use:<br />                         'Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")</p> <p> </p> <p>                  对象创徏后调用OpenҎ对Request对象q行初始化,语法格式为:</p> <p><br />                         objXML.open http-method,url,async,userID,password</p> <p> </p> <p><br />                   OpenҎ中包含了5个参敎ͼ前三个是必要的,后两个是可选的(在服务器需要进行n份验证时提供)。参数的含义如下所C:</p> <p>                  http-methodQHTTP的通信方式Q比如GET或是POST<br />                   urlQ接收XML数据的服务器的URL地址。通常在URL中要指明ASP或CGIE序<br />                   asyncQ一个布标识,说明h是否为异步的。如果是异步通信方式(true)Q客h׃{待服务器的响应Q如果是同步方式(false)Q客hp{到服务器返回消息后才去执行其他操作<br />                   userIDQ用户IDQ用于服务器w䆾验证<br />                   passwordQ用户密码,用于服务器n份验?/p> <p>                  XMLHTTP对象的SendҎ</p> <p>                  用OpenҎ对Request对象q行初始化后Q调用SendҎ发送XML数据Q?/p> <p><br />                         objXML.send()</p> <p> </p> <p>                  SendҎ的参数类型是VariantQ可以是字符丌ӀDOM树或L数据?/p> <p>                  发送数据的方式分ؓ同步和异步两U。在异步方式下,数据包一旦发送完毕,q束Sendq程Q客h执行其他的操作;而在同步方式下,客户{到服务器返回确认消息后才结束Sendq程?/p> <p>                  XMLHTTP对象中的readyState属?/p> <p>                  其能够反映出服务器在处理h时的q展状况。客h的程序可以根据这个状态信息设|相应的事g处理Ҏ。属性值及其含义如下表所C:</p> <p><br />                         倹{ 说明<br />                         0   Response对象已经创徏Q但XML文档上蝲q程未l束<br />                         1   XML文档已经装蝲完毕<br />                         2   XML文档已经装蝲完毕Q正在处理中<br />                         3   部分XML文档已经解析<br />                         4   文档已经解析完毕Q客L可以接受q回消息</p> <p> </p> <p><br />                   客户机处理响应信息,客户机接收到q回消息后,q行单的处理Q基本上完成了C/S之间的一个交互周期?/p> <p>                  客户机接收响应是通过XMLHTTP对象的属性实现的Q?/p> <p>                  responseTextQ将q回消息作ؓ文本字符Ԍ<br />                   responseBodyQ将q回消息作ؓHTML文档内容Q?br />                   responseXMLQ将q回消息视ؓXML文档Q在服务器响应消息中含有XML数据时用;<br />                   responseStreamQ将q回消息视ؓStream对象</p> <p>                  以下是一个简单的例子Q类似新d?/p> <p><br />                         <%<br />                         Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP")<br />                         objXML.open "GET","http://www.alexa.com",false<br />                         objXML.send()<br />                         response.write(objXML.responseText)<br />                         %></p> <p> </p> <p><br />                   整个步骤很明显:建立、打开、发送和接受?br /> </p> <img src ="http://www.tkk7.com/jjshcc/aggbug/321934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jjshcc/" target="_blank">Eric_jiang</a> 2010-05-26 17:18 <a href="http://www.tkk7.com/jjshcc/archive/2010/05/26/321934.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP开发中?VBScript)cd学习http://www.tkk7.com/jjshcc/archive/2010/05/13/320777.htmlEric_jiangEric_jiangThu, 13 May 2010 02:07:00 GMThttp://www.tkk7.com/jjshcc/archive/2010/05/13/320777.htmlhttp://www.tkk7.com/jjshcc/comments/320777.htmlhttp://www.tkk7.com/jjshcc/archive/2010/05/13/320777.html#Feedback0http://www.tkk7.com/jjshcc/comments/commentRss/320777.htmlhttp://www.tkk7.com/jjshcc/services/trackbacks/320777.htmlSession本n是可以储存对象的Q它可以保存基本变量Q数l,自动化对?Automation Object){,但在储存自定义类的对象时会碰到问题?

如下面的代码Q?/p>

以下是引用片D:
<%
If isempty(Session("node")) Then Set Session("node")=New ListNode
Set n=Session("node")
Response.Write n.Content
%>
<%

If isempty(Session("node")) Then Set Session("node")=New ListNode

Set n=Session("node")

Response.Write n.Content

%>

q是上面的ListNodeq个c,q段代码意图在一个用户会话中只保留一个ListNode的对 象。所以在用户W一ơ访问该|页Ӟ会生成ListNode的一个对象,q保存在Session("node")?后面讉K该网|Q因? Session("node")不ؓIZQ所以不会生成一个新的对象,而是?Session("node")中取Z存的对象?/p>

理论上应该也会输?00Q但是问题来了,ASP一直会报错Q?/p>

Microsoft VBScript runtime error '800a01b6'

Object doesn't support this property or method: 'n.Content'

用n.Type也会出错。同L代码译成PHPQ运行却是可以通过的。ؓ什?

个h分析下来Q认为Session可以保存对象是没错,只是VBScript中类型{换的机制? 弱,而且没有昑ּ的强制类型{换供用户使用Q无法将 Session("node")正确转换为ListNodecd。因为是自定义的c,我们只能在每个页面中都出现类的定义语句,q样在ASP看来Q每ơ读 取这个页面时QListNodec都是一个新c,所以就不认得Session中的q个cȝ对象了?/p>

l论Q?/strong>量不要惛_用Session或Application来存储ASP中自定义cȝ对象。如? 实需要,可以考虑用COM来编写类Q然后在VBScript中用QSet Session("obj") = Server.CreateObject("YourApp.YourClass")来创Z个对象,然后卛_实现上面预想的功能了?/p>

Eric_jiang 2010-05-13 10:07 发表评论
]]>
վ֩ģ壺 Ʒһ߹ۿ | ޾Ʒþþþþò| 벻Ļ18| ޾Ʒ·һ߹ۿ| Ʒ޾Ʒպ| þԭavapp| 91ۺ| ˾Ʒŷ| aëƬѲȫ| hƵѹۿ| һ| Ļһþ| ޾Ʒþþþþþ| ŷպ | ҹҹˬŮ8888Ƶѹۿ| ޵Ƶվ| һ| AëƬA| av뾫Ʒվ| Ļ| igaoƵ| Ƶһ| ۺ| þþþ޾Ʒ| ߾ƷAAVV| 99߹߲ѹۿ| ձ˻ʿxxxxƵ| AV˿߹ۿ| ĻþþƷ| WWWƵ߹ۿ| һëƬ߲Ƶ| ŷ޹ۺ߹ۿ| ޾ƷŮþþþ9999| ԻȫƵۿ | A벥ëƬһ avavavëƬ | av뾫Ʒ4 | ʮ˽Ļվ| Ʒþ8xѹۿ| ޾Ʒר2| ˬĻ| 91Ʒȫѹۿ|