<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Wordpress外贸企业主题, Wp企业主题, wordpress主题定制,  PHP代码, ASP代码, 精选JS代码, WORDPRESS, 网站SEO,Flash焦点广告,JS焦点广告,CSS技巧 &#124; 酷码资源 &#187; ASP</title>
	<atom:link href="http://www.3code.cn/category/aspcode/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.3code.cn</link>
	<description>Wordpress外贸企业主题, Wp企业主题, wordpress主题定制,  PHP代码,ASP代码,精选JS代码,WORDPRESS,网站SEO,Flash焦点广告,JS焦点广告,CSS技巧</description>
	<lastBuildDate>Fri, 30 Jul 2010 05:13:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>zh-cn</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>ASP网站漏洞解析及黑客入侵防范方法(3)</title>
		<link>http://www.3code.cn/asp-hk-3/</link>
		<comments>http://www.3code.cn/asp-hk-3/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:26:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp安全]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1594</guid>
		<description><![CDATA[再提醒各位论坛站长一句，小心你们的文件上传：为什么论坛程序被攻破后主机也随之被攻击者占据。原因就在……对！ASP 木马！一个绝对可恶的东西。病毒么？非也.把个文件随便放到你论坛的程序中，您老找去吧。不吐血才怪哦。如何才能防止ASP木马被上传到服务器呢？方法很简单，如果你的论坛支持文件上传，请设定好你要上传的文件格式，我不赞成使用可更改的文件格式，直接从程序上锁定，只有图象文件格式，和压缩文件就完全可以，]]></description>
			<content:encoded><![CDATA[<p>8、ASP木马</p>
<p>  　　已经讲到这里了，再提醒各位论坛站长一句，小心你们的文件上传：为什么论坛程序被攻破后主机也随之被攻击者占据。原因就在……对！ASP 木马！一个绝对可恶的东西。病毒么？非也.把个文件随便放到你论坛的程序中，您老找去吧。不吐血才怪哦。如何才能防止ASP木马被上传到服务器呢？方法很简单，如果你的论坛支持文件上传，请设定好你要上传的文件格式，我不赞成使用可更改的文件格式，直接从程序上锁定，只有图象文件格式，和压缩文件就完全可以，多给自己留点方便也就多给攻击者留点方便。怎么判断格式，我这里收集了一个，也改出了一个，大家可以看一下：</p>
<p>  　　程序体（10）</p>
<p>  　　’判断文件类型是否合格<br />
  　　Private Function CheckFileExt (fileEXT)<br />
  　　dim Forumupload<br />
  　　Forumupload="gif,jpg,bmp,jpeg"<br />
  　　Forumupload=split(Forumupload,",")<br />
  　　for i=0 to ubound(Forumupload)<br />
  　　if lcase(fileEXT)=lcase(trim(Forumupload(i))) then<br />
  　　CheckFileExt=true<br />
  　　exit Function<br />
  　　else<br />
  　　CheckFileExt=false<br />
  　　end if<br />
  　　next<br />
  　　End Function<br />
  　　‘验证文件内容的合法性</p>
<p>  set MyFile = server.CreateObject ("Scripting.FileSystemObject")<br />
  　　set MyText = MyFile.OpenTextFile (sFile, 1) ’ 读取文本文件<br />
  　　sTextAll = lcase(MyText.ReadAll): MyText.close<br />
  　　’判断用户文件中的危险操作<br />
  　　sStr ="8　.getfolder　.createfolder　.deletefolder　.createdirectory　<br />
  　　.deletedirectory"<br />
  　　sStr = sStr &#038; "　.saveas　wscript.shell　script.encode"<br />
  　　sNoString = split(sStr,"　")<br />
  　　for i = 1 to sNoString(0)<br />
  　　if instr(sTextAll, sNoString(i)) ＜＞ 0 then<br />
  　　sFile = Upl.Path &#038; sFileSave: fs.DeleteFile sFile<br />
  　　Response.write "＜center＞＜br＞＜big＞"&#038; sFileSave &#038;"文件中含有与操作目录等有关的命令"&#038;_<br />
  　　"＜br＞＜font color=red＞"&#038; mid(sNoString(i),2) &#038;"＜/font＞，为了安全原因，＜b＞不能上传。＜b＞"&#038;_"＜/big＞＜/center＞＜/html＞"<br />
  　　Response.end<br />
  　　end if<br />
  　　next</p>
<p>  　　把他们加到你的上传程序里做一次验证，那么你的上传程序安全性将会大大提高.</p>
<p>  　　什么？你还不放心？拿出杀手锏，请你的虚拟主机服务商来帮忙吧。登陆到服务器，将PROG ID 中的"shell.application"项和"shell.application.1"项改名或删除。再将”WSCRIPT.SHELL”项和”WSCRIPT.SHELL.1”这两项都要改名或删除。呵呵，我可以大胆的说，国内可能近半以上的虚拟主机都没改过。只能庆幸你们的用户很合作，否则……我删，我删，我删删删……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-hk-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP网站漏洞解析及黑客入侵防范方法(2)</title>
		<link>http://www.3code.cn/asp-hk-2/</link>
		<comments>http://www.3code.cn/asp-hk-2/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:23:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[ASP函数]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1592</guid>
		<description><![CDATA[为你的数据库文件名称起个复杂的非常规的名字，并把它放在几层目录下。所谓 “非常规”，打个比方说，比如有个数据库要保存的是有关书籍的信息，可不要给它起个“book.mdb”的名字，而要起个怪怪的名称，比如d34ksfslf.mdb，并把它放在如./kdslf/i44/studi/的几层目录下，这样黑客要想通过猜的方式得到你的Access数据库文件就难上加难了。]]></description>
			<content:encoded><![CDATA[<p>6、数据库下载漏洞</p>
<p>  　　攻击原理：在用Access做后台数据库时，如果有人通过各种方法知道或者猜到了服务器的Access数据库的路径和数据库名称，那么他也能够下载这个Access数据库文件，这是非常危险的。</p>
<p>  　　防范技巧：</p>
<p>  　　（1）为你的数据库文件名称起个复杂的非常规的名字，并把它放在几层目录下。所谓 “非常规”，打个比方说，比如有个数据库要保存的是有关书籍的信息，可不要给它起个“book.mdb”的名字，而要起个怪怪的名称，比如d34ksfslf.mdb，并把它放在如./kdslf/i44/studi/的几层目录下，这样黑客要想通过猜的方式得到你的Access数据库文件就难上加难了。</p>
<p>  　　（2）不要把数据库名写在程序中。有些人喜欢把DSN写在程序中，比如：</p>
<p>  　　DBPath = Server.MapPath（“cmddb.mdb”）<br />
  　　conn.Open “driver={Microsoft Access Driver （*.mdb）}；dbq=” &#038; DBPath</p>
<p>  　　假如万一给人拿到了源程序，你的Access数据库的名字就一览无余了。因此建议你在ODBC里设置数据源，再在程序中这样写：</p>
<p>  　　conn.open“shujiyuan”</p>
<p>  　　（3）使用Access来为数据库文件编码及加密。首先在“工具→安全→加密/解密数据库”中选取数据库（如：employer.mdb），然后按确定，接着会出现“数据库加密后另存为”的窗口，可存为：“employer1.mdb”。</p>
<p>  　　要注意的是，以上的动作并不是对数据库设置密码，而只是对数据库文件加以编码，目的是为了防止他人使用别的工具来查看数据库文件的内容。</p>
<p>  　　接下来我们为数据库加密，首先打开经过编码了的 employer1.mdb，在打开时，选择“独占”方式。然后选取功能表的“工具→安全→设置数据库密码”，接着输入密码即可。这样即使他人得到了 employer1.mdb文件，没有密码他也是无法看到 employer1.mdb中的内容。</p>
<p>  　　7、防范远程注入攻击</p>
<p>  　　这类攻击在以前应该是比较常见的攻击方式,比如POST攻击,攻击者可以随便的改变要提交的数据值已达到攻击目的.又如:COOKIES 的伪造,这一点更值得引起程序编写者或站长的注意，不要使用COOKIES来做为用户验证的方式,否则你和把钥匙留给贼是同一个道理.</p>
<p>  　　比如:</p>
<p>  　　If trim(Request. cookies ("uname"))="fqy" and Request.cookies("upwd") =”fqy#e3i5.com” then<br />
  　　……..more………<br />
  　　End if</p>
<p>  　　我想各位站长或者是喜好写程序的朋友千万别出这类错误,真的是不可饶恕.伪造COOKIES 都多少年了，你还用这样的就不能怪别人跑你的密码.涉及到用户密码或者是用户登陆时,你最好使用session 它才是最安全的.如果要使用COOKIES就在你的COOKIES上多加一个信息,SessionID,它的随机值是64位的,要猜解它,不可能.例:</p>
<p>  　　if not (rs.BOF or rs.eof) then<br />
  　　login="true"<br />
  　　Session("username"&#038;sessionID) = Username<br />
  　　Session("password"&#038; sessionID) = Password<br />
  　　‘Response.cookies(“username”)= Username<br />
  　　‘Response.cookies(“Password”)= Password</p>
<p>  　　下面我们来谈谈如何防范远程注入攻击,一般的攻击都是将单表提交文件拖到本地,将Form ACTION=”chk.asp” 指向你服务器中处理数据的文件即可.如果你全部的数据过滤都在单表页上，那么恭喜你，你将已经被脚本攻击了.</p>
<p>  　　怎么才能制止这样的远程攻击?好办,请看代码如下: 程序体(9)</p>
<p>  　　＜%<br />
  　　server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))<br />
  　　server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))<br />
  　　if mid(server_v1,8,len(server_v2))＜＞server_v2 then<br />
  　　response.write "＜br＞＜br＞＜center>"<br />
  　　response.write " "<br />
  　　response.write "你提交的路径有误，禁止从站点外部提交数据请不要乱改参数！"<br />
  　　response.write "</p>
<p>  "<br />
  　　response.end<br />
  　　end if<br />
  　　%></p>
<p>  ‘个人感觉上面的代码过滤不是很好，有一些外部提交竟然还能堂堂正正的进来,于是再写一个.</p>
<p>  　　‘这个是过滤效果很好,建议使用.</p>
<p>  　　if instr(request.servervariables("http_referer"),"http://"&#038;request.servervariables("host") )<1 then response.write "处理 URL 时服务器上出错。</p>
<p>  　　如果您是在用任何手段攻击服务器，那你应该庆幸，你的所有操作已经被服务器记录，我们会第一时间通知公安局与国家安全部门来调查你的IP. "</p>
<p>  　　response.end<br />
  　　end if<br />
  　　程序体(9)</p>
<p>  　　本以为这样就万事大吉了，在表格页上加一些限制,比如maxlength啦,等等..但天公就是那么不作美,你越怕什么他越来什么.你别忘了,攻击者可以突破sql注入攻击时输入框长度的限制.写一个SOCKET程序改变HTTP_REFERER？我不会。网上发表了这样一篇文章：</p>
<p>  　　------------len.reg-----------------<br />
  　　Windows Registry Editor Version 5.00<br />
  　　[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\扩展(&#038;E)]<br />
  　　@="C:\Documents and Settings\Administrator\桌面\len.htm"<br />
  　　"contexts"=dword:00000004<br />
  　　-----------end----------------------<br />
  　　-----------len.htm------------------<br />
  　　<br />
  　　----------end-----------------------</p>
<p>  　　用法:先把len.reg导入注册表(注意文件路径)</p>
<p>  　　然后把len.htm拷到注册表中指定的地方.</p>
<p>  　　打开网页,光标放在要改变长度的输入框上点右键,看多了一个叫扩展的选项了吧</p>
<p>  　　单击搞定! 后记:同样的也就可以对付那些限制输入内容的脚本了.</p>
<p>  　　怎么办？我们的限制被饶过了，所有的努力都白费了？不，举起你de键盘，说不。让我们继续回到脚本字符的过滤吧，他们所进行的注入无非就是进行脚本攻击。我们把所有的精力全都用到ACTION以后的页面吧，在chk.asp页中，我们将非法的字符全部过滤掉，结果如何？我们只在前面虚晃一枪，叫他们去改注册表吧，当他们改完才会发现，他们所做的都是那么的徒劳。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-hk-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP网站漏洞解析及黑客入侵防范方法(1)</title>
		<link>http://www.3code.cn/asp-hk/</link>
		<comments>http://www.3code.cn/asp-hk/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:21:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[ASP函数]]></category>
		<category><![CDATA[asp安全]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1590</guid>
		<description><![CDATA[由于ASP的方便易用，越来越多的网站后台程序都使用ASP脚本语言。但是，由于ASP本身存在一些安全漏洞，稍不小心就会给黑客提供可乘之机。事实上，安全不仅是网管的事，编程人员也必须在某些安全细节上注意，养成良好的安全习惯，否则会给自己的网站带来巨大的安全隐患。目前，大多数网站上的ASP程序有这样那样的安全漏洞，但如果编写程序的时候注意一点的话，还是可以避免的。]]></description>
			<content:encoded><![CDATA[<p>如何更好的达到防范黑客攻击，本人提一下个人意见！第一，免费程序不要真的就免费用，既然你可以共享原码，那么攻击者一样可以分析代码。如果在细节上注意防范，那样你站点的安全性就大大的提高了。即使出现了SQL Injection这样的漏洞，攻击者也不可能马上拿下你的站点。</p>
<p>  　　由于ASP的方便易用，越来越多的网站后台程序都使用ASP脚本语言。但是，由于ASP本身存在一些安全漏洞，稍不小心就会给黑客提供可乘之机。事实上，安全不仅是网管的事，编程人员也必须在某些安全细节上注意，养成良好的安全习惯，否则会给自己的网站带来巨大的安全隐患。目前，大多数网站上的ASP程序有这样那样的安全漏洞，但如果编写程序的时候注意一点的话，还是可以避免的。</p>
<p>  　　1、用户名与口令被破解</p>
<p>  　　攻击原理：用户名与口令，往往是黑客们最感兴趣的东西，如果被通过某种方式看到源代码，后果是严重的。</p>
<p>  　　防范技巧：涉及用户名与口令的程序最好封装在服务器端，尽量少在ASP文件里出现，涉及与数据库连接的用户名与口令应给予最小的权限。出现次数多的用户名与口令可以写在一个位置比较隐蔽的包含文件中。如果涉及与数据库连接，在理想状态下只给它以执行存储过程的权限，千万不要直接给予该用户修改、插入、删除记录的权限。</p>
<p>  　　2、验证被绕过</p>
<p>  　　攻击原理：现在需要经过验证的ASP程序大多是在页面头部加一个判断语句，但这还不够，有可能被黑客绕过验证直接进入。<br />
  　　防范技巧：需要经过验证的ASP页面，可跟踪上一个页面的文件名，只有从上一页面转进来的会话才能读取这个页面。</p>
<p>  　　3、inc文件泄露问题</p>
<p>  　　攻击原理：当存在ASP的主页正在制作且没有进行最后调试完成以前，可以被某些搜索引擎机动追加为搜索对象。如果这时候有人利用搜索引擎对这些网页进行查找，会得到有关文件的定位，并能在浏览器中查看到数据库地点和结构的细节，并以此揭示完整的源代码。</p>
<p>  　　防范技巧：程序员应该在网页发布前对它进行彻底的调试；安全专家则需要加固ASP文件以便外部的用户不能看到它们。首先对.inc文件内容进行加密，其次也可以使用.asp文件代替.inc文件使用户无法从浏览器直接观看文件的源代码。inc文件的文件名不要使用系统默认的或者有特殊含义容易被用户猜测到的名称，尽量使用无规则的英文字母。</p>
<p>  　　4、自动备份被下载</p>
<p>  　　攻击原理：在有些编辑ASP程序的工具中，当创建或者修改一个ASP文件时，编辑器自动创建一个备份文件，比如：UltraEdit就会备份一个.bak文件，如你创建或者修改了some.asp，编辑器会自动生成一个叫some.asp.bak文件，如果你没有删除这个bak文件，攻击者可以直接下载some.asp.bak文件，这样some.asp的源程序就会被下载。</p>
<p>  　　防范技巧：上传程序之前要仔细检查，删除不必要的文档。对以BAK为后缀的文件要特别小心。</p>
<p>  　　5、特殊字符</p>
<p>  　　攻击原理：输入框是黑客利用的一个目标，他们可以通过输入脚本语言等对用户客户端造成损坏；如果该输入框涉及数据查询，他们会利用特殊查询语句，得到更多的数据库数据，甚至表的全部。因此必须对输入框进行过滤。但如果为了提高效率仅在客户端进行输入合法性检查，仍有可能被绕过。</p>
<p>  　　防范技巧：在处理类似留言板、BBS等输入框的ASP程序中，最好屏蔽掉HTML、JavaScript、VBScript语句，如无特殊要求，可以限定只允许输入字母与数字，屏蔽掉特殊字符。同时对输入字符的长度进行限制。而且不但要在客户端进行输入合法性检查，同时要在服务器端程序中进行类似检查。 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-hk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP取出HTML里面的图片地址的函数</title>
		<link>http://www.3code.cn/asp-html-img/</link>
		<comments>http://www.3code.cn/asp-html-img/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:18:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[ASP函数]]></category>
		<category><![CDATA[ASP字符串]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1588</guid>
		<description><![CDATA[以下是取出HTML里面的图片地址的函数：主要原理就是用正则判断 <img> 的<src>属性。这在采集程序中将非常有用。]]></description>
			<content:encoded><![CDATA[<p>以下是取出HTML里面的图片地址的函数：</p>
<p>主要原理就是用正则判断 &lt;img&gt; 的&lt;src&gt;属性。这在采集程序中将非常有用。<br />
<strong><br />
函数如下：<br />
</strong><br />
以下是引用片段：<br />
Function ShowPic(str)<br />
Set objRegExp = New Regexp'设置配置对象<br />
objRegExp.IgnoreCase = True'忽略大小写<br />
objRegExp.Global = True'设置为全文搜索<br />
objRegExp.Pattern = "&lt;img.+?&gt;"<br />
<strong>'为了确保能准确地取出图片地址所以分为两层配置：首先找到里面的&lt;img&gt;标签，然后再取出里面的图片地址后面的getimgs函数就是实现后一个功能的。 </strong><br />
strs=trim(str)<br />
Set Matches =objRegExp.Execute(strs)'开始执行配置<br />
For Each Match in Matches<br />
RetStr = RetStr &amp;getimgs( Match.Value )'执行第二轮的匹配<br />
Next<br />
ShowPic = RetStr<br />
End Function<br />
Function getimgs(str)<br />
getimgs=""<br />
Set objRegExp1 = New Regexp<br />
objRegExp1.IgnoreCase = True<br />
objRegExp1.Global = True<br />
objRegExp1.Pattern = "http://.+?"""'取出里面的地址<br />
set mm=objRegExp1.Execute(str)<br />
For Each Match1 in mm<br />
getimgs=getimgs&amp;left(Match1.Value,len(Match1.Value)-1)&amp;"||"'把里面的地址串起来备用<br />
next<br />
End Function<br />
'取得图片内容<br />
function getHTTPPage(url)<br />
on error resume next<br />
dim http<br />
set http=server.createobject("MSXML2.XMLHTTP")'使用xmlhttp的方法来获得图片的内容<br />
Http.open "GET",url,false<br />
Http.send()<br />
if Http.readystate&lt;&gt;4 then<br />
exit function<br />
end if<br />
getHTTPPage=Http.responseBody<br />
set http=nothing<br />
if err.number&lt;&gt;0 then err.Clear<br />
end function<br />
'保存图片<br />
function saveimage(from,tofile)<br />
dim geturl,objStream,imgs<br />
geturl=trim(from)<br />
imgs=gethttppage(geturl)'取得图片的具休内容的过程<br />
Set objStream = Server.CreateObject("ADODB.Stream")'建立ADODB.Stream对象，必须要ADO 2.5以上版本<br />
objStream.Type =1'以二进制模式打开<br />
objStream.Open<br />
objstream.write imgs'将字符串内容写入缓冲<br />
objstream.SaveToFile server.mappath(tofile),2'-将缓冲的内容写入文件<br />
objstream.Close()'关闭对象<br />
set objstream=nothing<br />
end function</p>
<p><strong>'调用实例 </strong><br />
Dim strpic,i,fname<br />
strpic = ShowPic("&lt;DIV align=center&gt;&lt;IMG src=""http://img.knowsky.com/img/knowskylogo.gif"" border=0&gt;&lt;/DIV&gt;")<br />
strpic = Split(strpic,"||")<br />
If UBound(strpic) &gt; 0 Then<br />
For i = 0 To UBound(strpic) - 1<br />
'保存图片<br />
fname=cstr(i&amp;mid(strpic(i),instrrev(strpic(i),".")))<br />
saveimage(strpic(i),fname)<br />
Next<br />
Else<br />
End If</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-html-img/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP调用数据库中视图及存储过</title>
		<link>http://www.3code.cn/asp-ado/</link>
		<comments>http://www.3code.cn/asp-ado/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:15:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp数据库]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1586</guid>
		<description><![CDATA[ASP提供内建对象，这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息。包括Application、 Request、Response、Server、Session 和ObjectContext 对象。其中最为常用的为Request、Response 和Server三个对象，它们分别用于从浏览器请求信息、向浏览器发送信息和访问服务器上对象的属性和方法。]]></description>
			<content:encoded><![CDATA[<p>一、前言</p>
<p>ASP (Active Server Pages) 是服务器端的脚本编写环境，它由微软公司的IIS3.0以上版本支持。它可用来创建动态 Web 页或生成功能强大的 Web应用程序。ASP页是包括 HTML 标记、文本和脚本命令的文件。ASP页可调用ActiveX组件来执行任务，例如连接到数据库或进行商务计算。通过ASP，可为您的Web页添加交互内容 或用HTML页构成整个Web应用程序，这些应用程序使用HTML页作为您的客户的界面。</p>
<p>二、ASP模型</p>
<p>浏览器从Web服务器上请求 .asp文件时，ASP 脚本开始运行。然后Web服务器调用ASP，ASP全面读取请求的文件，执行所有脚本命令，并将Web页传送给浏览器。</p>
<p>ASP提供了一个在HTML页中使用现有脚本语言如 Microsoft VBScript 和 Microsoft JScript 的框架。</p>
<p>ASP提供内建对象，这些对象使用户更容易收集通过浏览器请求发送的信息、响应浏览器以及存储用户信息。包括Application、 Request、Response、Server、Session 和ObjectContext 对象。其中最为常用的为Request、Response 和Server三个对象，它们分别用于从浏览器请求信息、向浏览器发送信息和访问服务器上对象的属性和方法。</p>
<p>三、ADO</p>
<p>ASP和后台数据库连接使用微软的ADO(ActiveX Data Objects)，ADO是一项容易使用并且可扩展的将数据库访问添加到Web页的技术。可以使用ADO去编写紧凑简明的脚本以便连接到Open Database Connectivity(ODBC)兼容的数据库和 OLE DB兼容的数据源。</p>
<p>ADO包含7个内置对象，它们分别为Connection、Command、RecordSet、Fields、Error、Parameters和Properties。通过这些对象，ASP可以完成对后台数据库的所有操作。</p>
<p>四、ASP调用视图和存储过程</p>
<p>在一般的MIS应用中，会有大量的报表，此时我们可以在后台数据库编写相应的视图或存储过程，用ASP通过ADO调用以完成报表工作。下面用一个例子说明相应的操作过程。</p>
<p>1.创建 ODBC DSN 文件</p>
<p>在创建数据库脚本之前，必须提供一条使ADO定位、标识和与数据库通讯的途径。数据库驱动程序使用Data Source Name (DSN) 定位和标识特定的ODBC兼容数据库，将信息从 Web 应用程序传递给数据库。</p>
<p>2. 调用数据库视图</p>
<p>访问数据库信息的第一步是和数据库源建立连接。ADO提供Connection对象，可以使用该对象建立和管理应用程序和 ODBC数据库之间的连接。</p>
<p>&lt;%<br />
Set Dataconn = Server.CreateObject("ADODB.Connection") '建立连接对象<br />
Dataconn.Open "DSN=SinoTrans;SERVER=APP_SERVER;<br />
UID=sa;PWD=;APP=Microsoft (R) Developer Studio;WSID=APP_SERVER;Regional=Yes"<br />
Set cmdTemp = Server.CreateObject("ADODB.Command") '建立命令对象<br />
Set rst= Server.CreateObject("ADODB.Recordset") '建立记录集对象<br />
cmdTemp.CommandText = "Customers "<br />
cmdTemp.CommandType = 2<br />
Set cmdTemp.ActiveConnection = DataConn<br />
rst.Open cmdTemp, , 1, 3 '生成查询结果<br />
%&gt;</p>
<p>此时，Customers为视图，从视图中查询数据与从基表中查询数据的方法是相同的。</p>
<p>3.调用数据库存储过程</p>
<p>&lt;%<br />
Set Dataconn = Server.CreateObject("ADODB.Connection") '建立连接对象<br />
Dataconn.Open "DSN=SinoTrans;SERVER=APP_SERVER;UID=sa;<br />
PWD=;APP=Microsoft (R) Developer Studio;WSID=APP_SERVER;Regional=Yes"<br />
Set cmdTemp = Server.CreateObject("ADODB.Command") '建立命令对象<br />
Set rst = Server.CreateObject("ADODB.Recordset") '建立记录集对象<br />
cmdTemp.CommandText = "dbo.pd_test" '存储过程名称<br />
cmdTemp.CommandType = 4 '命令类别为4,表示为存储过程<br />
Set cmdTemp.ActiveConnection = Dataconn<br />
Set tmpParam = cmdTemp.CreateParameter("Return Value", 3, 4, 4)<br />
cmdTemp.Parameters.Append tmpParam<br />
Set tmpParam = cmdTemp.CreateParameter("@BeginDate", 135, 1, 16, riqi)<br />
'创建输入参数对象<br />
cmdTemp.Parameters.Append tmpParam<br />
rst.Open cmdTemp, , 1, 3    '生成查询结果<br />
%&gt;</p>
<p>这里调用的存储过程为pd_test，这种是ADO中提供的标准方法，但存在一个问题，就是当在存储过程中有两个以上的SELECT语句，但 从逻辑上又不可能同时执行的时候，ADO会提示你存储过程中SELECT语句太多，解决方法是直接用ADO的CONNECTION对象的EXECUTE方 法直接执行存储过程，如下：</p>
<p>&lt;%<br />
Set Dataconn = Server.CreateObject("ADODB.Connection") '建立连接对象<br />
Dataconn.Open "DSN=SinoTrans;SERVER=APP_SERVER;UID=sa;PWD=;<br />
APP=Microsoft (R) Developer Studio;WSID=APP_SERVER;Regional=Yes"<br />
ss = "EXECUTE dbo.pd_test " &amp; "'" &amp; riqi1 &amp; "'"<br />
Set rs = dataconn.Execute(ss)<br />
%&gt;</p>
<p>有关ASP和ADO使用的详细信息，请参阅 Microsoft ActiveX Data Objects (ADO) 和Active Server Pages（ASP）的详细参考。</p>
<p>五、结束语</p>
<p>在B/S结构的开发中，我们可以把一些商业规则或复杂查询用存储过程在DBMS中编写，然后用ASP中的ADO对象调用，完成原来C/S结构中的传统功能。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-ado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP函数库</title>
		<link>http://www.3code.cn/asp-functions-9/</link>
		<comments>http://www.3code.cn/asp-functions-9/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:13:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[ASP函数]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1584</guid>
		<description><![CDATA[ASP函数库]]></description>
			<content:encoded><![CDATA[<p>'**************************************************<br />
'函数ID：0043[解密字符加解密]<br />
'函数名：exmw<br />
'作 用：解密字符加解密<br />
'参 数：nmw  ---- 加密的字符<br />
'返回值：解密加密后的字符<br />
'示 例：<br />
'**************************************************<br />
Public Function exmw(ByVal nmw)<br />
exmw=""<br />
On Error GoTo 0<br />
On Error Resume Next<br />
Dim keya,keyb,newStr,temp<br />
nmw=DecodeCookie(nmw)<br />
keya=Mid(nmw,2,1)<br />
keyb=Mid(nmw,1,1)<br />
bLowChr=ChrB(AscB(MidB(keya, 1, 1)) Xor 128)<br />
bHigChr=ChrB(AscB(MidB(keya, 2, 1)) Xor 18)<br />
keya=bLowChr &amp; bHigChr<br />
bLowChr=ChrB(AscB(MidB(keyb, 1, 1)) Xor 100)<br />
bHigChr=ChrB(AscB(MidB(keyb, 2, 1)) Xor 20)<br />
keyb=bLowChr &amp; bHigChr<br />
Str=StrReverse(Mid(nmw,3,len(nmw)))<br />
newStr=""<br />
temp=""<br />
For i=1 to len(Str)<br />
temp=Mid(Str,i,1)<br />
bLowChr=AscB(MidB(temp, 1, 1)) Xor asc(keya)<br />
bHigChr=AscB(MidB(temp, 2, 1)) Xor asc(keyb)<br />
newStr=newStr &amp; ChrB(bLowChr) &amp; ChrB(bHigChr)<br />
Next<br />
If Err.Number = 0 Then<br />
exmw=newStr<br />
End If<br />
On Error GoTo 0<br />
End Function<br />
'**************************************************<br />
'函数ID：0044[创建数据表]<br />
'函数名：CreatTable<br />
'作 用：创建数据表<br />
'参 数：ConnStrs    ---- 数据库链接字串<br />
'参 数：Tabnamestr  ---- 数据表名称<br />
'参 数：CvArrstr    ---- 字段表 (写法： Fname1#Type#Len#Defvalue|Fname1#Type#Len#Defvalue|...) 最后一个不要写“|”<br />
'参 数：SqlType     ---- Sql语句类型 (0 Access 1 Mssqlserver)<br />
' Fname,Type,Len,Defvalue 说明：字段名称,字段类型,字段长度,默认值<br />
'字段类型 Type C/c 字符 T/t 文本 I/i 二进制 D/d 日期 M/m 关键字(字符型) A/a 关键字自动编号(数值型) N/n 数值(float) Z/z 数值(int)<br />
'返回值：如果建立成功返回 True 否则 False<br />
'示 例：CreatTable(basicDB(3),"cs","fa#t##|fb#c#20#a|fc#n##5",0)<br />
'**************************************************<br />
Public Function CreatTable(ByVal ConnStrs,ByVal Tabnamestr,ByVal CvArrstr,ByVal SqlType)<br />
CreatTable=False<br />
On Error GoTo 0<br />
On Error Resume Next<br />
Dim filsarry,NeFilarry,Filstr,spfstr,templx,def_kh_l,def_kh_r,TempSqlStr<br />
def_kh_l=""<br />
def_kh_r=""<br />
Filstr=""<br />
spfstr=""<br />
TempSqlStr=""<br />
filsarry=Split(CvArrstr,"|")<br />
For ai = LBound(filsarry) To UBound(filsarry)<br />
NeFilarry=Split(filsarry(ai),"#")<br />
templx=""<br />
If UCase(NeFilarry(1))="C" Then templx="varchar(" &amp; NeFilarry(2) &amp; ")"<br />
If UCase(NeFilarry(1))="T" Then templx="TEXT"<br />
If UCase(NeFilarry(1))="I" Then templx="image"<br />
If UCase(NeFilarry(1))="D" Then templx="datetime"<br />
If UCase(NeFilarry(1))="M" Then templx="varchar(" &amp; NeFilarry(2) &amp; ") NOT NULL PRIMARY KEY"<br />
If UCase(NeFilarry(1))="A" Then templx="Int IDENTITY (1,1) NOT NULL PRIMARY KEY"<br />
If UCase(NeFilarry(1))="N" Then templx="Float"<br />
If UCase(NeFilarry(1))="Z" Then templx="Int"<br />
If SqlType =1 Then<br />
def_kh_l="('"<br />
def_kh_r="')"<br />
End If<br />
If Trim(NeFilarry(3))&lt;&gt;"" Then templx=templx &amp;" DEFAULT " &amp; def_kh_l &amp; Trim(NeFilarry(3)) &amp; def_kh_r<br />
If ai&lt;&gt;UBound(filsarry) Then<br />
spfstr= spfstr &amp; "[" &amp; NeFilarry(0) &amp; "] " &amp; templx &amp;","<br />
Else<br />
spfstr= spfstr &amp; "[" &amp; NeFilarry(0) &amp; "] " &amp; templx<br />
End If<br />
Next<br />
TempSqlStr="CREATE TABLE ["&amp;Trim(Tabnamestr)&amp;"] (" &amp; spfstr &amp; ")"<br />
set fu_Conn=server.createobject("ADODB.Connection")<br />
fu_Conn.open ConnStrs<br />
fu_Conn.Execute TempSqlStr<br />
fu_Conn.Close<br />
Set fu_Conn=Nothing<br />
If Err.Number = 0 Then<br />
CreatTable=True<br />
End If<br />
On Error GoTo 0<br />
End Function<br />
'**************************************************<br />
'函数ID：0045[在数据库中插入字段值]<br />
'函数名：InterTbValue<br />
'作 用：创建数据表<br />
'参 数：ConnStrs    ---- 数据库链接字串<br />
'参 数：Tabnamestr  ---- 数据表名称<br />
'参 数：CvArrstr    ---- 字段表 (写法： Fname1#Value|Fname2#Value|...) 最后一个不要写“|”<br />
'参 数：SqlType     ---- Sql语句类型 (0 Access 1 Mssqlserver)<br />
' Fname,Value 说明：字段名称,字段值<br />
'返回值：如果插入成功返回 True 否则 False<br />
'示 例：InterTbValue(basicDB(3),"cs","fa#t|fb#c|fc#n#")<br />
'**************************************************<br />
Public Function InterTbValue(ByVal ConnStrs,ByVal Tabnamestr,ByVal CvArrstr,ByVal SqlType)<br />
InterTbValue=False<br />
On Error GoTo 0<br />
On Error Resume Next<br />
Dim def_kh_l,def_kh_r,Filarray,Valuearray,Temparraya,Temparrayb,TempSqlStr1<br />
def_kh_l  =""<br />
def_kh_r  =""<br />
Temparraya=Split(CvArrstr,"|")<br />
For fai = LBound(Temparraya) To UBound(Temparraya)<br />
Temparrayb=Split(Temparraya(fai),"#")<br />
If (fai&lt;&gt; UBound(Temparraya)) Then<br />
Filarray  =Filarray &amp; "[" &amp; Temparrayb(0) &amp; "],"<br />
Valuearray=Valuearray &amp; "'" &amp; Temparrayb(1) &amp; "',"<br />
Else<br />
Filarray  =Filarray &amp; "[" &amp; Temparrayb(0) &amp; "]"<br />
Valuearray=Valuearray &amp; "'" &amp; Temparrayb(1) &amp; "'"<br />
End If<br />
Next<br />
TempSqlStr1="INSERT INTO [" &amp; Tabnamestr &amp; "] (" &amp; Filarray &amp; ") VALUES (" &amp; Valuearray &amp; ")"<br />
set fu1_Conn=server.createobject("ADODB.Connection")<br />
fu1_Conn.open ConnStrs<br />
fu1_Conn.Execute TempSqlStr1<br />
fu1_Conn.Close<br />
Set fu1_Conn=Nothing<br />
If Err.Number = 0 Then<br />
InterTbValue=True<br />
End If<br />
On Error GoTo 0<br />
End Function<br />
'**************************************************<br />
'函数ID：0046[Cookie防乱码写入时用]<br />
'函数名：CodeCookie<br />
'作 用：Cookie防乱码写入时用<br />
'参 数：str  ---- 字符串<br />
'返回值：整理后的字符串<br />
'示 例：<br />
'**************************************************<br />
Public Function CodeCookie(str)<br />
If isNumeric(str) Then str=Cstr(str)<br />
Dim newstr<br />
newstr=""<br />
For i=1 To Len(str)<br />
newstr=newstr &amp; ascw(mid(str,i,1))<br />
If i&lt;&gt; Len(str) Then newstr= newstr &amp; "a"<br />
Next<br />
CodeCookie=newstr<br />
End Function<br />
'**************************************************<br />
'函数ID：0047[Cookie防乱码读出时用]<br />
'函数名：DecodeCookie<br />
'作 用：Cookie防乱码读出时用<br />
'参 数：str  ---- 字符串<br />
'返回值：整理后的字符串<br />
'示 例：<br />
'**************************************************<br />
Public Function DecodeCookie(str)<br />
DecodeCookie=""<br />
Dim newstr<br />
newstr=Split(str,"a")<br />
For i = LBound(newstr) To UBound(newstr)<br />
DecodeCookie= DecodeCookie &amp; chrw(newstr(i))<br />
Next<br />
End Function<br />
'**************************************************<br />
'函数ID：0048[检测用户名和密码是否正确]<br />
'函数名：DecodeCookie<br />
'作 用：检测用户名和密码是否正确<br />
'参 数：ConnStrs    ---- 数据库链接字串<br />
'参 数：Tabnamestr  ---- 数据表名称<br />
'参 数：Tumc        ---- 用户名称字段名称<br />
'参 数：Cumc        ---- 用户名称<br />
'参 数：TCumm       ---- 用户密码字段名称<br />
'参 数：Cumm        ---- 用户密码<br />
'参 数：TUid        ---- 用户ID（标识）字段名称<br />
'返回值：检测成功返回 用户ID 否则 空字符串<br />
'示 例：<br />
'**************************************************<br />
Public Function CKUSMCMM(ByVal ConnStrs,ByVal Tabnamestr,ByVal Tumc,ByVal Cumc,ByVal Tumm,ByVal Cumm,ByVal TUid)<br />
CKUSMCMM=""<br />
On Error GoTo 0<br />
On Error Resume Next<br />
Set sfu_Conn=server.createobject("ADODB.Connection")<br />
Set sfu_Rs  =server.createobject("ADODB.Recordset")<br />
sfu_Conn.open ConnStrs<br />
sfu_sql_str="select " &amp; TUid &amp; "," &amp; Tumc &amp; "," &amp; Tumm &amp; " from " &amp; Tabnamestr<br />
sfu_Rs.open sfu_sql_str,sfu_Conn,1,1<br />
If sfu_Rs.RecordCount &gt;0 Then<br />
Do While Not sfu_Rs.Eof<br />
If (sfu_Rs(Tumc)=Cumc) AND (exmw(sfu_Rs(Tumm))=Cumm) Then<br />
CKUSMCMM=sfu_Rs(TUid)<br />
Exit Do<br />
End If<br />
sfu_Rs.MoveNext<br />
Loop<br />
End If<br />
sfu_Rs.Close<br />
sfu_Conn.Close<br />
Set sfu_Rs = Nothing<br />
Set sfu_Conn=Nothing<br />
On Error GoTo 0<br />
End Function<br />
'**************************************************<br />
'函数ID：0049[生成时间的整数]<br />
'函数名：GetMyTimeNumber()<br />
'作 用：生成时间的整数<br />
'参 数：lx  ---- 时间整数的类型<br />
' lx=0 到分钟 lx=1 到小时 lx=2 到天 lx=3 到月<br />
'返回值：生成时间的整数值(最小到分钟)<br />
'示 例：<br />
'**************************************************<br />
Public Function GetMyTimeNumber(lx)<br />
If lx=0 Then GetMyTimeNumber=Year(Date)*12*30*24*60+Month(Date)*30*24*60+Day(Date)*24*60+Hour(Time)*60+Minute(Time)<br />
If lx=1 Then GetMyTimeNumber=Year(Date)*12*30*24+Month(Date)*30*24+Day(Date)*24+Hour(Time)<br />
If lx=2 Then GetMyTimeNumber=Year(Date)*12*30+Month(Date)*30+Day(Date)<br />
If lx=3 Then GetMyTimeNumber=Year(Date)*12+Month(Date)<br />
End Function<br />
'**************************************************<br />
'函数ID：0050[获得栏目的所有子栏目字符串并用","隔开]<br />
'函数名：GTLMfunLM<br />
'作 用：获得栏目的所有子栏目字符串并用","隔开<br />
'参 数：LMid          ---- 栏目代码<br />
'参 数：ConnStrArray  ---- 栏目数据链接串<br />
'返回值：子栏目字符串并用","隔开<br />
'示 例：hh="数据表链接字串|父栏目字段名|栏目字段名|表名"<br />
'示 例：GTLMfunLM(22,basicDB(3) &amp; "|FTitId|TitId|TITS")<br />
'**************************************************<br />
Public Function GTLMfunLM(ByVal LMid,ByVal ConnStrArray)<br />
Dim LMstrxx,zdbz,Nlm<br />
zdbz=False<br />
LMstrxx=""<br />
aTempstr=GTLMfunLM_whil(LMid,ConnStrArray)<br />
LMstrxx=LMstrxx &amp; aTempstr<br />
If InStrRev(aTempstr,",") &gt; 0 Then<br />
Do While Not zdbz<br />
bTempstr=GTLMfunLM_Fj(aTempstr,ConnStrArray)<br />
LMstrxx=LMstrxx &amp; bTempstr<br />
If bTempstr="" Then zdbz=True<br />
aTempstr=bTempstr<br />
Loop<br />
Else<br />
LMstrxx=aTempstr<br />
End If<br />
LMstrxx=Trim(LMstrxx)<br />
If LMstrxx&lt;&gt;"" Then If Mid(LMstrxx,Len(LMstrxx),1) = ","  Then LMstrxx=Mid(LMstrxx,1,Len(LMstrxx)-1)<br />
GTLMfunLM=LMstrxx<br />
End Function<br />
Public Function GTLMfunLM_whil(ByVal LMidstr,ByVal ConnStrArray)<br />
ppTemp=Split(ConnStrArray,"|")<br />
GTLMfunLM_whil=""<br />
Set telm_Conn=server.createobject("ADODB.Connection")<br />
Set telm_Rs  =server.createobject("ADODB.Recordset")<br />
telm_Conn.open ppTemp(0)<br />
telm_sql_str="SELECT " &amp; ppTemp(1) &amp; "," &amp; ppTemp(2) &amp; " FROM " &amp; ppTemp(3) &amp; " WHERE (" &amp; ppTemp(1) &amp; "='" &amp; LMidstr &amp; "')"<br />
telm_Rs.open telm_sql_str,telm_Conn,1,1<br />
If telm_Rs.RecordCount &gt;0 Then<br />
Do While Not telm_Rs.Eof<br />
GTLMfunLM_whil=GTLMfunLM_whil &amp; Trim(telm_Rs(ppTemp(2))) &amp; ","<br />
telm_Rs.MoveNext<br />
Loop<br />
End If<br />
telm_Rs.Close<br />
telm_Conn.Close<br />
Set telm_Rs = Nothing<br />
Set telm_Conn=Nothing<br />
End Function<br />
Public Function GTLMfunLM_Fj(ByVal str,ByVal ConnStrArray)<br />
Dim templjid<br />
templjid=""<br />
If Trim(str)&lt;&gt;"" Then<br />
fjTemp=Split(str,",")<br />
For i = LBound(fjTemp) To UBound(fjTemp)<br />
If Trim(fjTemp(i))&lt;&gt;"" Then<br />
templjid=templjid &amp; GTLMfunLM_whil(fjTemp(i),ConnStrArray)<br />
End If<br />
Next<br />
End If<br />
GTLMfunLM_Fj=templjid<br />
End Function</p>
<p>%&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-functions-9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP使用MYSQL数据库全攻略</title>
		<link>http://www.3code.cn/asp-mysql/</link>
		<comments>http://www.3code.cn/asp-mysql/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 10:10:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[asp数据库]]></category>
		<category><![CDATA[PHP数据库操作]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1579</guid>
		<description><![CDATA[MYSQL数据库以它短小、方便、速度快、免费等优点成为很多网站目前首选数据库，但一般都是用PHP+MYSQL相结合来开发各种动态页面，其实ASP也可以使用MYSQL数据库开发动态页面，小弟我也是刚刚学会，不敢独享，所以特写了这篇文章供大伙参考。]]></description>
			<content:encoded><![CDATA[<p>MYSQL数据库以它短小、方便、速度快、免费等优点成为很多网站目前首选数据库，但一般都是用PHP+MYSQL相结合来开发各种动态页面，其实ASP也可以使用MYSQL数据库开发动态页面，小弟我也是刚刚学会，不敢独享，所以特写了这篇文章供大伙参考。</p>
<p>我的环境是WINDOWS98+PWS4.0+mysql-3.23.32-win+PHP4<br />
必要的软件：PWS4.0（呵呵，废话）<br />
mysql-3.23.32-win（这个是最新版的）<br />
myodbc-2.50.36-dll（这个是最重要的，MYSQL ODBC的驱动程序，可以到www.mysql.com下载）<br />
第一步：安装MYSQL ODBD的驱动程序，将下载的myodbd-2.50.46-dll文件复制到windows\system目录下(windows2000<br />
是winnt/system32)<br />
然后建立一新文件，扩展名为reg（就是注册表文件）,将以下内容复制到该文件中。<br />
REGEDIT4</p>
<p>[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\myodbc driver]<br />
"UsageCount"=dword:00000002<br />
"Driver"="C:\\WINDOWS\\System\\myodbc.dll"<br />
"Setup"="C:\\WINDOWS\\System\\myodbc.dll"<br />
"SQLLevel"="1"<br />
"FileUsage"="0"<br />
"DriverODBCVer"="02.50"<br />
"ConnectFunctions"="YYY"<br />
"APILevel"="1"<br />
"CpTimeout"="120"<br />
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]<br />
"myodbc driver"="installed"</p>
<p>保存后双击该文件，将上面代码注册到WINDOWS注册表中。<br />
如果安装在windows2000中,则Driver和Setup主键的值要做相应改变，这里我想就不用多说了。<br />
如果成功，在控制面板/ODBD数据源的驱动程序里将看到myodbd driver这一项！</p>
<p>第二步：建立ASP文件链接数据库。<br />
这里有两种方法，一种是在ODBC数据源中建立一个系统DSN。后来我发现不建立也可以在ASP中使用MYSQL,方<br />
法在下文将讲道。<br />
打开控制面板/ODBD数据源，选择系统DSN,然后添加一个新的DSN,驱动程序选择myodbd driver,会出现一个对<br />
话框供输入mysql<br />
相关信息。<br />
Windows DSN name: 所要建立DSN的名称<br />
Mysql Host (name or ip):Mysql服务器的名称或者是IP地址，通常填localhost<br />
Mysql database name:需要使用数据库的名称，数据库在Mysql管理程序中建立。这里我们使用一个例子。数<br />
据库名：hc188<br />
里面有数据表：user 数据表有两个字段分别是：username和password,随便插入几个<br />
数据。<br />
user:链接数据库的用户名，我填的是root超级用户<br />
password:链接数据库用户密码，如果没有，可以不填<br />
Port(if not 3306)：Mysql在服务器的端口，如果不填默认为3306<br />
SQL command on connect:使用sql命令链接数据库，这项可以不填<br />
填写完毕后选择OK保存。</p>
<p>下面链接数据库的ASP代码！</p>
<p>&lt;%<br />
strConnection = "dsn=hc188;driver={myodbd driver};server=localhost;uid=root;pwd=;database=hc188"<br />
Set adoDataConn = Server.CreateObject("ADODB.Connection")<br />
adoDataConn.Open strConnection</p>
<p>strQuery = "SELECT * FROM user"<br />
Set rs = adoDataConn.Execute(strQuery)<br />
If Not rs.BOF Then<br />
%&gt;<br />
&lt;TABLE&gt;<br />
&lt;TR&gt;<br />
&lt;TD&lt;b&gt;username&lt;/b&gt;&lt;/TD&gt;<br />
&lt;TD&gt;&lt;b&gt;password&lt;/b&gt;&lt;/TD&gt;<br />
&lt;/TR&gt;<br />
&lt;%<br />
Do While Not rs.EOF<br />
%&gt;<br />
&lt;TR&gt;<br />
&lt;TD&gt;&lt;%=rs("username")%&gt;&lt;/TD&gt;<br />
&lt;TD&gt;&lt;%=rs("password")%&gt;&lt;/TD&gt;<br />
&lt;/TR&gt;<br />
&lt;%<br />
rs.MoveNext<br />
Loop<br />
%&gt;<br />
&lt;/TABLE&gt;<br />
&lt;%<br />
Else<br />
Response.Write("Sorry, no data found.")<br />
End If</p>
<p>rs.Close<br />
adoDataConn.Close<br />
Set adoDataConn = Nothing<br />
Set rsEmailData = Nothing<br />
%&gt;</p>
<p>第二种方法：我在使用中想过如果不建立系统DSN，是否也可以使用MYSQL数据库呢？结果是可以的。<br />
方法很简单，把上面ASP代码第二行代码改为：<br />
strconnection="DefaultDir=;Driver={myodbc driver};database=hc188"</p>
<p>我奇怪的发现，这种方法连用户名和密码都不需要就可以使用。是不是MYSQL的一个BUG呢？</p>
<p>以上代码全部经测试通过！</p>
<p>到此，全文结束了，是不是很简单呢！希望能帮上你！</p>
<p>做人要厚道，请注明转自酷网动力(www.ASPCOOL.COM)。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP删除文件</title>
		<link>http://www.3code.cn/asp-deletefile-2/</link>
		<comments>http://www.3code.cn/asp-deletefile-2/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 18:22:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1575</guid>
		<description><![CDATA[ASP删除文件]]></description>
			<content:encoded><![CDATA[<p>set fso = createobject("scripting.filesystemobject")<br />
fso.deletefile(server.mappath("images\download\picture\" &amp; 文件名))<br />
set fso = nothing</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-deletefile-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>概述ASP .NET - TextBox 控件</title>
		<link>http://www.3code.cn/asp-net-textbox-%e6%8e%a7%e4%bb%b6/</link>
		<comments>http://www.3code.cn/asp-net-textbox-%e6%8e%a7%e4%bb%b6/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:59:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1546</guid>
		<description><![CDATA[概述ASP .NET - TextBox 控件
Previous Page Next Page TextBox 控件用于创建用户可输入文本的文本框。
TextBox 控件
TextBox 控件用于创建用户可输入文本的文本框。

下面的例子演示了您可能在 TextBox 控件中使用到的一些属性：
<html>
<body>]]></description>
			<content:encoded><![CDATA[<p><strong>概述ASP .NET - TextBox 控件</strong><br />
Previous Page Next Page TextBox 控件用于创建用户可输入文本的文本框。<br />
<strong>TextBox 控件</strong><br />
TextBox 控件用于创建用户可输入文本的文本框。</p>
<p>下面的例子演示了您可能在 TextBox 控件中使用到的一些属性：<br />
&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;form runat="server"&gt;<br />
A basic TextBox:<br />
&lt;asp:TextBox id="tb1" runat="server" /&gt;<br />
&lt;br /&gt;&lt;br /&gt;</p>
<p>A password TextBox:<br />
&lt;asp:TextBox id="tb2" TextMode="password" runat="server" /&gt;<br />
&lt;br /&gt;&lt;br /&gt;</p>
<p>A TextBox with text:<br />
&lt;asp:TextBox id="tb4" Text="Hello World!" runat="server" /&gt;<br />
&lt;br /&gt;&lt;br /&gt;</p>
<p>A multiline TextBox:<br />
&lt;asp:TextBox id="tb3" TextMode="multiline" runat="server" /&gt;<br />
&lt;br /&gt;&lt;br /&gt;</p>
<p>A TextBox with height:<br />
&lt;asp:TextBox id="tb6" rows="5" TextMode="multiline"<br />
runat="server" /&gt;<br />
&lt;br /&gt;&lt;br /&gt;</p>
<p>A TextBox with width:<br />
&lt;asp:TextBox id="tb5" columns="30" runat="server" /&gt;</p>
<p>&lt;/form&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><strong>添加脚本</strong><br />
当表单被提交时，TextBox 控件的内容和设置可通过服务器脚本进行修改。可通过点击一个按钮或当用户更改 TextBox 控件中的值对表单进行提交。</p>
<p>在下面的例子中，我们在一个 .aspx 文件中声明了一个 TextBox 控件、一个 Button 控件和一个 Label 控件。当提交按钮被触发时，submit 子例程就会被执行。submit 子例程会向 Label 控件写一条文本：</p>
<p>&lt;script runat="server"&gt;<br />
Sub submit(sender As Object, e As EventArgs)<br />
lbl1.Text="Your name is " &amp; txt1.Text<br />
End Sub<br />
&lt;/script&gt;</p>
<p>&lt;html&gt;<br />
&lt;body&gt;</p>
<p>&lt;form runat="server"&gt;<br />
Enter your name:<br />
&lt;asp:TextBox id="txt1" runat="server" /&gt;<br />
&lt;asp:Button OnClick="submit" Text="Submit" runat="server" /&gt;<br />
&lt;p&gt;&lt;asp:Label id="lbl1" runat="server" /&gt;&lt;/p&gt;<br />
&lt;/form&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;TIY</p>
<p>在下面的例子中，我们在一个 .aspx 文件中声明了一个 TextBox 控件和一个 Label 控件。当您更改了 TextBox 中的值，并且在 TextBox 外单击时，change 子例程就会被执行。change 子例程会向 Label 控件写一条文本：</p>
<p>&lt;script runat="server"&gt;<br />
Sub change(sender As Object, e As EventArgs)<br />
lbl1.Text="You changed text to " &amp; txt1.Text<br />
End Sub<br />
&lt;/script&gt;</p>
<p>&lt;html&gt;<br />
&lt;body&gt;</p>
<p>&lt;form runat="server"&gt;<br />
Enter your name:<br />
&lt;asp:TextBox id="txt1" runat="server"<br />
text="Hello World!"<br />
ontextchanged="change" autopostback="true"/&gt;<br />
&lt;p&gt;&lt;asp:Label id="lbl1" runat="server" /&gt;&lt;/p&gt;<br />
&lt;/form&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-net-textbox-%e6%8e%a7%e4%bb%b6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用ASP.NET - 维持 ViewState</title>
		<link>http://www.3code.cn/asp-net/</link>
		<comments>http://www.3code.cn/asp-net/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:56:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1544</guid>
		<description><![CDATA[用ASP.NET - 维持 ViewState

Previous Page Next Page 通过在 Web 表单中维持对象的 ViewState （视图状态），您可以省去大量的编码工作。

维持 ViewState （视图状态）
当 classic ASP 中的表单被提交时，所有的表单值都会被清空。设想一下，您提交了一张带有大量信息的表单，而服]]></description>
			<content:encoded><![CDATA[<p><strong>用ASP.NET - 维持 ViewState</strong></p>
<p>Previous Page Next Page 通过在 Web 表单中维持对象的 ViewState （视图状态），您可以省去大量的编码工作。<br />
<strong></strong></p>
<p><strong>维持 ViewState （视图状态）</strong><br />
当 classic ASP 中的表单被提交时，所有的表单值都会被清空。设想一下，您提交了一张带有大量信息的表单，而服务器返回了一个错误。您将不得不返回表单，然后更正其中的信息。您点击后退按钮，然后会发生什么呢... 所有的表单值都被清空了，而您将不得不重新开始所有的一切。站点不会维持您的 ViewState。</p>
<p>当 ASP .NET 中的表单被提交时，表单会随所有表单值一同重新出现。如何做到的呢？这是由于 ASP .NET 维持了您的 ViewState。ViewState 会在页面被提交到服务器时指示其状态。通过在每张页面中的一个 &lt;form runat="server"&gt; 控件中放置一个隐藏域，我们就可以定义页面的状态了。源代码可能类似这样：</p>
<p>&lt;form name="_ctl0" method="post" action="page.aspx" id="_ctl0"&gt;<br />
&lt;input type="hidden" name="__VIEWSTATE"<br />
value="dDwtNTI0ODU5MDE1Ozs+ZBCF2ryjMpeVgUrY2eTj79HNl4Q=" /&gt;</p>
<p>.....some code</p>
<p>&lt;/form&gt;维持 ViewState 是 ASP.NET Web 表单的默认设置。如果您不希望维持 ViewState，请在 .aspx 页面的顶部包含指令： &lt;%@ Page EnableViewState="false" %&gt;，或为任意控件添加属性：EnableViewState="false"。</p>
<p>请看下面的 .aspx 文件。它演示了老的运行方式。当您单击提交按钮时，表单值就会消失：</p>
<p>&lt;html&gt;<br />
&lt;body&gt;</p>
<p>&lt;form action="demo_classicasp.aspx" method="post"&gt;<br />
Your name: &lt;input type="text" name="fname" size="20"&gt;<br />
&lt;input type="submit" value="Submit"&gt;<br />
&lt;/form&gt;<br />
&lt;%<br />
dim fname<br />
fname=Request.Form("fname")<br />
If fname&lt;&gt;"" Then<br />
Response.Write("Hello " &amp; fname &amp; "!")<br />
End If<br />
%&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;TIY</p>
<p>这是新的 ASP .NET 方式。当您点击提交按钮时，表单值不会消失：</p>
<p>&lt;script runat="server"&gt;<br />
Sub submit(sender As Object, e As EventArgs)<br />
lbl1.Text="Hello " &amp; txt1.Text &amp; "!"<br />
End Sub<br />
&lt;/script&gt;</p>
<p>&lt;html&gt;<br />
&lt;body&gt;</p>
<p>&lt;form runat="server"&gt;<br />
Your name: &lt;asp:TextBox id="txt1" runat="server" /&gt;<br />
&lt;asp:Button OnClick="submit" Text="Submit" runat="server" /&gt;<br />
&lt;p&gt;&lt;asp:Label id="lbl1" runat="server" /&gt;&lt;/p&gt;<br />
&lt;/form&gt;</p>
<p>&lt;/body&gt;<br />
&lt;/html&gt;TIY （请在右边的框架中点击“查看原文档”，您可以看到 ASP .NET 已经向表单中添加了一个隐藏域，这样就可以维持 ViewState。）</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>简述ASP.NET Web 窗体</title>
		<link>http://www.3code.cn/%e7%ae%80%e8%bf%b0aasp-net-web/</link>
		<comments>http://www.3code.cn/%e7%ae%80%e8%bf%b0aasp-net-web/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:52:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1542</guid>
		<description><![CDATA[简述ASP.NET Web 窗体
Previous Page Next Page 所有服务器控件必须出现在 <form> 标签内，同时 <form> 标签必须包含 runat="server" 属性。

ASP.NET Web 表单
所有服务器控件必须出现在 <form> 标签内，同时 <form> 标签必须包含 runat="server" 属性。runat="server" 属]]></description>
			<content:encoded><![CDATA[<p><strong>简述ASP.NET Web 窗体</strong><br />
Previous Page Next Page 所有服务器控件必须出现在 &lt;form&gt; 标签内，同时 &lt;form&gt; 标签必须包含 runat="server" 属性。<br />
<strong></strong></p>
<p><strong>ASP.NET Web 表单</strong><br />
所有服务器控件必须出现在 &lt;form&gt; 标签内，同时 &lt;form&gt; 标签必须包含 runat="server" 属性。runat="server" 属性指示该表单必须在服务器进行处理。它还指示装入其中的控件能否被服务器脚本访问：</p>
<p>&lt;form runat="server"&gt;...HTML + server controls&lt;/form&gt;注释：该表单总是向自身页面进行提交。如果您规定了一个 action 属性，它会被忽略。如果您省略了 method 属性，它将被默认地设置为 method="post"。同时，如果您没有规定 name 和 id 属性，它们则由 ASP.NET 自动分配。</p>
<p><strong>注释：</strong>一个 .aspx 仅能包含一个 &lt;form runat="server"&gt; 控件！</p>
<p>如果您查看一个 .aspx 页面的源代码，而其中包含的表单不带有 name, method, action 或 id 属性，那么您将看到 ASP.NET 已经把这些属性添加到该表单。类似这样：</p>
<p>&lt;form name="_ctl0" method="post" action="page.aspx" id="_ctl0"&gt;...some code&lt;/form&gt;</p>
<p><strong>提交表单</strong><br />
表单通常通过点击一个按钮来提交。ASP.NET 中的 Button 服务器控件的格式是这样的：</p>
<p>&lt;asp:Button id="id" text="label" OnClick="sub" runat="server" /&gt;id 属性为按钮定义了一个唯一的名称，而 text 属性则为按钮分配了一个 label。onClick 事件句柄规定了一个要执行的子例程。</p>
<p>在下面的例子中，我们在一个 .aspx 文件中声明了一个按钮控件。一次鼠标单击就可以运行一个子例程，可以更改该按钮上的文本。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/%e7%ae%80%e8%bf%b0aasp-net-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>概述ASP.NET -事件</title>
		<link>http://www.3code.cn/%e4%ba%8b%e4%bb%b6-asp-net/</link>
		<comments>http://www.3code.cn/%e4%ba%8b%e4%bb%b6-asp-net/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:48:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1540</guid>
		<description><![CDATA[概述ASP.NET -事件
Previous Page Next Page 事件句柄（event handler）是一种针对给定事件来执行代码的子例程。

ASP.NET - 事件句柄
请看下面的代码：
<%]]></description>
			<content:encoded><![CDATA[<p><strong>概述ASP.NET -事件</strong><br />
Previous Page Next Page 事件句柄（event handler）是一种针对给定事件来执行代码的子例程。<br />
<strong></strong></p>
<p><strong>ASP.NET - 事件句柄</strong><br />
请看下面的代码：<br />
&lt;%<br />
lbl1.Text="The date and time is " &amp; now()<br />
%&gt;<br />
&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;form runat="server"&gt;<br />
&lt;h3&gt;&lt;asp:label id="lbl1" runat="server" /&gt;&lt;/h3&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;上面的代码什么时候会被执行？答案是：“我不知道. . .”<br />
Page_Load 事件<br />
Page_Load 事件是众多 ASP.NET 可理解的事件之一。Page_Load 事件会在页面加载时被触发，然后 ASP.NET 会自动调用子例程 Page_Load，并执行其中的代码：<br />
&lt;script runat="server"&gt;<br />
Sub Page_Load<br />
lbl1.Text="The date and time is " &amp; now()<br />
End Sub<br />
&lt;/script&gt;</p>
<p>&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;form runat="server"&gt;<br />
&lt;h3&gt;&lt;asp:label id="lbl1" runat="server" /&gt;&lt;/h3&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;注释：该 Page_Load 事件不包含对象引用或事件参数！</p>
<p><strong>Page.IsPostBack 属性</strong><br />
Page_Load 子例程会在页面每次加载时运行。如果您仅希望在页面第一次加载时执行 Page_Load 子例程中的代码，您可以使用 Page.IsPostBack 属性。如果 Page.IsPostBack 属性为 false，则页面第一次被载入，如果为 true，则页面传回服务器（例如，通过点击表单上的按钮）：</p>
<p>&lt;script runat="server"&gt;<br />
Sub Page_Load<br />
if Not Page.IsPostBack then<br />
lbl1.Text="The date and time is " &amp; now()<br />
end if<br />
End Sub</p>
<p>Sub Submit(s As Object, e As EventArgs)<br />
lbl2.Text="Hello World!"<br />
End Sub<br />
&lt;/script&gt;</p>
<p>&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;form runat="server"&gt;<br />
&lt;h3&gt;&lt;asp:label id="lbl1" runat="server" /&gt;&lt;/h3&gt;<br />
&lt;h3&gt;&lt;asp:label id="lbl2" runat="server" /&gt;&lt;/h3&gt;<br />
&lt;asp:button text="Submit" onclick="submit" runat="server" /&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;上面的例子仅在页面初次加载时创建 "The date and time is...." 这条消息。当用户点击 Submit 按钮时，submit 子例程将在第二个 label 创建 "Hello World!"，但第一个 label 中的日期和时间不会改变。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/%e4%ba%8b%e4%bb%b6-asp-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>概述ASP.NET - 服务器控件</title>
		<link>http://www.3code.cn/asp-net-k/</link>
		<comments>http://www.3code.cn/asp-net-k/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:39:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1537</guid>
		<description><![CDATA[概述ASP.NET - 服务器控件
Previous Page Next Page 服务器控件是服务器可以理解的标签。
Classic ASP 的局限性
<html>
<body bgcolor="yellow">
<center>
<h2>Hello W3School!</h2>
<p><%Response.Write(now())%></]]></description>
			<content:encoded><![CDATA[<p><strong>概述ASP.NET - 服务器控件</strong><br />
Previous Page Next Page 服务器控件是服务器可以理解的标签。<br />
<strong>Classic ASP 的局限性</strong><br />
&lt;html&gt;<br />
&lt;body bgcolor="yellow"&gt;<br />
&lt;center&gt;<br />
&lt;h2&gt;Hello W3School!&lt;/h2&gt;<br />
&lt;p&gt;&lt;%Response.Write(now())%&gt;&lt;/p&gt;<br />
&lt;/center&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;上面的代码能够反映出 Classic ASP 的局限性：代码块必须放置在需要进行输出的位置。<br />
通过 Classic ASP，我们是无法将可执行代码与 HTML 本身进行分离的。这使得页面难以阅读，也难以维护。<br />
<strong></strong></p>
<p><strong>ASP.NET - 服务器控</strong>件<br />
通过服务器控件，ASP.NET 已经解决了上面所描述的“意大利面条式代码”的问题。</p>
<p><strong>服务器控件是可被服务器理解的标签。<br />
有三种类型的服务器控件：</strong><br />
HTML 服务器控件 - 传统的 HTML 标签<br />
Web 服务器控件 - 新的 ASP.NET 标签<br />
Validation 服务器控件 - 用于输入验证<br />
<strong></strong></p>
<p><strong>ASP.NET - HTML 服务器控件</strong><br />
HTML 服务器控件是服务器可理解的 HTML 标签。<br />
ASP.NET 中的 HTML 元素是作为文本来进行处理的。要想使这些元素可编程，就需要向这些 HTML 元素添加 runat="server" 属性。该属性指示，此元素是一个服务器控件。同时要添加 id 属性来标识该服务器控件。id 引用可用于操作运行时的服务器控件。<br />
<strong>注释：</strong>所有 HTML 服务器控件必须位于带有 runat="server" 属性的 &lt;form&gt; 标签内。runat="server" 属性指示该表单应在服务器进行处理。它同时指示其包括在内的控件可被服务器脚本访问。<br />
在下面的例子中，我们在 .aspx 文件中声明了一个 HtmlAnchor 服务器控件。然后我们在一个事件句柄中操作该 HtmlAnchor 控件的 HRef 属性。Page_Load 事件是众多 ASP.NET 可理解的事件中的一种类型：<br />
<strong>注释：</strong>事件句柄（event handler）是一种针对给定事件执行代码的子例程。<br />
&lt;script runat="server"&gt;<br />
Sub Page_Load<br />
link1.HRef="http://www.w3school.com.cn"<br />
End Sub<br />
&lt;/script&gt;<br />
&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;form runat="server"&gt;<br />
&lt;a id="link1" runat="server"&gt;Visit W3School!&lt;/a&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;提示：可执行代码本身已被移到 HTML 之外了。<strong></strong></p>
<p><strong>ASP.NET - Web 服务器控件</strong><br />
Web 服务器控件是服务器可理解的特殊 ASP.NET 标签。<br />
类似 HTML 服务器控件，Web 服务器控件也在服务器上创建，它们同样需要 runat="server" 属性以使其生效。不过，Web 服务器控件没有必要映射任何已存在的 HTML 元素，它们代表更复杂的元素。<br />
<strong>创建 Web 服务器控件的语法是：</strong><br />
&lt;asp:control_name id="some_id" runat="server" /&gt;在下面的例子中，我们在 .aspx 文件中的声明了一个 Button 服务器控件。然后我们为 Click 事件创建了一个事件句柄，它可修改按钮上的文本：<br />
&lt;script runat="server"&gt;<br />
Sub submit(Source As Object, e As EventArgs)<br />
button1.Text="You clicked me!"<br />
End Sub<br />
&lt;/script&gt;<br />
&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;form runat="server"&gt;<br />
&lt;asp:Button id="button1" Text="Click me!" runat="server" OnClick="submit"/&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
<strong></strong></p>
<p><strong>&lt;/html&gt;ASP.NET - Validation 服务器控件</strong><br />
Validation 服务器控件用于验证用户输入。如果用户输入没有通过验证，将给用户显示一条错误消息。<br />
每种 validation 控件执行一种特定的验证类型（比如验证某个具体的值或者某个范围的值）。<br />
默认地，当点击 Button, ImageButton 或 LinkButton 时，页面验证才会被执行。您可通过把 CausesValidation 属性设置为 false，来阻止某个按钮控件被点击时进行验证。<br />
<strong>创建 Validation 服务器控件的语法是：</strong><br />
&lt;asp:control_name id="some_id" runat="server" /&gt;在下面的例子中，我们在 .aspx 文件中声明了一个 TextBox 控件，一个 Button 控件，以及一个 RangeValidator 控件。如果验证失败，文本 "The value must be from 1 to 100!" 将显示在 RangeValidator 控件中：<br />
&lt;html&gt;<br />
&lt;body&gt;<br />
&lt;form runat="server"&gt;<br />
&lt;p&gt;Enter a number from 1 to 100:<br />
&lt;asp:TextBox id="tbox1" runat="server" /&gt;<br />
&lt;br /&gt;&lt;br /&gt;<br />
&lt;asp:Button Text="Submit" runat="server" /&gt;<br />
&lt;/p&gt;<br />
&lt;p&gt;<br />
&lt;asp:RangeValidator<br />
ControlToValidate="tbox1"<br />
MinimumValue="1"<br />
MaximumValue="100"<br />
Type="Integer"<br />
Text="The value must be from 1 to 100!"<br />
runat="server" /&gt;<br />
&lt;/p&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;TIY</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-net-k/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET - Web 页面</title>
		<link>http://www.3code.cn/asp-net-web-%e9%a1%b5%e9%9d%a2/</link>
		<comments>http://www.3code.cn/asp-net-web-%e9%a1%b5%e9%9d%a2/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:30:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1534</guid>
		<description><![CDATA[ASP.NET - Web 页面
Previous Page Next Page 一个简单的 ASP.NET 页面看上去类似一张普通的 HTML 页面。
Hello W3School
为了开始我们的 ASP.NET 学习之旅，首先我们将构造一张简单的 HTML 页面，这张页面将在浏览器中显示 "Hello W3School"：
]]></description>
			<content:encoded><![CDATA[<p><strong>ASP.NET - Web </strong>页面<br />
Previous Page Next Page 一个简单的 ASP.NET 页面看上去类似一张普通的 HTML 页面。<br />
Hello W3School<br />
为了开始我们的 ASP.NET 学习之旅，首先我们将构造一张简单的 HTML 页面，这张页面将在浏览器中显示 "Hello W3School"：</p>
<p><strong>用 HTML 编写的 Hello W3School</strong><br />
这张 HTML 页面的 HTML 代码：<br />
&lt;html&gt;<br />
&lt;body bgcolor="yellow"&gt;<br />
&lt;center&gt;<br />
&lt;h2&gt;Hello W3School!&lt;/h2&gt;<br />
&lt;/center&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;如果您希望亲自试一试，可以把这些代码保存在名为 "firstpage.html" 的文件中，然后创建一个到此文件的链接，就像这样：firstpage.html。<br />
用 ASP.NET 编写的 Hello W3School<br />
把 HTML 页面转换为 ASP.NET 的最简单的方法是，把这个 HTML 文件拷贝为带有 .aspx 后缀的新文件。<br />
<strong>这些将把我们的例子显示为一个 ASP.NET 页面</strong>：<br />
&lt;html&gt;<br />
&lt;body bgcolor="yellow"&gt;<br />
&lt;center&gt;<br />
&lt;h2&gt;Hello W3School!&lt;/h2&gt;<br />
&lt;/center&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;如果您希望亲自试一试，请把这些代码保存在一个名为 "firstpage.aspx" 的文件中，并创建一个到此文件的链接：firstpage.aspx。<br />
<strong></strong></p>
<p><strong>它如何工作？</strong><br />
从根本上讲，ASP.NET 页面与 HTML 完全相同。<br />
HTML 页面的扩展名是 .htm 或 .html。假如浏览器从服务器请求某张 HTML 页面，服务器不进行任何修改，就会把该页面发往浏览器。<br />
ASP.NET 页面的扩展名是 .aspx。如果浏览器请求某张 ASP.NET 页面，那么在把结果发回浏览器之前，服务器首先会处理页面中的可执行代码。<br />
上面的 ASP.NET 页面不包含任何可执行的代码，因此也不会执行任何代码。在下面的例子中，我们将向页面添加一些可执行代码，以便向您演示静态 HTML 页面与动态 ASP 页面的不同之处。<strong></strong></p>
<p><strong>经典的 ASP</strong><br />
Active Server Pages (ASP) 已经流行很多年了。通过 ASP，可以把可执行代码放置于 HTML 页面内部。<br />
ASP.NET 之前的 ASP 版本经常被称为经典 ASP（Classic ASP）。<br />
ASP.NET 不完全兼容 Classic ASP，但是通过少量的修改，Classic ASP 可以良好地作为 ASP.NET 进行工作。</p>
<p><strong>用 Classic ASP 编写的动态页面</strong><br />
为了向您演示如何使用动态内容显示页面，我们向上面的例子添加了一些可执行代码：<br />
&lt;html&gt;<br />
&lt;body bgcolor="yellow"&gt;<br />
&lt;center&gt;<br />
&lt;h2&gt;Hello W3School!&lt;/h2&gt;<br />
&lt;p&gt;&lt;%Response.Write(now())%&gt;&lt;/p&gt;<br />
&lt;/center&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;&lt;% --%&gt; 标签内的代码在服务器上执行。<br />
Response.Write 是 ASP 代码，用来向 HTML 输出流文本。<br />
Now() 是一个可返回服务器当前日期和时间的函数。<br />
如果您希望亲自试一试，可以把这些代码保存在名为 "dynpage.asp" 的文件中，并创建一个指向该文件的链接：dynpage.asp。<br />
<strong></strong></p>
<p><strong>用 ASP .NET 编写的动态页面</strong><br />
下面的代码可把我们的例子显示为一个 ASP.NET 页面：<br />
&lt;html&gt;<br />
&lt;body bgcolor="yellow"&gt;<br />
&lt;center&gt;<br />
&lt;h2&gt;Hello W3School!&lt;/h2&gt;<br />
&lt;p&gt;&lt;%Response.Write(now())%&gt;&lt;/p&gt;<br />
&lt;/center&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;如果您希望亲自试一试，请把这些代码保存在名为 "dynpage.aspx" 的文件中，然后创建到此文件的链接：dynpage.aspx。<br />
ASP.NET vs Classic ASP<br />
上面的例子无法展示出 ASP.NET 与 Classic ASP 之间的不同之处。</p>
<p>正如您在最后的两个例子中看到的，在这个两个 ASP 和 ASP.NET 页面之间，没有什么不同之处。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-net-web-%e9%a1%b5%e9%9d%a2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP 与 ASP.NET 之间的比较</title>
		<link>http://www.3code.cn/asp-asp-net/</link>
		<comments>http://www.3code.cn/asp-asp-net/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:16:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1531</guid>
		<description><![CDATA[比较ASP 与 ASP.NET

ASP.NET 拥有更好的语言支持，一整套新的控件，基于 XML 的组件，以及更好的用户身份验证。

ASP.NET 通过允许编译的代码，提供了更强的性能。
ASP.NET 代码不完全向后兼容 ASP。

ASP.NET 的新特性
更好的语言支持 ]]></description>
			<content:encoded><![CDATA[<p><strong>比较ASP 与 ASP.NET </strong></p>
<p>ASP.NET 拥有更好的语言支持，一整套新的控件，基于 XML 的组件，以及更好的用户身份验证。</p>
<p><strong>ASP.NET 通过允许编译的代码，提供了更强的性能。<br />
ASP.NET 代码不完全向后兼容 ASP。<br />
</strong></p>
<p><strong>ASP.NET 的新特性</strong><br />
更好的语言支持<br />
可编程的控件<br />
事件驱动的编程<br />
基于 XML 的组件<br />
用户身份验证，带有帐号和角色<br />
更高的可伸缩性<br />
更强的性能 - 编译代码<br />
更容易配置和开发<br />
不完全的 ASP 兼容<br />
<strong></strong></p>
<p><strong>语言支持</strong><br />
ASP.NET 使用新的 ADO.NET。<br />
ASP.NET 支持完整的 Visual Basic，而非 VBScript。<br />
ASP.NET 支持 C# (C sharp) 和 C++。<br />
ASP.NET 支持 JScript，和以前一样。<br />
ASP.NET 控件<br />
ASP.NET 包含大量 HTML 控件。几乎所有页面中的 HTML 元素都能被定义为 ASP.NET 控件，而这些控件都能由脚本控制。<br />
ASP.NET 同时包含一系列新的面向对象的输入控件，比如可编程的列表框和验证控件。<br />
新的 data grid 控件支持分类、数据分页，以及您对一个数据集控件所期待的一切。<strong></strong></p>
<p><strong>事件驱动的控件</strong><br />
所有 Web 页面上的 ASP.NET 对象都能够发生可被 ASP.NET 代码处理的事件。<br />
可由代码处理的加载、点击和更改事件使得编程更轻松，更有条理。<br />
ASP.NET 组件<br />
ASP.NET 组件深入地基于 XML。比如新的 AD Rotator，它使用 XML 来存储广告信息和配置。<br />
用户身份验证<br />
ASP.NET 支持基于表单的用户身份验证，包括 cookie 管理和自动的非授权登录重定向。<br />
（您仍然能够定制自己的登陆页面和用户验证程序）。<br />
User 帐户和角色<br />
ASP.NET 允许用户帐户和角色，赋予每个用户（带有一个给定的角色）不同的服务器代码访问权限。<br />
<strong></strong></p>
<p><strong>高可伸缩性</strong><br />
ASP.NET 在提供更大的可伸缩性方面已有非常多的改善。<br />
服务器对服务器的通信已得到极大的增强，这使得在若干个服务器上按比例分配一个应用程序成为可能。关于这一点的一个例子是，我们有能力在不同的服务器上运行 XML 解析器、XSL 转换，甚至耗费资源的 session 对象。<br />
编译代码<br />
对服务器上 ASP.NET 页面的第一个请求是编译其 ASP.NET 代码，并在内存中保存一份缓存的备份。这样做的结果当然极大地提高了性能。<br />
易于配置<br />
通过纯文本文件就可完成对 ASP.NET 的配置。<br />
配置文件可在应用程序运行时进行上传和修改。无需重起服务器。也没有 metabase 和注册方面的难题。<br />
<strong></strong></p>
<p><strong>易于开发</strong><br />
不需要重起服务器来配置和替换已编译的代码。ASP.NET 会简单地把所有新的请求重定向到新的代码。<br />
<strong></strong></p>
<p><strong>兼容性</strong><br />
ASP.NET 不完全兼容早期的 ASP 版本，所有大部分旧的 ASP 代码需要进行修改才能在 ASP.NET 下运行。<br />
为了解决这个问题，ASP.NET 使用了一个新的文件后缀 ".aspx"。这样就使 ASP.NET 应用程序与 ASP 应用程序能够一起运行在同一个服务器上。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-asp-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET简介</title>
		<link>http://www.3code.cn/asp-net-intr/</link>
		<comments>http://www.3code.cn/asp-net-intr/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:08:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1529</guid>
		<description><![CDATA[ASP.NET简介
什么是 ASP？
ASP 是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术。
ASP 是一项微软公司的技术
ASP 指 Active Server Pages（动态服务器页面）
ASP 是运行于 IIS 之中的程序
IIS 指 Internet Information Services]]></description>
			<content:encoded><![CDATA[<p><strong> </strong><strong>ASP.NET</strong><strong>简介</strong><br />
<strong>什么是 ASP？</strong><br />
ASP 是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术。<br />
ASP 是一项微软公司的技术<br />
ASP 指 Active Server Pages（动态服务器页面）<br />
ASP 是运行于 IIS 之中的程序<br />
IIS 指 Internet Information Services（因特网信息服务）<br />
IIS 是 Windows 2000 捆绑的免费组件<br />
IIS同时也是 Windows NT 4.0 的可选组件<br />
此可选组件可通过因特网下载<br />
PWS 的体积更小 - 不过拥有 IIS 的完整功能<br />
PWS 可在 Windows 95/98 的安装 CD 中找到<br />
<strong>ASP 文件是什么？</strong><br />
ASP 文件和 HTML文件类似<br />
ASP 文件可包含文本、HTML、XML 和脚本<br />
ASP 文件中的脚本可在服务器上执行。<br />
ASP 文件的扩展名是 ".asp"<br />
<strong>它如何工作？</strong><br />
当浏览器请求某个 HTML 文件时，服务器会返回这个文件<br />
而当浏览器请求某个 ASP 文件时，IIS 将这个请求传递至 ASP 引擎<br />
ASP 引擎会逐行地读取这个文件，并执行文件中的脚本<br />
最后，ASP 文件将以纯 HTML 的形式返回到浏览器<br />
在您继续学习 ASP .NET 之前，拥有对微软 ASP 技术的基本了解释有帮助的。<br />
<strong>什么是 ASP+？</strong><br />
ASP+ 等同于 ASP.NET。<br />
ASP+ 是微软研发 ASP.NET 期间所使用的早期名称。<br />
<strong>什么是 ASP.NET？</strong><br />
ASP 3.0 是 ASP 的最新版本，但不会再有 ASP 4.0 版本了。</p>
<p>ASP.NET 是下一代的 ASP，但是不能把 ASP.NET 称为 ASP 的升级版本。ASP.NET 是全新的服务器端 ASP 脚本。</p>
<p>ASP.NET 是 .NET 框架的组成部分。微软耗时三年从底层重写了 ASP.NET，而 ASP.NET 无法完全向后兼容 ASP 3.0。</p>
<p><strong>.NET 框架（.NET Framework）</strong><br />
.NET 框架是微软 .NET 平台的基础结构。</p>
<p>.NET 框架是构建、开发及运行 Web 应用程序和 Web 服务的一种环境。</p>
<p>.NET 框架含有公共语言运行库和公共类库 - 比如 ADO.NET、ASP.NET 以及 Windows 窗体 - 来提供可整合入各种计算机系统的高级标准服务。</p>
<p>.NET 框架可提供特性丰富的应用程序环境、简化的开发以及众多开发语言之间的轻松整合。</p>
<p>.NET 框架中立于语言。目前，它支持 C++、C#、Visual Basic 以及 JScript（微软的 JavaScript 版本）。</p>
<p>微软的 Visual Studio.NET 是针对 NET Framework 的公共开发环境。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-net-intr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>祥解常用Response对象的使用</title>
		<link>http://www.3code.cn/response-use/</link>
		<comments>http://www.3code.cn/response-use/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 02:39:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1419</guid>
		<description><![CDATA[祥解常用Response对象的使用
每一个程序语言或开发工具都有一定的函数与用户进行沟通，Asp同样如此。在Asp中负责将信息传递给用户的对象就是Response对象。 Response对象用于动态响应客户端请求（Request），并将动态生成的响应结果返回到客户端浏览器中，使用Response对象可以直接发送信息给浏览器、重定向浏览器到另一个 URL 或设置 cookie 的值等等。 Response对象在asp编程中非常广泛，也是一种非常好用的工具。下面我们来具体看看Response对象]]></description>
			<content:encoded><![CDATA[<p><strong>祥解常用Response对象的使用</strong><br />
每一个程序语言或开发工具都有一定的函数与用户进行沟通，Asp同样如此。在Asp中负责将信息传递给用户的对象就是Response对象。Response对象用于动态响应客户端请求（Request），并将动态生成的响应结果返回到客户端浏览器中，使用Response对象可以直接发送信息给浏览器、重定向浏览器到另一个 URL 或设置 cookie 的值等等。 Response对象在asp编程中非常广泛，也是一种非常好用的工具。下面我们来具体看看Response对象：<br />
<strong>语法:</strong><br />
<strong>Response.collection|property|method<br />
一、集合</strong><br />
Response 对象只有一个集合 --Cookies，Cookies数据集合允许将数据设置在客户端的浏览器中。若指定的 cookie 不存在，则创建它。若存在，则自动更新数据。<br />
<strong>语法:</strong>Response.Cookies(Cookie)[Key.Attribute]<br />
这里的 cookie 是指定 cookie 的名称。而如果指定了 key，则该 cookie 就是一个字典。attribute 指定 cookie 自身的有关信息。attribute 参数可以是下列之一 :<br />
Domain 只写。若被指定，则 cookie 将被发送到对该域的请求中去。<br />
Expires 只写。指定 cookie 的过期日期。为了在会话结束后将 cookie 存储在客户端磁盘上，必须设置该日期。若此项属性的设置未超过当前日期，则在任务结束后 cookie 将到期。<br />
HasKeys 只读。指定 cookie 是否包含关键字。<br />
Path 只写。若被指定，则 cookie 将只发送到对该路径的请求中。如果未设置该属性，则使用应用程序的路径。<br />
Secure 只写。指定Cookie是否安全。<br />
<strong>示例：</strong><br />
&lt;%<br />
Response.Cookies("wrclub")("weburl")="http://www.wrclub.net"<br />
Response.Cookies("wrclub").path="/wrclub/"<br />
Response.Cookies("wrclub").Expires=#2003-11-30#<br />
%&gt;</p>
<p><strong>二、方法</strong><br />
Response.AddHeader Name,Value<br />
向应答中添加一个新的HTML标题。Name为新HTML标题的名称。Value为该头变量的值。你可以添加任何名称和任何值的HTML标题。它并不替代现有的同名标题。一旦标题被添加，将不能删除。<br />
Response.AppendToLog String<br />
向Web服务器的日志条目的末尾添加一字符串。String为要添加到日志文件中的字符串。<br />
Response.BinaryWrite Data<br />
该方法可以不经任何字符转换就将制定的信息写到HTTP输出，主要用于写非字符串信息（如客户端应用程序所需的二进制数据等）。Data是要发送的数据。<br />
Response.Clear<br />
删除缓冲区的所有HTML输出，但只删除响应正文而不删除响应标题。可以用该方法处理错误情况。需要注意的是，如果Response.Buffer设置为True，则该方法将导致运行是错误。<br />
Response.End<br />
强迫Web服务器停止执行更多的脚本，并发送当前结果，文件中剩余的内容将不被处理。如果Response.Buffer设置为True，则调用Response.end将缓冲输出。<br />
Response.Flush<br />
对于一个缓冲的回应，发送所有的缓冲信息。如果Response.Buffer设置为True，则该方法将导致运行是错误。<br />
Response.Redirect URL<br />
将客户端的浏览器重定向到一个新的Internet地址。Url为新网页的Internet地址。<br />
Response.Write Variant<br />
Response.Write是Response对象最常用的方法，该方法可以向浏览器发送字符串。Variant是一字符串或一个具有字符串值的变量。<br />
<strong><br />
三、属性</strong><br />
Response.Buffer<br />
缓冲一Active Server Page。回应只到某一页结束或Response.Flush或Response.End方法调用时才发送出去。服务器将输出送给客户端后就不能再设置Buffer属性。<br />
Response.CacheControl<br />
指明是否Proxy服务器能缓存Active Server Page。缺省时，其值为FALSE 。当设置其属性为Public时，Proxy服务器可以缓冲由Asp产生的输出。<br />
Response.CharSet(Charsetname)<br />
将字符集名称（如GB）附加到Response对象中content-type标题的后面，用来设置web服务器响应给客户端的文件字符编码。一个可能的值为“ISO_LATIN_1”。<br />
Response.ContentType<br />
指明回应内容的类型。可能的值为text/plain和image/GIF，默认值text/HTML。<br />
Response.Expires<br />
浏览器可以缓存当前页的时间长度，以分钟为单位。</p>
<p>Response.ExpiresAbsolute<br />
浏览器不能再缓存当前页的日期和时间。在未到期之前，可以返回。如果未指定时间，该主页在当天午夜到期；如果未指定日期，则到当天指定时间到期。</p>
<p>True/False = Response.IsClientConnected<br />
属性为只读，指明自上次调用Response.Write之后，客户端是否仍然和服务器连接。该属性允许用户在客户端和服务器没有联接的情况下有更多的控制。例如，在从客户端提出请求起到服务器做出相应，其间要用去很长一段时间的情况下，这就可能有助于确保在继续处理脚本之前客户端仍是连通的。具有值TRUE或FALSE。</p>
<p>Response.PICS (PICS 字符串)<br />
用于添加网页的PICS等级。PICS级别指明某一网页的内容级别，比如暴力或色情的程度等。<br />
Response.Status = "状态描述字符串"<br />
用来设置Web服务器要响应的状态行的值。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/response-use/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP Response.Buffer详细介绍</title>
		<link>http://www.3code.cn/asp-response-buffer/</link>
		<comments>http://www.3code.cn/asp-response-buffer/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 06:11:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1519</guid>
		<description><![CDATA[缓冲区是存储一系列的数据的地方，客户端所获得的数据可以从程序的执行结果直接输出，也可以从缓冲区输出。但是这两种方式在速度上是有差异的：在web 中，当一个asp程序被请求的次数不多时，二者基本上没有什么差异，至少我们感觉不出来。但是当有很多人请求一个asp程序时，速度可就不一样了。如果没有缓冲区，那么每个请求asp程序的人的客户端所得到的结果都是asp程序执行一次所得到的结果，而如果预先将asp程序缓冲，那么每个客户端所得到的结果就是缓冲区的结果，不是执行一次程序的结果。比如有1000个用户同时访问一个asp页面，如果这个asp程序没有缓冲，那么程序将被执行一千次，这样服务器的负荷就回加大，从而导致客户端打开页面速度变慢；如果这个asp程序被缓冲了，那么结果就不一样了，每个客户端直接从缓冲区获得数据，服务器将不会因为访问增加而增加程序执行次数，因此客户端打开页面的速度也就比上一种情况要快。这就是Buffer的好处。]]></description>
			<content:encoded><![CDATA[<p><strong>一、Buffer</strong></p>
<p>Buffer从英文直译过来的意思是“缓冲区”，这里我们将它称为缓冲，因为它不仅是个名词，还是个动词。</p>
<p>缓冲区是存储一系列的数据的地方，客户端所获得的数据可以从程序的执行结果直接输出，也可以从缓冲区输出。但是这两种方式在速度上是有差异的：在web 中，当一个asp程序被请求的次数不多时，二者基本上没有什么差异，至少我们感觉不出来。但是当有很多人请求一个asp程序时，速度可就不一样了。如果没有缓冲区，那么每个请求asp程序的人的客户端所得到的结果都是asp程序执行一次所得到的结果，而如果预先将asp程序缓冲，那么每个客户端所得到的结果就是缓冲区的结果，不是执行一次程序的结果。比如有1000个用户同时访问一个asp页面，如果这个asp程序没有缓冲，那么程序将被执行一千次，这样服务器的负荷就回加大，从而导致客户端打开页面速度变慢；如果这个asp程序被缓冲了，那么结果就不一样了，每个客户端直接从缓冲区获得数据，服务器将不会因为访问增加而增加程序执行次数，因此客户端打开页面的速度也就比上一种情况要快。这就是Buffer的好处。</p>
<p><strong>二、如何将asp程序缓冲</strong></p>
<p>这个问题其实很简单，只要在asp程序的第一行加上：<br />
&lt;% Response.Buffer = True %&gt;<br />
就可以了。<br />
这句话的意思就是指明输出页面是否被缓冲，当属性值为True时，服务器将不会向客户端发送任何信息，直到所有程序执行完或者遇到<br />
&lt;% Response.Flush %&gt;或&lt;% Response.End %&gt;<br />
语句，才会释放缓冲区的信息。</p>
<p>运用:提高用户体验<br />
这样我们在运行需要进行复杂运算或循环次数多的程序时,就可又用&lt;% Response.Flush %&gt;输出缓冲区的信息,一边运行一边输出,减少用户等待时间.增强用户体验.</p>
<p><strong>三、总结</strong></p>
<p>Response 的Buffer属性虽然能够提高页面显示速度，但是也要分什么情况。如果你正在制作一个普通的个人主页，访问量不是很高，并且没有什么复杂的执行程序，那么用不用这个属性就不是很重要，因为将数据缓冲也需要一段时间，只不过我们感觉不到罢了；但是如果你正在制作一个大型论坛或者一个产品展示或其他的商务站点，并且访问量很高，那么我建议在程序的第一行加入<br />
&lt;% Response.Buffer = True %&gt;<br />
这句话，因为这样能够让客户在有效的时间内获得更多的数据。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-response-buffer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP判断cookie是否开启</title>
		<link>http://www.3code.cn/asp-cookie-use/</link>
		<comments>http://www.3code.cn/asp-cookie-use/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 06:09:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1517</guid>
		<description><![CDATA[判断方法一：
无论何时你在两页之间，有一个非常简单可靠的方法：请求一个SessionID在第一页，传递它到下一页。与这一页请求到的SessionID比较。相同说明客户端浏览器接受Cookies;不同则不接受。很简单吧。
比如你可以在第一页中放一个(hidden field)，并把SessionID写入它。提交后，从页面数据中取出SessionID．像这样：]]></description>
			<content:encoded><![CDATA[<p>判断方法一：<br />
无论何时你在两页之间，有一个非常简单可靠的方法：请求一个SessionID在第一页，传递它到下一页。与这一页请求到的SessionID比较。相同说明客户端浏览器接受Cookies;不同则不接受。很简单吧。<br />
比如你可以在第一页中放一个(hidden field)，并把SessionID写入它。提交后，从页面数据中取出SessionID．像这样：<br />
&lt;form name="Form1" method="post" action="sessions2.asp"&gt;<br />
UserName:&lt;input name="username"&gt;&lt;br&gt;<br />
Password:&lt;input name="userpassword"&gt;<br />
&lt;input type="hidden" name="theSessionID" value="&lt;%=Session.SessionID%&gt;"&gt;&lt;br&gt;<br />
&lt;input type="submit" value="Submit"&gt;<br />
&lt;/form&gt;<br />
在第二页中我们来判断SessionID是否相同。<br />
&lt;%<br />
dim theSessionID<br />
theSessionID = Request.Form("theSessionID")<br />
If theSessionID = Session.SessionID Then<br />
"当二者相等时，则cookie功能开启<br />
Response.Write "Cookie已开启"<br />
Else<br />
"若二者相等时，则cookie功能关闭<br />
Response.Write "Cookie没有开启!"<br />
End If<br />
%&gt;</p>
<p>判断方法二：<br />
也可用这种方法，首先在一个页面里写入一个cookie，如:<br />
&lt;%<br />
Response.Cookies("status")="onoroff"<br />
%&gt;<br />
在第二页里读出此cookie：<br />
&lt;%<br />
if Request.Cookies("status")="" then<br />
"当cookies("status")里没有值时，则cookie功能没有开启<br />
Response.Write "Cookie没有开启!"<br />
else<br />
"当cookies("status")里有值时，则cookie功能开启<br />
Response.Write "Cookie已开启"<br />
end if<br />
%&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp-cookie-use/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>怎样用ASP实现网上“五子棋”大赛</title>
		<link>http://www.3code.cn/asp_exaple/</link>
		<comments>http://www.3code.cn/asp_exaple/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 15:21:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ASP]]></category>

		<guid isPermaLink="false">http://www.3code.cn/?p=1514</guid>
		<description><![CDATA[怎样用ASP实现网上“五子棋”大赛

“五子棋”是大家都非常熟悉的一种益智类游戏，相关的游戏软件也非常多，在此我向大家隆重推出一款新的纯“网络版”的五子棋，它利用ASP做为开发环境，因此在Internet上对战的时候无需下载客户端软件，只要你有一个浏览器就可以了。你也可以在局域网上进行这个游戏。
游戏的过程是这样的，我们首先登录，然后可以选择战场，有“金星”、“木星”、“水星”、“火星”、“土星”等五个战场，如果你自认为是一个高手，可以选择金星，否则可以依次选择其它几个星球做为战场。如果这个星]]></description>
			<content:encoded><![CDATA[<p><strong>怎样用ASP实现网上“五子棋”大赛</strong></p>
<p><strong>“五子棋”</strong>是大家都非常熟悉的一种益智类游戏，相关的游戏软件也非常多，在此我向大家隆重推出一款新的纯“网络版”的五子棋，它利用ASP做为开发环境，因此在Internet上对战的时候无需下载客户端软件，只要你有一个浏览器就可以了。你也可以在局域网上进行这个游戏。<br />
游戏的过程是这样的，我们首先登录，然后可以选择战场，有“金星”、“木星”、“水星”、“火星”、“土星”等五个战场，如果你自认为是一个高手，可以选择金星，否则可以依次选择其它几个星球做为战场。如果这个星球上没有擂主，你就应该以擂主的身份进入，然后别人就可以和你进行对战了。当然，如果所有的星球上都已经开始了战争，那么你就只能等一会儿了。<br />
如果你是以擂主身份进入的，你可以等待别人来和你对战，如果你是以攻擂手的身份登录，你可以很快的和擂主展开战斗。开始战斗后，由擂主执黑先行，然后由攻擂手出招，如此这般。当最后决出胜负的时候，会有相应的提示。<br />
该站点有几个主要的文件是：<br />
Index.asp 登录文件：<br />
Index0.asp中间文件：<br />
Match.asp 比赛文件：<br />
Back0.jpg white0.jpg black0.jpg 中间用到的图形文件，分别指的棋盘，白子和黑子，如下图：<br />
在程序的初始化的时候，将棋盘上分成若干的表格，将背景图片放入其中，形成一个棋盘，然后在放上一个棋子后，再将图片换上相应的白子或黑子就可以了。<br />
先看看登录文件：<br />
＜%@ Language=VBScript %＞<br />
＜HTML＞<br />
＜HEAD＞<br />
＜META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"＞<br />
＜title＞星球大战之“五子连珠”大赛！＜/title＞<br />
＜/HEAD＞<br />
＜BODY＞</p>
<p>＜p align=center＞＜font size=6＞星球大战＜/font＞＜/P＞<br />
＜table border=1 width=80% align=center＞<br />
＜tr＞＜td＞星球＜/td＞＜td＞擂主＜/td＞＜td＞大战＜/td＞＜td＞攻擂＜/td＞＜/tr＞<br />
＜tr＞<br />
＜td＞金星＜/td＞<br />
＜td＞<br />
＜%<br />
if application("first1")="" then<br />
%＞<br />
＜form action=index0.asp?flag=First1 method=post＞<br />
＜INPUT id=text1 name=txtFirst1 size=10＞＜INPUT id=submit1 name=submit1<br />
type=submit value=进入＞<br />
＜/form＞<br />
＜%<br />
else<br />
response.write application("first1")<br />
end if<br />
%＞<br />
＜/td＞<br />
＜td＞大战＜/td＞<br />
＜td＞<br />
＜%<br />
if application("second1")="" then<br />
%＞</p>
<p>＜form action=index0.asp?flag=second1 method=post＞<br />
＜INPUT id=text1 name=txtSecond1 size=10＞＜INPUT id=submit1<br />
name=submit1 type=submit value=进入＞<br />
＜/form＞<br />
＜%<br />
else<br />
response.write application("Second1")<br />
end if<br />
%＞<br />
＜/td＞<br />
＜/tr＞</p>
<p>＜tr＞<br />
＜td＞木星＜/td＞<br />
＜td＞<br />
＜%<br />
if application("first2")="" then<br />
%＞<br />
＜form action=index0.asp?flag=First2 method=post＞<br />
＜INPUT id=text1 name=txtFirst2 size=10＞＜INPUT id=submit1 name=submit1<br />
type=submit value=进入＞<br />
＜/form＞<br />
＜%<br />
else<br />
response.write application("first2")<br />
end if<br />
%＞<br />
＜/td＞<br />
＜td＞大战＜/td＞<br />
＜td＞<br />
＜%<br />
if application("second2")="" then<br />
%＞</p>
<p>＜form action=index0.asp?flag=second2 method=post＞<br />
＜INPUT id=text1 name=txtSecond2 size=10＞＜INPUT id=submit1<br />
name=submit1 type=submit value=进入＞<br />
＜/form＞<br />
＜%<br />
else<br />
response.write application("Second2")<br />
end if<br />
%＞<br />
＜/td＞<br />
＜/tr＞</p>
<p>＜tr＞<br />
＜td＞金星＜/td＞<br />
＜td＞<br />
＜%<br />
if application("first3")="" then<br />
%＞<br />
＜form action=index0.asp?flag=First3 method=post＞<br />
＜INPUT id=text1 name=txtFirst3 size=10＞＜INPUT id=submit1 name=submit1<br />
type=submit value=进入＞<br />
＜/form＞<br />
＜%<br />
else<br />
response.write application("first3")<br />
end if<br />
%＞<br />
＜/td＞<br />
＜td＞大战＜/td＞<br />
＜td＞<br />
＜%<br />
if application("second3")="" then<br />
%＞</p>
<p>＜form action=index0.asp?flag=second3 method=post＞<br />
＜INPUT id=text1 name=txtSecond3 size=10＞＜INPUT id=submit1<br />
name=submit1 type=submit value=进入＞<br />
＜/form＞<br />
＜%<br />
else<br />
response.write application("Second3")<br />
end if<br />
%＞<br />
＜/td＞<br />
＜/tr＞</p>
<p>＜tr＞<br />
＜td＞金星＜/td＞<br />
＜td＞<br />
＜%<br />
if application("first4")="" then<br />
%＞<br />
＜form action=index0.asp?flag=First4 method=post＞<br />
＜INPUT id=text1 name=txtFirst4 size=10＞＜INPUT id=submit1 name=submit1<br />
type=submit value=进入＞<br />
＜/form＞<br />
＜%<br />
else<br />
response.write application("first4")<br />
end if<br />
%＞<br />
＜/td＞<br />
＜td＞大战＜/td＞<br />
＜td＞<br />
＜%<br />
if application("second4")="" then<br />
%＞</p>
<p>＜form action=index0.asp?flag=second4 method=post＞<br />
＜INPUT id=text1 name=txtSecond4 size=10＞＜INPUT id=submit1<br />
name=submit1 type=submit value=进入＞<br />
＜/form＞<br />
＜%<br />
else<br />
response.write application("Second4")<br />
end if<br />
%＞<br />
＜/td＞<br />
＜/tr＞</p>
<p>＜tr＞<br />
＜td＞金星＜/td＞<br />
＜td＞<br />
＜%<br />
if application("first5")="" then<br />
%＞<br />
＜form action=index0.asp?flag=First5 method=post＞<br />
＜INPUT id=text1 name=txtFirst5 size=10＞＜INPUT id=submit1 name=submit1<br />
type=submit value=进入＞<br />
＜/form＞<br />
＜%<br />
else<br />
response.write application("first5")<br />
end if<br />
%＞<br />
＜/td＞<br />
＜td＞大战＜/td＞<br />
＜td＞<br />
＜%<br />
if application("second5")="" then<br />
%＞</p>
<p>＜form action=index0.asp?flag=second5 method=post＞<br />
＜INPUT id=text1 name=txtSecond5 size=10＞＜INPUT id=submit1<br />
name=submit1 type=submit value=进入＞<br />
＜/form＞<br />
＜%<br />
else<br />
response.write application("Second5")<br />
end if<br />
%＞<br />
＜/td＞<br />
＜/tr＞<br />
＜/table＞<br />
＜/BODY＞<br />
＜/HTML＞</p>
<p>这个文件不用做过多的说明，就是一个大的表格，大家可以从那里进入，如果某个位置已经被使用，则它会变成该大 侠的名字，不允许重复登录。在登录后进入<br />
index0.asp，这是一个中间交换文件，在里面进行一些变量的处理及赋值，然后再进入match.asp，进行正式的比赛。我们来看一下index0.asp的内容：</p>
<p>＜%@ Language=VBScript %＞<br />
＜%<br />
if Request.Form("txt" &amp; request.querystring("flag"))＜＞"" then<br />
'response.write "in!" &amp; ""<br />
session("nice")=Request.Form("txt" &amp; request.querystring("flag"))<br />
'response.write session("nice") &amp; ""<br />
'response.write application(request.querystring("flag"))<br />
if application(request.querystring("flag"))="" then<br />
application(request.querystring("flag"))=session("nice")<br />
session("class")=right(request.querystring("flag"),1)<br />
if left(request.querystring("flag"),1)="f" then<br />
application(session("nice"))=false<br />
elseif left(request.querystring("flag"),1)="s" then<br />
application(session("nice"))=false<br />
application(application("first" &amp; session("class")))=true<br />
end if<br />
Response.Redirect "match.asp"<br />
end if</p>
<p>end if</p>
<p>%＞<br />
＜HTML＞<br />
＜/HTML＞</p>
<p>该程序中，用session(“nice”)来记录您登录的大名，以后的处理中，很多都要用到它，用它来区分很多的用户。如果您是从擂主的位置进入，则您的权利是<br />
first，否则是second，用session("class")来记录位于哪个战场场，“金”“木”<br />
“水”“火”“土”分别表示为1、2、3、4、5，因为有多个战场可能同时开战，如果不能正确地区分开，则可能导致一片混乱。application(session("nice"))是一个逻辑型变量，用真假来表示您是否可以出棋，如果是假，您要等待一个，如果是真，您就可以下棋了。只有一个战场上的两个人都进入了以后，擂主方可以下棋，而且只有当擂主出子以后，攻擂手才可以下棋。准备好以后，下面就进入赛场，请看文件match.asp</p>
<p>＜html＞<br />
＜head＞<br />
＜meta http-equiv="Content-Type" content="text/html; charset=gb2312"＞<br />
＜meta name="GENERATOR" content="Microsoft FrontPage 4.0"＞<br />
＜meta name="ProgId" content="FrontPage.Editor.Document"＞<br />
＜META http-equiv=refresh content=3＞<br />
＜title＞连珠大赛...＜/title＞<br />
＜/head＞<br />
＜%<br />
Response.Write "擂主:" &amp; application("first" &amp; session("class"))<br />
&amp; "    攻擂：" &amp; application("second" &amp; session<br />
("class"))<br />
if Request.QueryString("pos")＜＞"" then<br />
application("pos" &amp; session("class") &amp; Request.QueryString("pos"))<br />
=true<br />
end if<br />
%＞<br />
＜body＞<br />
＜%<br />
'Response.Write application("aaa")<br />
if application("first" &amp; session("class"))=session("nice") then<br />
color="black"<br />
if Request.QueryString("pos")＜＞"" then<br />
if session("last")="" then session("last")="abc"<br />
if session("last")＜＞ Request.QueryString("pos") then<br />
application(application("first" &amp; session("class")))=false<br />
if application("second" &amp; session("class"))＜＞"" then application<br />
(application("second" &amp; session("class")))=true<br />
session("last")=Request.QueryString("pos")<br />
END IF<br />
end if<br />
else<br />
if application("second" &amp; session("class"))=session("nice") then<br />
color="white"<br />
if Request.QueryString("pos")＜＞"" then<br />
'if session("last")="" then session("last")="abc"<br />
if session("last")＜＞ Request.QueryString("pos") then<br />
application(application("first" &amp; session("class")))=true<br />
application(application("second" &amp; session("class")))=false<br />
session("last")=Request.QueryString("pos")<br />
END IF<br />
end if<br />
else<br />
if application("second" &amp; session("class"))="" then<br />
application("second" &amp; session("class"))=session("nice")<br />
color="white"<br />
if Request.QueryString("pos")＜＞"" then<br />
if session("last")="" then session("last")="abc"<br />
if session("last")＜＞ Request.QueryString("pos") then<br />
application(application("first" &amp; session("class")))=true<br />
application(application("second" &amp; session("class")))=false<br />
session("last")=Request.QueryString("pos")<br />
END IF<br />
end if<br />
else<br />
color=""<br />
end if<br />
end if<br />
end if<br />
Response.Write "＜table width=400 height=400 border=0 cellspacing=0<br />
cellpadding=0＞"<br />
for i=1 to 16<br />
Response.Write "＜tr＞"<br />
for j=1 to 16<br />
if application("pos" &amp; session("class") &amp; cstr(i) &amp; "_" &amp; cstr(j))=""<br />
then<br />
application("color" &amp; session("class") &amp; "_" &amp; Request.QueryString<br />
("pos"))=color<br />
Response.Write "＜td width=25 height=25＞"<br />
'response.write application(application("first" &amp; session("class")))<br />
if application(session("nice"))=true then<br />
response.write "＜a href=match.asp?pos=" &amp; cstr(i) &amp; "_" &amp; cstr(j)<br />
&amp; "＞＜img border=0 src=back0.jpg width=25 height=25＞＜/a＞"<br />
else<br />
response.write "＜img border=0 src=back0.jpg width=25 height=25＞"<br />
end if<br />
response.write "＜/td＞"<br />
else<br />
Response.Write "＜td width=25 height=25＞＜img border=0 src=" &amp;<br />
application("color" &amp; session("class") &amp; "_" &amp; cstr(i) &amp; "_" &amp; cstr<br />
(j)) &amp; "0.jpg width=25 height=25＞＜/td＞" &amp; chr(13)<br />
end if<br />
next<br />
Response.Write "＜/tr＞"<br />
next<br />
Response.Write "＜/table＞"<br />
'判断输赢<br />
if application("first" &amp; session("class"))=session("nice") then<br />
m="black"<br />
h="white"<br />
else<br />
h="black"<br />
m="white"<br />
end if<br />
'横向判断"-"<br />
for i=1 to 15<br />
win=false<br />
loss=false<br />
five_me=0<br />
five_he=0<br />
for j=1 to 15<br />
if application("color" &amp; session("class") &amp; "_" &amp; cstr(i) &amp; "_" &amp; cstr<br />
(j))=m then<br />
five_me=five_me+1<br />
five_he=0<br />
elseif application("color" &amp; session("class") &amp; "_" &amp; cstr(i) &amp; "_" &amp;<br />
cstr(j))=h then<br />
five_me=0<br />
five_he=five_he+1<br />
else<br />
five_me=0<br />
five_he=0<br />
end if<br />
if five_me=5 then<br />
win=true<br />
loss=false<br />
exit for<br />
elseif five_he=5 then<br />
win=false<br />
loss=true<br />
exit for<br />
end if<br />
next<br />
if win or loss then exit for<br />
next<br />
if win then<br />
response.write "你赢了！"<br />
application(application("first" &amp; session("class")))=false<br />
application(application("second" &amp; session("class")))=false<br />
end if<br />
if loss then<br />
response.write "对不起，你输了！"<br />
application(application("first" &amp; session("class")))=false<br />
application(application("second" &amp; session("class")))=false<br />
end if</p>
<p>'列向判断"|"<br />
for j=1 to 15<br />
win=false<br />
loss=false<br />
five_me=0<br />
five_he=0<br />
for i=1 to 15<br />
if application("color" &amp; session("class") &amp; "_" &amp; cstr(i) &amp; "_" &amp; cstr<br />
(j))=m then<br />
five_me=five_me+1<br />
five_he=0<br />
elseif application("color" &amp; session("class") &amp; "_" &amp; cstr(i) &amp; "_" &amp;<br />
cstr(j))=h then<br />
five_me=0<br />
five_he=five_he+1<br />
else<br />
five_me=0<br />
five_he=0<br />
end if<br />
if five_me=5 then<br />
win=true<br />
loss=false<br />
exit for<br />
elseif five_he=5 then<br />
win=false<br />
loss=true<br />
exit for<br />
end if<br />
next<br />
if win or loss then exit for<br />
next<br />
if win then<br />
response.write "你赢了！"<br />
application(application("first" &amp; session("class")))=false<br />
application(application("second" &amp; session("class")))=false<br />
end if<br />
if loss then<br />
response.write "对不起，你输了！"<br />
application(application("first" &amp; session("class")))=false<br />
application(application("second" &amp; session("class")))=false<br />
end if</p>
<p>'斜向判断"/"<br />
for i=1 to 11<br />
win=false<br />
loss=false<br />
five_me=0<br />
five_he=0<br />
for j=i+4 to 1 step -1<br />
if application("color" &amp; session("class") &amp; "_" &amp; cstr(j) &amp; "_" &amp; cstr<br />
(i+5-j))=m then<br />
five_me=five_me+1<br />
five_he=0<br />
elseif application("color" &amp; session("class") &amp; "_" &amp; cstr(j) &amp; "_" &amp;<br />
cstr(i+5-j))=h then<br />
five_me=0<br />
five_he=five_he+1<br />
else<br />
five_me=0<br />
five_he=0<br />
end if<br />
if five_me=5 then<br />
win=true<br />
loss=false<br />
exit for<br />
elseif five_he=5 then<br />
win=false<br />
loss=true<br />
exit for<br />
end if<br />
next<br />
if win or loss then exit for<br />
next<br />
if win then<br />
response.write "你赢了！"<br />
application(application("first" &amp; session("class")))=false<br />
application(application("second" &amp; session("class")))=false<br />
end if<br />
if loss then<br />
response.write "对不起，你输了！"<br />
application(application("first" &amp; session("class")))=false<br />
application(application("second" &amp; session("class")))=false<br />
end if</p>
<p>'斜向判断"\"<br />
for i=1 to 11<br />
win=false<br />
loss=false<br />
five_me=0<br />
five_he=0<br />
for j=12-i to 15<br />
if application("color" &amp; session("class") &amp; "_" &amp; cstr(13-i-j) &amp; "_"<br />
&amp; cstr(j))=m then<br />
five_me=five_me+1<br />
five_he=0<br />
elseif application("color" &amp; session("class") &amp; "_" &amp; cstr(13-i-j)<br />
&amp; "_" &amp; cstr(j))=h then<br />
five_me=0<br />
five_he=five_he+1<br />
else<br />
five_me=0<br />
five_he=0<br />
end if<br />
if five_me=5 then<br />
win=true<br />
loss=false<br />
exit for<br />
elseif five_he=5 then<br />
win=false<br />
loss=true<br />
exit for<br />
end if<br />
next<br />
if win or loss then exit for<br />
next<br />
if win then<br />
response.write "你赢了！"<br />
application(application("first" &amp; session("class")))=false<br />
application(application("second" &amp; session("class")))=false<br />
end if<br />
if loss then<br />
response.write "对不起，你输了！"<br />
application(application("first" &amp; session("class")))=false<br />
application(application("second" &amp; session("class")))=false<br />
end if<br />
%＞<br />
＜/body＞<br />
＜/html＞</p>
<p>如果某点没有棋子，则加上一个超连接，根据擂主与攻擂手的区别放上一个不同颜色的棋子。最后的一段是用来判断输与赢，分为横，列和两个斜线方向。具体内容看一下就可以明白。<br />
最后要说的一点就是global.asa ，这是站点上的一个核心文件，为了在退出棋局后，将位置留给别人，需要在sesison_onend中加入代码进行处理，如下：</p>
<p>＜script language=vbscript runat = server＞<br />
sub application_onstart<br />
session.timeout=1<br />
end sub<br />
sub session_onstart<br />
if application("num")="" then<br />
application("num")=0<br />
end if<br />
application("num")=application("num")+1<br />
end sub<br />
＜/script＞</p>
<p>＜script language=vbscript runat = server＞<br />
sub session_onend<br />
if application("num")="" then<br />
application("num")=0<br />
end if<br />
application("num")=application("num")-1</p>
<p>if application("first1")=session("nice") then<br />
application("first1")=""<br />
elseif application("second1")=session("nice") then<br />
application("second1")=""</p>
<p>elseif application("first2")=session("nice") then<br />
application("first2")=""<br />
elseif application("second2")=session("nice") then<br />
application("second2")=""</p>
<p>elseif application("first3")=session("nice") then<br />
application("first3")=""<br />
elseif application("second3")=session("nice") then<br />
application("second3")=""</p>
<p>elseif application("first4")=session("nice") then<br />
application("first4")=""<br />
elseif application("second4")=session("nice") then<br />
application("second4")=""</p>
<p>elseif application("first5")=session("nice") then<br />
application("first5")=""<br />
elseif application("second5")=session("nice") then<br />
application("second5")=""<br />
end if<br />
for i=1 to 15<br />
for j=1 to 15<br />
application("color" &amp; session("class") &amp; "_" &amp; cstr(i) &amp; "_" &amp; cstr<br />
(J))=""<br />
application("pos" &amp; session("class") &amp; cstr(i) &amp; "_" &amp; cstr(j))=""<br />
next<br />
next<br />
application(session("nice"))=""<br />
end sub<br />
＜/script＞</p>
<p>以上就是几个主要的文件，大家可以一试。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3code.cn/asp_exaple/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
