Nov
26
ASP 本身不支持动态包含文件,现在的动态包含是通过 FSO 把被包含的文件合并到主文件里再运行。以下也有把形如
301 Moved Permanently
nginx
的普通包含文件方式称作“传统引用”,用函数实现的动态包含文件称作“动态引用”。常见的程序如下:
Function include(filename)
Dim re,content,fso,f,aspStart,aspEnd
set fso=CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(server.mappath(filename))
content=f.ReadAll
f.close
set f=nothing
set fso=nothing
set re=new RegExp
re.pattern="^\s*="
aspEnd=1
aspStart=inStr(aspEnd,content,"<%")+2
do while aspStart>aspEnd+1
Response.write Mid(content,aspEnd,aspStart-aspEnd-2)
aspEnd=inStr(aspStart,content,"%\>")+2
Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write "))
aspStart=inStr(aspEnd,content,"<%")+2
loop
Response.write Mid(content,aspEnd)
set re=nothing
End Function
使用范例:include("youinc.asp")
但这处函数在处理补包含的文件中还有包含文件时就不灵了。我在以上函数的基础上改进出来如下函数,在被包含文件中还有普通的包含文件
301 Moved Permanently
nginx
也可正常运行。
Function includeconvert(oRegExp, strFilename, strBlock)
Dim incStart, incEnd, match, oMatches, str, code
'用提取ASP代码的相同方式提取出include 部分的文件名,其余部分原样输出
code = ""
incEnd = 1
incStart = InStr(incEnd,strBlock,"<--#,incStart是从")+3
oregExp.pattern="(\w+)=""([^""]+)""" '匹配 file="filename.ext" 或 virtual="virtualname.ext",捕捉类型及文件名两个子串
Set oMatches = oregExp.Execute(Mid(strBlock,incStart,incEnd-incStart-3))
Set match = oMatches(0) '确定只有一组捕捉时,要得到这一组匹配的子串,可以这样做,省去用 For Each match In oMatches …… Next
code = code & include(Mid(strFilename, 1, InStrRev(strFilename, "/")) & match.SubMatches(1)) 'Mid(filename, 1, InStrRev(filename, "/")) 是在被引用的子文件名有路径时,把路径提取出来,加在子文件中传统引用的文件名前面,以找到正确的打开文件路径,因为动态引用时的文件路径是相对主文件而言的。要第二个匹配子串用SubMatches(1)
incStart = InStr(incEnd,strBlock," 的普通包含文件方式称作“传统引用”,用函数实现的动态包含文件称作“动态引用”。常见的程序如下:
Function include(filename)
Dim re,content,fso,f,aspStart,aspEnd
set fso=CreateObject("Scripting.FileSystemObject")
301 Moved Permanently
的普通包含文件方式称作“传统引用”,用函数实现的动态包含文件称作“动态引用”。常见的程序如下:
Function include(filename)
Dim re,content,fso,f,aspStart,aspEnd
set fso=CreateObject("Scripting.FileSystemObject")
set f=fso.OpenTextFile(server.mappath(filename))
content=f.ReadAll
f.close
set f=nothing
set fso=nothing
set re=new RegExp
re.pattern="^\s*="
aspEnd=1
aspStart=inStr(aspEnd,content,"<%")+2
do while aspStart>aspEnd+1
Response.write Mid(content,aspEnd,aspStart-aspEnd-2)
aspEnd=inStr(aspStart,content,"%\>")+2
Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),"Response.Write "))
aspStart=inStr(aspEnd,content,"<%")+2
loop
Response.write Mid(content,aspEnd)
set re=nothing
End Function
使用范例:include("youinc.asp")
但这处函数在处理补包含的文件中还有包含文件时就不灵了。我在以上函数的基础上改进出来如下函数,在被包含文件中还有普通的包含文件
301 Moved Permanently
也可正常运行。
Function includeconvert(oRegExp, strFilename, strBlock)
Dim incStart, incEnd, match, oMatches, str, code
'用提取ASP代码的相同方式提取出include 部分的文件名,其余部分原样输出
code = ""
incEnd = 1
incStart = InStr(incEnd,strBlock,"<--#,incStart是从")+3
oregExp.pattern="(\w+)=""([^""]+)""" '匹配 file="filename.ext" 或 virtual="virtualname.ext",捕捉类型及文件名两个子串
Set oMatches = oregExp.Execute(Mid(strBlock,incStart,incEnd-incStart-3))
Set match = oMatches(0) '确定只有一组捕捉时,要得到这一组匹配的子串,可以这样做,省去用 For Each match In oMatches …… Next
code = code & include(Mid(strFilename, 1, InStrRev(strFilename, "/")) & match.SubMatches(1)) 'Mid(filename, 1, InStrRev(filename, "/")) 是在被引用的子文件名有路径时,把路径提取出来,加在子文件中传统引用的文件名前面,以找到正确的打开文件路径,因为动态引用时的文件路径是相对主文件而言的。要第二个匹配子串用SubMatches(1)
incStart = InStr(incEnd,strBlock," 的普通包含文件方式称作“传统引用”,用函数实现的动态包含文件称作“动态引用”。常见的程序如下:
Function include(filename)
Dim re,content,fso,f,aspStart,aspEnd
set fso=CreateObject("Scripting.FileSystemObject")
Nov
20
在后台处理数据时,前台页面同时计数显示Proess Bar
使用了layer来显示
用法:
1。引用
<script language="javascript" src="ShowProcessBar.js"></script>
2。在提交Button或<A>或<span> 加扩展属性
IsShowProcessBar="True"
文件ShowProcessBar.js如下
AddProcessbar();
var bwidth=0;
var swidth = document.all.waiting.clientWidth;
function CheckIsProcessBar(obj)
{
if (obj.IsShowProcessBar=="True")
{
return false;
}
else
{
return true;
}
}
function CheckClick(e)
{
if (e == 1)
{
if (bwidth<swidth*0.98){
bwidth += (swidth - bwidth) * 0.025;
if (document.all)document.sbar.width = bwidth;
else document.rating.clip.width = bwidth;
setTimeout('CheckClick(1);',150);
}
}
else
{
if(document.all)
{
if(document.all.waiting.style.visibility == 'visible')
{document.all.waiting.style.visibility = 'hidden';
bwidth = 1;}
whichIt = event.srcElement;
while (CheckIsProcessBar(whichIt))
{
whichIt = whichIt.parentElement;
if (whichIt == null)return true;
}
document.all.waiting.style.pixelTop = (document.body.offsetHeight - document.all.waiting.clientHeight) / 2 + document.body.scrollTop;
document.all.waiting.style.pixelLeft = (document.body.offsetWidth - document.all.waiting.clientWidth) / 2 + document.body.scrollLeft;
document.all.waiting.style.visibility = 'visible';
if(!bwidth)CheckClick(1);
bwidth = 1;
}
else
{
if(document.waiting.visibility == 'show')
{document.waiting.visibility = 'hide';
document.rating.visibility = 'hide';
bwidth = 1;}
if(e.target.href.toString() != '')
{
document.waiting.top = (window.innerHeight - document.waiting.clip.height) / 2 + self.pageYOffset;
document.waiting.left = (window.innerWidth - document.waiting.clip.width) / 2 + self.pageXOffset;
document.waiting.visibility = 'show';
document.rating.top = (window.innerHeight - document.waiting.clip.height) / 2 + self.pageYOffset+document.waiting.clip.height-10;
document.rating.left = (window.innerWidth - document.waiting.clip.width) / 2 + self.pageXOffset;
document.rating.visibility = 'show';
if(!bwidth)CheckClick(1);
bwidth = 1;
}
}
return true;
}
}
function AddProcessbar()
{
var Str=""
Str+= "<div id=waiting style=position:absolute;top:50px;left:100px;z-index:1;visibility:hidden >";
Str+= "<layer name=waiting visibility=visible zIndex=2 >"
Str+= "<table border=2 cellspacing=1 cellpadding=0 bordercolorlight=#FFFFFF bordercolordark=#C0C0C0 bgcolor=#E0E0E0>"
Str+= " <tr>"
Str+= " <td bgcolor=#E0E0E0 height=30px width=300px align=center>"
Str+= " <font color=black>系統正在處理中...</font>"
Str+= " </td>"
Str+= " </tr>"
Str+= " <tr>"
Str+= " <td bgcolor=#E0E0E0>"
Str+= " <img width=1 height=10 name=sbar style=background-color:#6699cc>"
Str+= " </td>"
Str+= " </tr>"
Str+= "</table> "
Str+= "</layer>"
Str+= "</div>"
document.write(Str)
if(document.all)document.onclick = CheckClick;
}
测试文件TestShowBar.HTML
<HTML>
<HEAD>
<script language="javascript" src="ShowProcessBar.js"></script>
</HEAD>
<BODY>
<A href="error.asp" IsShowProcessBar="True">A Href</a>
<BR>
<BR>
<span onclick="location.href='error.asp'" style="cursor:hand" IsShowProcessBar="True"><font color=blue>Span</font></span>
<BR>
<form action="error.asp">
<input type=Submit value="Submit">
<input type=button value="normal button" IsShowProcessBar="True">
</form>
<P IsShowProcessBar="True">AAAAAAAAAAAAA</P>
</BODY>
</HTML>
使用了layer来显示
用法:
1。引用
<script language="javascript" src="ShowProcessBar.js"></script>
2。在提交Button或<A>或<span> 加扩展属性
IsShowProcessBar="True"
文件ShowProcessBar.js如下
AddProcessbar();
var bwidth=0;
var swidth = document.all.waiting.clientWidth;
function CheckIsProcessBar(obj)
{
if (obj.IsShowProcessBar=="True")
{
return false;
}
else
{
return true;
}
}
function CheckClick(e)
{
if (e == 1)
{
if (bwidth<swidth*0.98){
bwidth += (swidth - bwidth) * 0.025;
if (document.all)document.sbar.width = bwidth;
else document.rating.clip.width = bwidth;
setTimeout('CheckClick(1);',150);
}
}
else
{
if(document.all)
{
if(document.all.waiting.style.visibility == 'visible')
{document.all.waiting.style.visibility = 'hidden';
bwidth = 1;}
whichIt = event.srcElement;
while (CheckIsProcessBar(whichIt))
{
whichIt = whichIt.parentElement;
if (whichIt == null)return true;
}
document.all.waiting.style.pixelTop = (document.body.offsetHeight - document.all.waiting.clientHeight) / 2 + document.body.scrollTop;
document.all.waiting.style.pixelLeft = (document.body.offsetWidth - document.all.waiting.clientWidth) / 2 + document.body.scrollLeft;
document.all.waiting.style.visibility = 'visible';
if(!bwidth)CheckClick(1);
bwidth = 1;
}
else
{
if(document.waiting.visibility == 'show')
{document.waiting.visibility = 'hide';
document.rating.visibility = 'hide';
bwidth = 1;}
if(e.target.href.toString() != '')
{
document.waiting.top = (window.innerHeight - document.waiting.clip.height) / 2 + self.pageYOffset;
document.waiting.left = (window.innerWidth - document.waiting.clip.width) / 2 + self.pageXOffset;
document.waiting.visibility = 'show';
document.rating.top = (window.innerHeight - document.waiting.clip.height) / 2 + self.pageYOffset+document.waiting.clip.height-10;
document.rating.left = (window.innerWidth - document.waiting.clip.width) / 2 + self.pageXOffset;
document.rating.visibility = 'show';
if(!bwidth)CheckClick(1);
bwidth = 1;
}
}
return true;
}
}
function AddProcessbar()
{
var Str=""
Str+= "<div id=waiting style=position:absolute;top:50px;left:100px;z-index:1;visibility:hidden >";
Str+= "<layer name=waiting visibility=visible zIndex=2 >"
Str+= "<table border=2 cellspacing=1 cellpadding=0 bordercolorlight=#FFFFFF bordercolordark=#C0C0C0 bgcolor=#E0E0E0>"
Str+= " <tr>"
Str+= " <td bgcolor=#E0E0E0 height=30px width=300px align=center>"
Str+= " <font color=black>系統正在處理中...</font>"
Str+= " </td>"
Str+= " </tr>"
Str+= " <tr>"
Str+= " <td bgcolor=#E0E0E0>"
Str+= " <img width=1 height=10 name=sbar style=background-color:#6699cc>"
Str+= " </td>"
Str+= " </tr>"
Str+= "</table> "
Str+= "</layer>"
Str+= "</div>"
document.write(Str)
if(document.all)document.onclick = CheckClick;
}
测试文件TestShowBar.HTML
<HTML>
<HEAD>
<script language="javascript" src="ShowProcessBar.js"></script>
</HEAD>
<BODY>
<A href="error.asp" IsShowProcessBar="True">A Href</a>
<BR>
<BR>
<span onclick="location.href='error.asp'" style="cursor:hand" IsShowProcessBar="True"><font color=blue>Span</font></span>
<BR>
<form action="error.asp">
<input type=Submit value="Submit">
<input type=button value="normal button" IsShowProcessBar="True">
</form>
<P IsShowProcessBar="True">AAAAAAAAAAAAA</P>
</BODY>
</HTML>
Nov
15
世上最遥远的距离,不是生与死的距离,不是天各一方,而是我就站在你面前,你却不知道我爱你。
我爱你....为了你的幸福,我愿意放弃一切---包括你。
失望,有时候也是一种幸福,因为有所期待所以才会失望。因为有爱,才会有期待,所以纵使失望,也是一种幸福,虽然这种幸福有点痛。
世上最凄绝的距离是两个人本来距离很远, 互不相识, 忽然有一天, 他们相识, 相爱, 距离变得很近。
然后有一天,不再相爱了, 本来很近的两个人, 变得很远, 甚至比以前更远。
爱情使人忘记时间,时间也使人忘记爱情。
孤单不是与生俱来,而是由你爱上一个人的那一刻开始。
喜欢一个人,是不会有痛苦的。爱一个人,也许有绵长的痛苦,但他给我的快乐,也是世上最大的快乐。
两个人一起是为了快乐,分手是为了减轻痛苦,你无法再令我快乐,我也唯有离开,我离开的时候,也很痛苦,只是,你肯定比我痛苦,因为我首先说再见,首先追求快乐的是我。
凡事皆有代价,快乐的代价便是痛苦。
开始的时侯,我们就知道,总会有终结。
情还没有来到,日子是无忧无虑的;最痛苦的,也不过是测验和考试。当时觉得很大压力,后来回望,不过是多么的微小。
有些人注定是等待别人的,有些人是注定被人等的。
缘起缘灭,缘浓缘淡,不是我们能够控制的。我们能做到的,是在因缘际会的时侯好好的珍惜那短暂的时光。
曾经相遇,总胜过从未碰头。
为什么要那么痛苦地忘记一个人,时间自然会使你忘记。如果时间不可以让你忘记不应该记住的人,我们失去的岁月又有甚么意义?
我以为爱情可以克服一切,谁知道她有时毫无力量。我以为爱情可以填满人生的遗憾,然而,制造更多遗憾的,却偏偏是爱情。阴晴圆缺,在一段爱情中不断重演。换一个人,都不会天色常蓝。
爱情要完结的时候自会完结,到时候,你不想画上句号也不行。
同一个人, 是没法给你相同的痛苦的。 当他重复地伤害你,那个伤口已经习惯了, 感觉已经麻木了, 无论在给他伤害多少次,也远远不如第一次受的伤那么痛了。
爱情, 原来是含笑饮毒酒。
爱一个人很难,放弃自己心爱的人更难。
当爱情来临,当然也是快乐的。但是,这种快乐是要付出的,也要学习去接受失望、伤痛和离别.从此,人生不再纯粹。
我们也许可以同时爱两个人,又被两个人所爱。遗憾的是,我们只能跟其中一个厮守到老。
爱上一个人的时候,总会有点害怕,怕得到他;怕失掉他。
你曾经不被人所爱,你才会珍惜将来那个爱你的人。
不能见面的时候,他们互相思念。可是一旦能够见面,一旦再走在一起,他们又会互相折磨。
只想找一个在我失意时可以承受我的眼泪;在我快乐时,可以让我咬一口的肩膊。
如果我不爱你,我就不会思念你,我就不会妒忌你身边的异性,我也不会失去自信心和斗志,我更不会痛苦。如果我能够不爱你,那该多好。
别离,是为了重聚。
爱火,还是不应该重燃的.重燃了,从前那些美丽的回忆也会化为乌有.如果我们没有重聚,也许我僣带着他深深的思念洽着,直到肉体衰朽;可是,这一刻,我却恨他.所有的美好日子,已经远远一去不回了。
感冒原本是一种很伤感的病。
追求和渴望,才有快乐,也有沮丧和失望。经过了沮丧和失望,我们才学会珍惜。你曾经不被人所爱,你才会珍惜将来那个爱你的人。
如果情感和岁月也能轻轻撕碎, 扔到海中, 那么, 我愿意从此就在海底沉默... 你的言语, 我爱听,却不懂得, 我的沉默, 你愿见, 却不明白
爱情本来并不复杂,来来去去不过三个字,不是“我爱你”,“我恨你”,便是“算了吧”、“你好吗?”、“对不起”。
相爱却不能相恋,相恋却不相爱。
我也相信爱可以排除万难;只是,万难之后,又有万难。这是我更相信的。
你的心就是我的海角和天涯,我不能去得更远。我们此生共赴天涯海角,不是游走半个地球,而是人间相伴。
你爱我吗?已经爱到危险的程度了.危险到什么程度? 已经不能一个人生活。
相逢,不是恨晚,便是恨早。
爱情是风花雪月的事,失意的人是玩不起的。
无法厮守终生的爱情, 不过是人在长途旅程中, 来去匆匆的转机站, 无论停留多久, 始终要离去坐另一班机。
离开之后,我想你不要忘记一件事:不要忘记想念我。想念我的时候,不要忘记我也在想念你。
爱情不是避难所,想进去避难的话,是会被赶出来的。
如果没法忘记他,就不要忘记好了。真正的忘记,是不需要努力的。
我爱你....为了你的幸福,我愿意放弃一切---包括你。
失望,有时候也是一种幸福,因为有所期待所以才会失望。因为有爱,才会有期待,所以纵使失望,也是一种幸福,虽然这种幸福有点痛。
世上最凄绝的距离是两个人本来距离很远, 互不相识, 忽然有一天, 他们相识, 相爱, 距离变得很近。
然后有一天,不再相爱了, 本来很近的两个人, 变得很远, 甚至比以前更远。
爱情使人忘记时间,时间也使人忘记爱情。
孤单不是与生俱来,而是由你爱上一个人的那一刻开始。
喜欢一个人,是不会有痛苦的。爱一个人,也许有绵长的痛苦,但他给我的快乐,也是世上最大的快乐。
两个人一起是为了快乐,分手是为了减轻痛苦,你无法再令我快乐,我也唯有离开,我离开的时候,也很痛苦,只是,你肯定比我痛苦,因为我首先说再见,首先追求快乐的是我。
凡事皆有代价,快乐的代价便是痛苦。
开始的时侯,我们就知道,总会有终结。
情还没有来到,日子是无忧无虑的;最痛苦的,也不过是测验和考试。当时觉得很大压力,后来回望,不过是多么的微小。
有些人注定是等待别人的,有些人是注定被人等的。
缘起缘灭,缘浓缘淡,不是我们能够控制的。我们能做到的,是在因缘际会的时侯好好的珍惜那短暂的时光。
曾经相遇,总胜过从未碰头。
为什么要那么痛苦地忘记一个人,时间自然会使你忘记。如果时间不可以让你忘记不应该记住的人,我们失去的岁月又有甚么意义?
我以为爱情可以克服一切,谁知道她有时毫无力量。我以为爱情可以填满人生的遗憾,然而,制造更多遗憾的,却偏偏是爱情。阴晴圆缺,在一段爱情中不断重演。换一个人,都不会天色常蓝。
爱情要完结的时候自会完结,到时候,你不想画上句号也不行。
同一个人, 是没法给你相同的痛苦的。 当他重复地伤害你,那个伤口已经习惯了, 感觉已经麻木了, 无论在给他伤害多少次,也远远不如第一次受的伤那么痛了。
爱情, 原来是含笑饮毒酒。
爱一个人很难,放弃自己心爱的人更难。
当爱情来临,当然也是快乐的。但是,这种快乐是要付出的,也要学习去接受失望、伤痛和离别.从此,人生不再纯粹。
我们也许可以同时爱两个人,又被两个人所爱。遗憾的是,我们只能跟其中一个厮守到老。
爱上一个人的时候,总会有点害怕,怕得到他;怕失掉他。
你曾经不被人所爱,你才会珍惜将来那个爱你的人。
不能见面的时候,他们互相思念。可是一旦能够见面,一旦再走在一起,他们又会互相折磨。
只想找一个在我失意时可以承受我的眼泪;在我快乐时,可以让我咬一口的肩膊。
如果我不爱你,我就不会思念你,我就不会妒忌你身边的异性,我也不会失去自信心和斗志,我更不会痛苦。如果我能够不爱你,那该多好。
别离,是为了重聚。
爱火,还是不应该重燃的.重燃了,从前那些美丽的回忆也会化为乌有.如果我们没有重聚,也许我僣带着他深深的思念洽着,直到肉体衰朽;可是,这一刻,我却恨他.所有的美好日子,已经远远一去不回了。
感冒原本是一种很伤感的病。
追求和渴望,才有快乐,也有沮丧和失望。经过了沮丧和失望,我们才学会珍惜。你曾经不被人所爱,你才会珍惜将来那个爱你的人。
如果情感和岁月也能轻轻撕碎, 扔到海中, 那么, 我愿意从此就在海底沉默... 你的言语, 我爱听,却不懂得, 我的沉默, 你愿见, 却不明白
爱情本来并不复杂,来来去去不过三个字,不是“我爱你”,“我恨你”,便是“算了吧”、“你好吗?”、“对不起”。
相爱却不能相恋,相恋却不相爱。
我也相信爱可以排除万难;只是,万难之后,又有万难。这是我更相信的。
你的心就是我的海角和天涯,我不能去得更远。我们此生共赴天涯海角,不是游走半个地球,而是人间相伴。
你爱我吗?已经爱到危险的程度了.危险到什么程度? 已经不能一个人生活。
相逢,不是恨晚,便是恨早。
爱情是风花雪月的事,失意的人是玩不起的。
无法厮守终生的爱情, 不过是人在长途旅程中, 来去匆匆的转机站, 无论停留多久, 始终要离去坐另一班机。
离开之后,我想你不要忘记一件事:不要忘记想念我。想念我的时候,不要忘记我也在想念你。
爱情不是避难所,想进去避难的话,是会被赶出来的。
如果没法忘记他,就不要忘记好了。真正的忘记,是不需要努力的。
Nov
11
细心的开发人员有时会想到,我们在一个需要读写数据库的页面里包含类似
的代码时,实际上,当你没有进行任何读写数据库操作时,这个数据库连接仍然是打开的,仍然在消耗着服务器的资源。
那么,我们有没有办法让数据库连接仅在需要读取数据库时才打开,不读取时就没有任何动作呢,以下即提供这种思路,以求抛砖引玉。
这种思路即是将数据库连接代码封装在函数里,在需要读取时调用这个函数。
以下是SQL连接代码:
Function Open_conn()
dim Conn,Strconn
set Conn=server.createobject("adodb.connection")
Strconn = "Provider = Sqloledb; User ID = 数据库登录帐号; Password = 数据库登录密码; Initial Catalog = 数据库名称; Data Source = (local);"
Conn.open Strconn
set Open_conn=Conn
If Err Then
err.Clear
Conn.close:set Conn=nothing
Response.Write "对不起,数据库连接出错。"
Response.End
End If
End Function
调用方法:
将原来的
rs.open sql,conn
改成
rs.open sql,Open_conn()
以下是ACCESS连接代码:
Function Open_conn()
dim Dbpath,Conn
Dbpath=server.MapPath("数据库路径")
set Conn=server.createObject("ADODB.connection")
Conn.open "data source="&dbpath&";provider=microsoft.Jet.OLEDB.4.0;"
set Open_conn=Conn
If Err Then
err.Clear
Conn.close:set Conn=nothing
Response.Write "对不起,数据库连接出错。"
Response.End
End If
End Function
调用方法:
将原来的
rs.open sql,conn
改成
rs.open sql,Open_conn()
顺便提供一个同一服务器上可以跨站共享ACCESS数据库的老代码,也许有朋友用得着:
有时,我们有很多二级域名,可能需要让这些二级域名调用某同一个ACCESS数据库,在你不愿意使用SQL数据库的情况下,数据库连接可以采用以下办法。(特别提示:如果你的服务器做了FSO安全权限,需要将这个数据库目录设置为,允许你需要调用的各站的IIS用户有权访问修改。)
以下的数据库物理路径类似于 E:\目录\目录\数据库名
dim Conn,Strconn
Set Conn = Server.CreateObject("ADODB.Connection")
Strconn="Provider = Microsoft.Jet.OLEDB.4.0; "
Strconn=Strconn & "Data Source=数据库物理路径"
Conn.Open Strconn
If Err Then
err.Clear
Conn.close:set Conn=nothing
Response.Write "对不起,数据库连接出错。"
Response.End
End If
的代码时,实际上,当你没有进行任何读写数据库操作时,这个数据库连接仍然是打开的,仍然在消耗着服务器的资源。
那么,我们有没有办法让数据库连接仅在需要读取数据库时才打开,不读取时就没有任何动作呢,以下即提供这种思路,以求抛砖引玉。
这种思路即是将数据库连接代码封装在函数里,在需要读取时调用这个函数。
以下是SQL连接代码:
Function Open_conn()
dim Conn,Strconn
set Conn=server.createobject("adodb.connection")
Strconn = "Provider = Sqloledb; User ID = 数据库登录帐号; Password = 数据库登录密码; Initial Catalog = 数据库名称; Data Source = (local);"
Conn.open Strconn
set Open_conn=Conn
If Err Then
err.Clear
Conn.close:set Conn=nothing
Response.Write "对不起,数据库连接出错。"
Response.End
End If
End Function
调用方法:
将原来的
rs.open sql,conn
改成
rs.open sql,Open_conn()
以下是ACCESS连接代码:
Function Open_conn()
dim Dbpath,Conn
Dbpath=server.MapPath("数据库路径")
set Conn=server.createObject("ADODB.connection")
Conn.open "data source="&dbpath&";provider=microsoft.Jet.OLEDB.4.0;"
set Open_conn=Conn
If Err Then
err.Clear
Conn.close:set Conn=nothing
Response.Write "对不起,数据库连接出错。"
Response.End
End If
End Function
调用方法:
将原来的
rs.open sql,conn
改成
rs.open sql,Open_conn()
顺便提供一个同一服务器上可以跨站共享ACCESS数据库的老代码,也许有朋友用得着:
有时,我们有很多二级域名,可能需要让这些二级域名调用某同一个ACCESS数据库,在你不愿意使用SQL数据库的情况下,数据库连接可以采用以下办法。(特别提示:如果你的服务器做了FSO安全权限,需要将这个数据库目录设置为,允许你需要调用的各站的IIS用户有权访问修改。)
以下的数据库物理路径类似于 E:\目录\目录\数据库名
dim Conn,Strconn
Set Conn = Server.CreateObject("ADODB.Connection")
Strconn="Provider = Microsoft.Jet.OLEDB.4.0; "
Strconn=Strconn & "Data Source=数据库物理路径"
Conn.Open Strconn
If Err Then
err.Clear
Conn.close:set Conn=nothing
Response.Write "对不起,数据库连接出错。"
Response.End
End If
Nov
7
首先了解什么是IIS连接数。
IIS连接数指并发连接数,什么意思呢?
要分几种情况:
A 用户单点下载你的文件,结束后正常断开,这些连接是按照瞬间计算的,就是说你50人的网站瞬间可以接受同时50个点下载。
B 用户打开你的页面,就算停留在页面没有对服务器发出任何请求,那么在用户打开一面以后的10分钟内也都要算一个在线,就是说你50人的网站10分钟内可以接受不同用户打开50个页面。
C 上面B的情况用户继续打开同一个网站的其他页面,那么在线人数按照用户最后一次点击(发出请求)以后的10分钟计算,在这个10分钟内不管用户怎么点击(包括新窗口打开)都还是一人在线。
D 当你的页面内存在框架(Iframe),那么每多一个框架就要多一倍的在线!因为这相当于用户同一时间向服务器请求了多个页面。
E 当用户打开页面然后正常关闭浏览器,用户的在线人数也会马上清除。
然后了解什么是论坛在线人数。
论坛在线只是计算一定时间内的活动用户数。
这里的时间用户可以自己设定(删除不活动用户时间),动网论坛默认为40分钟的相对准确值。
根据上面的说明,显然论坛在线和IIS连接数的概念不同。
IIS连接数指并发连接数,什么意思呢?
要分几种情况:
A 用户单点下载你的文件,结束后正常断开,这些连接是按照瞬间计算的,就是说你50人的网站瞬间可以接受同时50个点下载。
B 用户打开你的页面,就算停留在页面没有对服务器发出任何请求,那么在用户打开一面以后的10分钟内也都要算一个在线,就是说你50人的网站10分钟内可以接受不同用户打开50个页面。
C 上面B的情况用户继续打开同一个网站的其他页面,那么在线人数按照用户最后一次点击(发出请求)以后的10分钟计算,在这个10分钟内不管用户怎么点击(包括新窗口打开)都还是一人在线。
D 当你的页面内存在框架(Iframe),那么每多一个框架就要多一倍的在线!因为这相当于用户同一时间向服务器请求了多个页面。
E 当用户打开页面然后正常关闭浏览器,用户的在线人数也会马上清除。
然后了解什么是论坛在线人数。
论坛在线只是计算一定时间内的活动用户数。
这里的时间用户可以自己设定(删除不活动用户时间),动网论坛默认为40分钟的相对准确值。
根据上面的说明,显然论坛在线和IIS连接数的概念不同。