<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_QueenTown</title><subtitle type="text">以平和的心情进行每件事情</subtitle><id>http://feed.cnblogs.com/blog/u/30550/rss</id><updated>2012-05-15T08:20:29Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/30550/rss"/><entry><id>http://www.cnblogs.com/lavenderzh/archive/2012/05/15/2501772.html</id><title type="text">jQuery历史版本</title><summary type="text">jQuery 1.0（2006年8月）：该库的第一个稳定版本，已经具有了对CSS选择符、事件处理和AJAX交互的稳健支持。 jQuery 1.1（2007年1月）：这一版大幅简化了API。许多较少使用的方法被合并，减少了需要掌握和解释的方法数量。 jQuery 1.1.3（2007年7月）：这次小版本变化包含了对jQuery选择符引擎执行速度的显著提升。从这个版本开始，jQuery的性能达到了Prototype、Mootools以及Dojo等同类JavaScript库的水平。 jQuery 1.2（2007年9月）：这一版去掉了对XPath选择符的支持，原因是相对于CSS语法它已经变得...</summary><published>2012-05-15T08:17:00Z</published><updated>2012-05-15T08:17:00Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lavenderzh/archive/2012/05/15/2501772.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/archive/2012/05/15/2501772.html"/><content type="html">&amp;nbsp;jQuery 1.0（2006年8月）：该库的第一个稳定版本，已经具有了对CSS选择符、事件处理和AJAX交互的稳健支持。 &lt;p&gt;jQuery 1.1（2007年1月）：这一版大幅简化了API。许多较少使用的方法被合并，减少了需要掌握和解释的方法数量。&lt;/p&gt;&lt;p&gt;jQuery 1.1.3（2007年7月）：这次小版本变化包含了对jQuery选择符引擎执行速度的显著提升。从这个版本开始，jQuery的性能达到了Prototype、Mootools以及Dojo等同类JavaScript库的水平。&lt;/p&gt;&lt;p&gt;jQuery 1.2（2007年9月）：这一版去掉了对XPath选择符的支持，原因是相对于CSS语法它已经变得多余了。这一版能够支持对效果的更灵活定制，而且借助新增的命名空间事件，也使插件开发变得更容易。&lt;/p&gt;&lt;p&gt;jQuery UI（2007年9月）：这个新的插件套件是作为曾经流行但已过时的Interface插件的替代项目而发布的。jQuery UI中包含大量预定义好的部件（widget），以及一组用于构建高级元素（例如可拖放的界面元素）的工具。&lt;/p&gt;&lt;p&gt;jQuery 1.2.6（2008年5月）：这一版主要是将Brandon Aaron开发的流行的Dimensions插件的功能移植到了核心库中。&lt;/p&gt;&lt;p&gt;jQuery 1.3（2009年1月）：这一版使用了全新的选择符引擎Sizzle，库的性能也因此有了极大提升。这一版正式支持事件委托特性。&lt;/p&gt;&lt;p&gt;jQuery 1.3.2（2009年2月）：这次小版本升级进一步提升了库的性能，例如改进了:visible/:hidden选择符、.height()/.width()方法的底层处理机制。另外，也支持查询的元素按文档顺序返回。&lt;/p&gt;&lt;p&gt;jQuery 1.4(2010年1月14号对)代码库进行了内部重写组织，开始建立一些风格规范。老的core.js文件被分为attribute.js, css.js, data.js, manipulation.js, traversing.js和queue.js；CSS和attribute的逻辑分离。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jQuery 1.5(2011年1月31日)：该版本修复了83个bug，解决了460个问题。重大改进有：重写了Ajax模块；新增延缓对像(Deferred Objects)；jQuery替身&amp;#8212;&amp;#8212;jQuery.sub()；增强了遍历相邻节点的性能；jQuery开发团队构建系统的改进。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jQuery 1.6(2011年5月3日)：重写了Attribute 模块和大量的性能改进。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.6新版本中的部分重要改进：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;attr()、val()和data()方法有了更好的性能；&lt;/li&gt;&lt;li&gt;在attr()方法中支持Boolean属性；&lt;/li&gt;&lt;li&gt;添加了钩子函数，允许对attr()和val()方法进行扩展；&lt;/li&gt;&lt;li&gt;map()方法添加了对对象的支持（将JavaScript对象的属性映射到函数）&lt;/li&gt;&lt;li&gt;允许使用相对值（&amp;#8220;+=&amp;#8221;，&amp;#8220;-=&amp;#8221;）更新CSS；&lt;/li&gt;&lt;li&gt;添加了deferred.always(), deferred.pipe()方法，减少了代码量，提高了代码易读性；&lt;/li&gt;&lt;li&gt;同步动画 &amp;#8211; 现在所有动画都同步到相同的时间间隔. 使用新的浏览器功能，动画也更顺畅；&lt;/li&gt;&lt;li&gt;find()，closest()和is()可接收所有的DOM元素和JQuery对象作为参数。 &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;不幸的是，其中包含了部分破坏性的变更，团队已经在官方更新中用单独的章节强调了它们：&lt;/p&gt;&lt;div&gt;&lt;table style="width: 645px; height: 170px" border="1" cellspacing="0" cellpadding="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="300"&gt;&lt;strong&gt;变更&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;strong&gt;JQuery 1.5.2 示例&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="150"&gt;&lt;strong&gt;JQuery 1.6 示例&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;data()方法使用破折号创建驼峰格式。&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top"&gt;data-max-value="15" 创建{ max-value: 15 }&lt;/td&gt;&lt;td valign="top"&gt;data-max-value="15" 创建{ maxValue: 15 }&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;区分了Property与Attribute。attr()方法现在不能用于获取preperty的值。为了处理property的值，引入了prop()和removeProp()方法。&lt;/td&gt;&lt;td valign="top"&gt;如果复选框被选中，checkbox.attr("checked")返回(true)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign="top"&gt;checkbox.attr("checked")返回空字符串。&lt;br /&gt;要判别是否选中，需在事件处理程序中使用&lt;br /&gt;$(this).prop("checked")或&lt;br /&gt;$(this).is(":checked")。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;不出意外的话，第二项变更将会影响到现有打算升级到1.6的那些项目。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;另附：&lt;/p&gt;&lt;p&gt;1.4重要新特性：&lt;/p&gt;&lt;p&gt;&amp;#8226;常用方法的性能大幅提升：重写了大部分较早期的函数；&lt;/p&gt;&lt;p&gt;&amp;#8226;更容易使用的设置函数（setter function）：为所有对象新增了许多易用的设置函数；&lt;/p&gt;&lt;p&gt;&amp;#8226;对Ajax的改进：引入了许多Ajax和JSON处理方面的更新，包括HTML5元素的序列化；&lt;/p&gt;&lt;p&gt;&amp;#8226;attribute（改进了.attr()的性能）、jQuery()核心函数、CSS（.css()性能有两倍提升）、特效和事件、DOM操作等也有显著改进&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://baike.baidu.com/view/1020297.htm?fr=ala0_1#"&gt;&lt;/a&gt;&amp;nbsp;&lt;wbr&gt;&lt;a name="10"&gt;&lt;/a&gt;JQuery1.42最新版本介绍&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;jQuer1.4.2版本修复了1.4版本的一些错误和优化了一些不错的改进,速度比1.4.1版本又提升&lt;/p&gt;&lt;div style="position: relative; width: 200px; float: right; visibility: visible"&gt;&lt;a title="查看图片" href="http://baike.baidu.com/image/0ef211240fa55f0ec89559e4" target="_blank"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/a&gt;&lt;a href="http://baike.baidu.com/image/0ef211240fa55f0ec89559e4" target="_blank"&gt;&lt;/a&gt; &lt;p&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;了一倍，该版本对性能做了一些改进，同时增加了一些api （ .delegate() and .undelegate(). ），右图是JQuery各个版本的性能比较：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;jquery1.42新特性:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;加了两个新方法:.delegate() 和.undelegate(). 是对.live() and .die() 的补充. 这两个方法对特定的事件的起到简化。&lt;/p&gt;&lt;p&gt;范例:&lt;/p&gt;&lt;p&gt;$("table").delegate("td", "hover", function(){ $(this).toggleClass("hover"); });&lt;/p&gt;&lt;p&gt;等于使用 .live():&lt;/p&gt;&lt;p&gt;$("table").each(function(){ $("td", this).live("hover", function(){ $(this).toggleClass("hover"); }); });&lt;/p&gt;&lt;p&gt;另外,以下代码中，.live() 基本上等同于 .delegate().&lt;/p&gt;&lt;p&gt;$(document).delegate("td", "hover", function(){ $(this).toggleClass("hover"); });&lt;/p&gt;&lt;p&gt;变更&lt;/p&gt;&lt;p&gt;大量代码进行了重写, 提升了性能及修正了一些长期存在的问题。&lt;/p&gt;&lt;p&gt;提升性能&lt;/p&gt;&lt;p&gt;每次开发新的jquery版本，我们都努力去持续优化性能，以保证你能用到最高性能的javascript代码。&lt;/p&gt;&lt;p&gt;在Taskspeed benchmark 的测试中，1.4.2比1.4.1快1倍，比1.3.2快2倍。&lt;/p&gt;&lt;p&gt;主要是在下面4个方面进行了提升:&lt;/p&gt;&lt;p&gt;.bind() 和 .unbind().&lt;/p&gt;&lt;p&gt;.empty(), .remove(), 和 .html().&lt;/p&gt;&lt;p&gt;插入单个DOM 节点到 document.&lt;/p&gt;&lt;p&gt;$("body")&lt;/p&gt;&lt;p&gt;在测试用例中，比较多的用到了 $("body"), .bind(), .unbind()方法，因此测试结果提升比较明显。&lt;/p&gt;&lt;p&gt;v重写事件&lt;/p&gt;&lt;p&gt;event handlers 不再作为一个对象属性保存在 jQuery的内部对象里。现在是保存在一个内部的对象数组里。v 现在可以通过调用.data("events") ， 将会返回一个对象包含的所有事件类型。&lt;/p&gt;&lt;p&gt;现在可以使用不同的数据、命名空间、事件类型绑定在同一个handler&lt;/p&gt;&lt;p&gt;在一个handler清除自己之后，事件handler会继续执行&lt;/p&gt;&lt;p&gt;不用关联数据或者命名空间到事件handler&lt;/p&gt;&lt;p&gt;不用再使用代理方法&lt;/p&gt;&lt;p&gt;事件执行的顺序在所有浏览器中得到保证，Google Chrome 中出现的对象循环逻辑问题已经得到解决.&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lavenderzh/aggbug/2501772.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/archive/2012/05/15/2501772.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lavenderzh/archive/2012/04/13/2445505.html</id><title type="text">【转】让Iframe自适应高度</title><summary type="text">不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能，可是 iframe的大小却不像层那样可以“伸缩自如”，所以带来了使用上的麻烦，给iframe设置高度的时候多了也不好，少了更是不行，现在，让我来告诉大 家一种iframe动态调整高度的方法，主要是以下JS函数：程序代码function SetWinHeight(obj){var win=obj;if (document.getElementById){if (win &amp;&amp; !window.opera){if (win.contentDocument &amp;&amp; win.con</summary><published>2012-04-13T03:35:00Z</published><updated>2012-04-13T03:35:00Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lavenderzh/archive/2012/04/13/2445505.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/archive/2012/04/13/2445505.html"/><content type="html">&lt;p&gt;不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能，可是 iframe的大小却不像层那样可以&amp;#8220;伸缩自如&amp;#8221;，所以带来了使用上的麻烦，给iframe设置高度的时候多了也不好，少了更是不行，现在，让我来告诉大 家一种iframe动态调整高度的方法，主要是以下JS函数：&lt;/p&gt;&lt;p&gt;程序代码&lt;/p&gt;&lt;p&gt;function SetWinHeight(obj)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;var win=obj;&lt;/p&gt;&lt;p&gt;if (document.getElementById)&lt;br /&gt;{&lt;/p&gt;&lt;p&gt;if (win &amp;amp;&amp;amp; !window.opera)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;if (win.contentDocument &amp;amp;&amp;amp; win.contentDocument.body.offsetHeight) &lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;win.height = win.contentDocument.body.offsetHeight; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;else if(win.Document &amp;amp;&amp;amp; win.Document.body.scrollHeight)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;win.height = win.Document.body.scrollHeight;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;最后，加入iframe,不能丢掉onload属性，当然了，id也必须也函数中的win匹配&lt;/p&gt;&lt;p&gt;程序代码&lt;/p&gt;&lt;p&gt;&amp;lt;iframe width="778" align="center" height="200" id="win" name="win" onload="Javascript:SetWinHeight(this)" frameborder="0" scrolling="no"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/p&gt;&lt;p&gt;另一种情况的iframe解决方案（超简单）&lt;/p&gt;&lt;p&gt;重要提示：src=中你必须填写的网页地址，一定要和本页面在同一个站点上，否则，会抱错，说&amp;#8220;拒绝访问！&amp;#8221;(实际上这是因为Js的跨域问题导致拒绝访问的) &lt;/p&gt;&lt;p&gt;之前自己也碰到过这个问题，为了得到答案去网上搜索，发现有不少人也遇到了这样的问题，现在就把解决方法共享一下 &lt;/p&gt;&lt;p&gt;1、建立一个bottom.js的文件，然后输入下面的代码（只有两行哦） &lt;/p&gt;&lt;p&gt;parent.document.all("框架ID名").style.height=document.body.scrollHeight; &lt;/p&gt;&lt;p&gt;parent.document.all("框架ID名").style.width=document.body.scrollWidth; &lt;/p&gt;&lt;p&gt;这里的 框架ID名 就是Iframe的ID，比如： &lt;/p&gt;&lt;p&gt;＜IFRAME id="框架ID名" name="left" frameBorder=0 scrolling=no src="XXX.asp" width="100%"＞＜/IFRAME＞ &lt;/p&gt;&lt;p&gt;2、给你网站里所有的被包含文件里面每个都加入 &lt;/p&gt;&lt;p&gt;＜script language = "JavaScript" src = "bottom.js"/＞＜/script＞ &lt;/p&gt;&lt;p&gt;3、OK，收工！ &lt;/p&gt;&lt;p&gt;在WINXP、IE6下面测试通过。很简单吧！ &lt;/p&gt;&lt;p&gt;实现 iframe 的自适应高度&lt;/p&gt;&lt;p&gt;实现 iframe 的自适应高度，能够随着页面的长度自动的适应以免除页面和 iframe 同时出现滚动条的现象。&lt;/p&gt;&lt;p&gt;程序代码&lt;/p&gt;&lt;p&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;/p&gt;&lt;p&gt;//** iframe自动适应页面 **//&lt;/p&gt;&lt;p&gt;//输入你希望根据页面高度自动调整高度的iframe的名称的列表&lt;/p&gt;&lt;p&gt;//用逗号把每个iframe的ID分隔. 例如: ["myframe1", "myframe2"]，可以只有一个窗体，则不用逗号。&lt;/p&gt;&lt;p&gt;//定义iframe的ID&lt;/p&gt;&lt;p&gt;var iframeids=["test"]&lt;/p&gt;&lt;p&gt;//如果用户的浏览器不支持iframe是否将iframe隐藏 yes 表示隐藏，no表示不隐藏&lt;/p&gt;&lt;p&gt;var iframehide="yes"&lt;/p&gt;&lt;p&gt;function dyniframesize() &lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;var dyniframe=new Array()&lt;/p&gt;&lt;p&gt;for (i=0; i&amp;lt;iframeids.length; i++)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;if (document.getElementById) &lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;//自动调整iframe高度&lt;/p&gt;&lt;p&gt;dyniframe[dyniframe.length] = document.getElementById(iframeids);&lt;/p&gt;&lt;p&gt;if (dyniframe &amp;amp;&amp;amp; !window.opera)&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;dyniframe.style.display="block"&lt;/p&gt;&lt;p&gt;if (dyniframe.contentDocument &amp;amp;&amp;amp; dyniframe.contentDocument.body.offsetHeight) //如果用户的浏览器是NetScape&lt;br /&gt;dyniframe.height = dyniframe.contentDocument.body.offsetHeight; &lt;/p&gt;&lt;p&gt;else if (dyniframe.Document &amp;amp;&amp;amp; dyniframe.Document.body.scrollHeight) //如果用户的浏览器是IE&lt;/p&gt;&lt;p&gt;dyniframe.height = dyniframe.Document.body.scrollHeight;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;//根据设定的参数来处理不支持iframe的浏览器的显示问题&lt;/p&gt;&lt;p&gt;if ((document.all || document.getElementById) &amp;amp;&amp;amp; iframehide=="no")&lt;/p&gt;&lt;p&gt;{&lt;/p&gt;&lt;p&gt;var tempobj=document.all? document.all[iframeids] : document.getElementById(iframeids)&lt;/p&gt;&lt;p&gt;tempobj.style.display="block"&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;p&gt;if (window.addEventListener)&lt;/p&gt;&lt;p&gt;window.addEventListener("load", dyniframesize, false)&lt;/p&gt;&lt;p&gt;else if (window.attachEvent)&lt;/p&gt;&lt;p&gt;window.attachEvent("onload", dyniframesize)&lt;/p&gt;&lt;p&gt;else&lt;/p&gt;&lt;p&gt;window.onload=dyniframesize&lt;/p&gt;&lt;p&gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lavenderzh/aggbug/2445505.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/archive/2012/04/13/2445505.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lavenderzh/archive/2012/04/09/2438803.html</id><title type="text">【转】框架集中framespacing、border和frameborder属性的关系</title><summary type="text">一、framespacing和border属性我们知道，使用border属性是设置边框的宽度的。参考示例：HTML4.01教程：窗口框架设置窗口边框的粗细示例。同样，使用framespacing属性也是设置边框的宽度的。参考使用framespacing属性设置框架集边框宽度。不论单独使用哪一个属性，显示的效果都是一样的。而在Dreamweaver中，一旦在“属性”栏中设置了边框的宽度，则会同时使用这两个属性来表示。代码如下：&lt;html&gt;&lt;head&gt;&lt;title&gt;框架集中framespacing、border和frameborder属性的关系示例-baike3</summary><published>2012-04-09T05:25:00Z</published><updated>2012-04-09T05:25:00Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lavenderzh/archive/2012/04/09/2438803.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/archive/2012/04/09/2438803.html"/><content type="html">&lt;p&gt;&lt;strong&gt;一、framespacing和border属性&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我们知道，使用border属性是设置边框的宽度的。参考示例：&lt;a href="http://www.cnblogs.com/lavenderzh/admin/examples/?iid=669" target="_blank"&gt;HTML4.01教程：窗口框架设置窗口边框的粗细示例&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;同样，使用framespacing属性也是设置边框的宽度的。参考&lt;a href="http://www.cnblogs.com/content/?id=1338" target="_blank"&gt;使用framespacing属性设置框架集边框宽度&lt;/a&gt;。&lt;/p&gt;&lt;p&gt;不论单独使用哪一个属性，显示的效果都是一样的。&lt;/p&gt;&lt;p&gt;而在Dreamweaver中，一旦在&amp;#8220;属性&amp;#8221;栏中设置了边框的宽度，则会同时使用这两个属性来表示。代码如下：&lt;/p&gt;&amp;lt;html&amp;gt;&lt;br/&gt;&amp;lt;head&amp;gt;&lt;br/&gt;&amp;lt;title&amp;gt;框架集中framespacing、border和frameborder属性的关系示例-baike369.com&amp;lt;/title&amp;gt;&lt;br/&gt;&amp;lt;/head&amp;gt;&lt;br/&gt;  &amp;lt;frameset cols="40%,*"&amp;gt;&lt;br/&gt;  &amp;lt;frame src="append/Frame_a.html" /&amp;gt;&lt;br/&gt;    &amp;lt;frameset rows="40%,*" &lt;code&gt;framespacing="50" border="50"&lt;/code&gt;&amp;gt;&lt;br/&gt;    &amp;lt;frame src="append/Frame_b.html" /&amp;gt;&lt;br/&gt;    &amp;lt;frame src="append/Frame_c.html" /&amp;gt;&lt;br/&gt;    &amp;lt;/frameset&amp;gt;&lt;br/&gt;  &amp;lt;/frameset&amp;gt;&lt;br/&gt;  &amp;lt;noframes&amp;gt;&lt;br/&gt;  &amp;lt;body&amp;gt;您的浏览器无法处理框架！&amp;lt;/body&amp;gt;&lt;br/&gt;  &amp;lt;/noframes&amp;gt;&lt;br/&gt;&amp;lt;/html&amp;gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/admin/examples/?iid=673" target="_blank"&gt;查看代码效果：框架集中framespacing、border和frameborder属性的关系示例&lt;/a&gt;&lt;/p&gt;&lt;p&gt;同时使用这两个属性和单独使用任一个属性，显示的效果也是一样的。&lt;/p&gt;&lt;p&gt;在这里，需要注意：&lt;/p&gt;&lt;ul&gt;&lt;li&gt;如果framespacing属性的值不变，而改变borer属性值的大小，显示的效果不变。&lt;/li&gt;&lt;li&gt;如果border属性的值不变，而改变framespacing属性值的大小，显示的效果则以framespacing的大小为准。&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;因此，在框架集中，需要修改边框的宽度时，应该以framespacing属性为主。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、frameborder属性与framespacing和border属性&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;下面来讨论frameborder属性与framespacing和border属性的关系。&lt;/p&gt;&lt;p&gt;关于frameborder属性，请参考&lt;a href="http://www.cnblogs.com/content/?id=1337#two" target="_blank"&gt;隐藏窗口边框&lt;/a&gt;。当frameborder="1"时，表示显示框架的边框，因为它是默认值，所以不必设置。而当frameborder="0"时，会出现两种情况：&lt;/p&gt;&lt;p&gt;这里以同时设置framespacing和border属性为例。当然，单独使用任一个属性，效果也是一样的。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 当framespacing和border属性设置为一个大于0的数时&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;会出现下面的情况：&lt;/p&gt;&amp;lt;frameset cols="40%,*"&amp;gt;&lt;br/&gt;&amp;lt;frame src="append/Frame_a.html" /&amp;gt;&lt;br/&gt;&amp;lt;frameset rows="40%,*" &lt;code&gt;framespacing="80" border="80" frameborder="0"&lt;/code&gt;&amp;gt;&lt;br/&gt;&amp;lt;frame src="append/Frame_b.html" /&amp;gt;&lt;br/&gt;&amp;lt;frame src="append/Frame_c.html" /&amp;gt;&lt;br/&gt;&amp;lt;/frameset&amp;gt;&lt;br/&gt;&amp;lt;/frameset&amp;gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/admin/examples/?iid=674" target="_blank"&gt;查看代码效果：框架集中framespacing、border和frameborder属性的关系示例（二）&lt;/a&gt;&lt;/p&gt;&lt;p&gt;此时，虽然不显示框架的边框，但是边框占据的空间还是存在的。它也会影响网页的布局。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. 当framespacing和border属性设置为0时&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;会出现下面的情况：&lt;/p&gt;&amp;lt;frameset cols="40%,*"&amp;gt;&lt;br/&gt;&amp;lt;frame src="append/Frame_a.html" /&amp;gt;&lt;br/&gt;&amp;lt;frameset rows="40%,*" &lt;code&gt;framespacing="0" border="0" frameborder="0"&lt;/code&gt;&amp;gt;&lt;br/&gt;&amp;lt;frame src="append/Frame_b.html" /&amp;gt;&lt;br/&gt;&amp;lt;frame src="append/Frame_c.html" /&amp;gt;&lt;br/&gt;&amp;lt;/frameset&amp;gt;&lt;br/&gt;&amp;lt;/frameset&amp;gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/admin/examples/?iid=675" target="_blank"&gt;查看代码效果：框架集中framespacing、border和frameborder属性的关系示例（三）&lt;/a&gt;&lt;/p&gt;&lt;p&gt;我们发现，Frame_b.html和Frame_c.html这两个网页之间的边框消失不见了，看上去就像一个网页一样。&lt;/p&gt;&lt;p&gt;请分清这两种情况，然后在网页制作中，根据具体的情况进行选择！&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lavenderzh/aggbug/2438803.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/archive/2012/04/09/2438803.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lavenderzh/archive/2012/03/07/2383320.html</id><title type="text">【转】Meta标签详解</title><summary type="text">引言 您的个人网站即使做得再精彩，在“浩瀚如海”的网络空间中，也如一叶扁舟不易为人发现，如何推广个人网站，人们首先想到的方法无外乎以下几种： ●在搜索引擎中登录自己的个人网站 ●在知名网站加入你个人网站的链接 ●在论坛中发帖子宣传你的个人网站 很多人却忽视了HTML标签META的强大功效，一个好的META标签设计可以大大提高你的个人网站被搜索到的可能性，有兴趣吗，谁我来重新认识一下META标签吧！ META标签是HTML语言HEAD区的一个辅助性标签，它位于HTML文档头部的&lt;HEAD&gt;标记和&lt;TITLE&gt;标记之间，它提供用户不可见的信息。meta标签通常用来..</summary><published>2012-03-07T04:52:00Z</published><updated>2012-03-07T04:52:00Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lavenderzh/archive/2012/03/07/2383320.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/archive/2012/03/07/2383320.html"/><content type="html">引言 &lt;p&gt;您的个人网站即使做得再精彩，在&amp;#8220;浩瀚如海&amp;#8221;的网络空间中，也如一叶扁舟不易为人发现，如何推广&lt;br /&gt;个人网站，人们首先想到的方法无外乎以下几种：&lt;br /&gt;&lt;br /&gt;&amp;#9679;　在搜索引擎中登录自己的个人网站&lt;br /&gt;&lt;br /&gt;&amp;#9679;　在知名网站加入你个人网站的链接 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;#9679;　在论坛中发帖子宣传你的个人网站 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;很多人却忽视了HTML标签META的强大功效，一个好的META标签设计可以大大提高你的个人网站被搜索到的可能性，有兴趣吗，谁我来重新认识一下META标签吧！ &lt;/p&gt;&lt;p&gt;&lt;br /&gt;META标签是HTML语言HEAD区的一个辅助性标签，它位于HTML文档头部的&amp;lt;HEAD&amp;gt;标记和&amp;lt;TITLE&amp;gt;标记之间，它提供用户不可见的信息。meta标签通常用来为搜索引擎robots定义页面主题，或者是定义用户浏览器上的cookie；它可以用于鉴别作者，设定页面格式，标注内容提要和关键字；还可以设置页面使其可以根据你定义的时间间隔刷新自己,以及设置RASC内容等级，等等。 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;详细介绍 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;下面介绍一些有关 标记的例子及解释。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;META标签分两大部分：HTTP标题信息(HTTP-EQUIV)和页面描述信息(NAME)。 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;#9733;HTTP-EQUIV &lt;/p&gt;&lt;p&gt;&lt;br /&gt;HTTP-EQUIV类似于HTTP的头部协议，它回应给浏览器一些有用的信息，以帮助正确和精确地显示网页内容。常用的HTTP-EQUIV类型有： &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、Content-Type和Content-Language (显示字符集的设定) &lt;/p&gt;&lt;p&gt;&lt;br /&gt;说明：设定页面使用的字符集，用以说明主页制作所使用的文字已经语言，浏览器会根据此来调用相应的字符集显示page内容。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;用法：&amp;lt;Meta http-equiv="Content-Type" Content="text/html; Charset=gb2312"&amp;gt;&lt;br /&gt;&amp;lt;Meta http-equiv="Content-Language" Content="zh-CN"&amp;gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;注意：　该META标签定义了HTML页面所使用的字符集为GB2132，就是国标汉字码。如果将其中的&amp;#8220;charset=GB2312&amp;#8221;替换成&amp;#8220;BIG5&amp;#8221;，则该页面所用的字符集就是繁体中文Big5码。当你浏览一些国外的站点时，IE浏览器会提示你要正确显示该页面需要下载xx语支持。这个功能就是通过读取HTML页面META标签的Content-Type属性而得知需要使用哪种字符集显示该页面的。如果系统里没有装相应的字符集，则IE就提示下载。其他的语言也对应不同的charset，比如日文的字符集是&amp;#8220;iso-2022-jp &amp;#8221;，韩文的是&amp;#8220;ks_c_5601&amp;#8221;。&lt;br /&gt;&lt;br /&gt;Content-Type的Content还可以是：text/xml等文档类型；&lt;br /&gt;Charset选项：ISO-8859-1(英文)、BIG5、UTF-8、SHIFT-Jis、Euc、Koi8-2、us-ascii, x-mac-roman, iso-8859-2, x-mac-ce, iso-2022-jp, x-sjis, x-euc-jp,euc-kr, iso-2022-kr, gb2312, gb_2312-80, x-euc-tw, x-cns11643-1,x-cns11643-2等字符集；Content-Language的Content还可以是：EN、FR等语言代码。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;2、Refresh (刷新) &lt;/p&gt;&lt;p&gt;&lt;br /&gt;　说明：让网页多长时间（秒）刷新自己，或在多长时间后让网页自动链接到其它网页。&lt;br /&gt;　用法：&amp;lt;Meta http-equiv="Refresh" Content="30"&amp;gt;&lt;br /&gt;&amp;lt;Meta http-equiv="Refresh" Content="5; Url=http://www.xia8.net"&amp;gt;&lt;br /&gt;　注意：其中的5是指停留5秒钟后自动刷新到URL网址。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;3、Expires (期限) &lt;/p&gt;&lt;p&gt;&lt;br /&gt;　说明：指定网页在缓存中的过期时间，一旦网页过期，必须到服务器上重新调阅。&lt;br /&gt;　用法：&amp;lt;Meta http-equiv="Expires" Content="0"&amp;gt;&lt;br /&gt;&amp;lt;Meta http-equiv="Expires" Content="Wed, 26 Feb 1997 08:21:57 GMT"&amp;gt;&lt;br /&gt;　注意：必须使用GMT的时间格式，或直接设为0(数字表示多少时间后过期)。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;4、Pragma (cach模式) &lt;/p&gt;&lt;p&gt;&lt;br /&gt;　说明：禁止浏览器从本地机的缓存中调阅页面内容。&lt;br /&gt;　用法：&amp;lt;Meta http-equiv="Pragma" Content="No-cach"&amp;gt;&lt;br /&gt;　注意：网页不保存在缓存中，每次访问都刷新页面。这样设定，访问者将无法脱机浏览。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;5、Set-Cookie (cookie设定) &lt;/p&gt;&lt;p&gt;&lt;br /&gt;说明：浏览器访问某个页面时会将它存在缓存中，下次再次访问时就可从缓存中读取，以提高速度。当你希望访问者每次都刷新你广告的图标，或每次都刷新你的计数器，就要禁用缓存了。通常HTML文件没有必要禁用缓存，对于ASP等页面，就可以使用禁用缓存，因为每次看到的页面都是在服务器动态生成的，缓存就失去意义。如果网页过期，那么存盘的cookie将被删除。&lt;br /&gt;　用法：&amp;lt;Meta http-equiv="Set-Cookie" Content="cookievalue=xxx; expires=Wednesday,&lt;br /&gt; 21-Oct-98 16:14:21 GMT; path=/"&amp;gt;&lt;br /&gt;　注意：必须使用GMT的时间格式。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;6、Window-target (显示窗口的设定) &lt;/p&gt;&lt;p&gt;&lt;br /&gt;　说明：强制页面在当前窗口以独立页面显示。&lt;br /&gt;　用法：&amp;lt;Meta http-equiv="Widow-target" Content="_top"&amp;gt;&lt;br /&gt;　注意：这个属性是用来防止别人在框架里调用你的页面。Content选项：_blank、_top、_self、_parent。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;7、Pics-label (网页RSAC等级评定)&lt;br /&gt;　说明：在IE的Internet选项中有一项内容设置，可以防止浏览一些受限制的网站，而网站的限制级&lt;br /&gt;别就是通过该参数来设置的。&lt;br /&gt;　用法：&amp;lt;META http-equiv="Pics-label" Contect=&lt;br /&gt;　"(PICS－1.1'http://www.rsac.org/ratingsv01.html'&lt;br /&gt; I gen comment 'RSACi North America Sever' by &lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#39;&amp;#105;&amp;#110;&amp;#101;&amp;#116;&amp;#64;&amp;#109;&amp;#105;&amp;#99;&amp;#114;&amp;#111;&amp;#115;&amp;#111;&amp;#102;&amp;#116;&amp;#46;&amp;#99;&amp;#111;&amp;#109;&amp;#39;"&gt;'inet@microsoft.com'&lt;/a&gt; &lt;br /&gt;　for 'http://www.microsoft.com' on '1997.06.30T14:21－0500' r(n0 s0 v0 l0))"&amp;gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;　注意：不要将级别设置的太高。RSAC的评估系统提供了一种用来评价Web站点内容的标准。用户可以设置Microsoft Internet Explorer（IE3.0以上）来排除包含有色情和暴力内容的站点。上面这个例子中的HTML取自Microsoft的主页。代码中的（n 0 s 0 v 0 l 0）表示该站点不包含不健康内容。级别的评定是由RSAC，即美国娱乐委员会的评级机构评定的，如果你想进一步了解RSAC评估系统的等级内容，或者你需要评价自己的网站，可以访问RSAC的站点：&lt;a href="http://www.rsac.org/"&gt;http://www.rsac.org/&lt;/a&gt;。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;8、Page-Enter、Page-Exit (进入与退出) &lt;/p&gt;&lt;p&gt;&lt;br /&gt;　说明：这个是页面被载入和调出时的一些特效。&lt;br /&gt;　用法：&amp;lt;Meta http-equiv="Page-Enter" Content="blendTrans(Duration=0.5)"&amp;gt;&lt;br /&gt;&amp;lt;Meta http-equiv="Page-Exit" Content="blendTrans(Duration=0.5)"&amp;gt;&lt;br /&gt;　注意：blendTrans是动态滤镜的一种，产生渐隐效果。另一种动态滤镜RevealTrans也可以用于页面进入与退出效果: &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;lt;Meta http-equiv="Page-Enter" Content="revealTrans(duration=x, transition=y)"&amp;gt;&lt;br /&gt;&amp;lt;Meta http-equiv="Page-Exit" Content="revealTrans(duration=x, transition=y)"&amp;gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;　Duration表示滤镜特效的持续时间(单位：秒)&lt;br /&gt;　Transition　滤镜类型。表示使用哪种特效，取值为0-23。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;　0 矩形缩小&lt;br /&gt;　1 矩形扩大&lt;br /&gt;　2 圆形缩小&lt;br /&gt;　3 圆形扩大&lt;br /&gt;　4 下到上刷新&lt;br /&gt;　5 上到下刷新&lt;br /&gt;　6 左到右刷新&lt;br /&gt;　7 右到左刷新&lt;br /&gt;　8 竖百叶窗&lt;br /&gt;　9 横百叶窗&lt;br /&gt; 10 错位横百叶窗&lt;br /&gt; 11 错位竖百叶窗&lt;br /&gt; 12 点扩散&lt;br /&gt; 13 左右到中间刷新&lt;br /&gt; 14 中间到左右刷新&lt;br /&gt; 15 中间到上下&lt;br /&gt; 16 上下到中间&lt;br /&gt; 17 右下到左上&lt;br /&gt; 18 右上到左下&lt;br /&gt; 19 左上到右下&lt;br /&gt; 20 左下到右上&lt;br /&gt; 21 横条&lt;br /&gt; 22 竖条&lt;br /&gt; 23 以上22种随机选择一种 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;9、MSThemeCompatible (XP主题)&lt;br /&gt;　说明：是否在IE中关闭 xp 的主题&lt;br /&gt;　用法：&amp;lt;Meta http-equiv="MSThemeCompatible" Content="Yes"&amp;gt;&lt;br /&gt;　注意：关闭 xp 的蓝色立体按钮系统显示样式，从而和win2k 很象。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;10、IE6 (页面生成器)&lt;br /&gt;　说明：页面生成器generator，是ie6&lt;br /&gt;　用法：&amp;lt;Meta http-equiv="IE6" Content="Generator"&amp;gt;&lt;br /&gt;　注意：用什么东西做的，类似商品出厂厂商。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;11、Content-Script-Type (脚本相关)&lt;br /&gt;　说明：这是近来W3C的规范，指明页面中脚本的类型。&lt;br /&gt;　用法：&amp;lt;Meta http-equiv="Content-Script-Type" Content="text/javascript"&amp;gt;&lt;br /&gt;　注意： &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;#9733;NAME变量 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;name是描述网页的，对应于Content（网页内容），以便于搜索引擎机器人查找、分类（目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类）。&lt;br /&gt;name的value值（name=""）指定所提供信息的类型。有些值是已经定义好的。例如description(说明)、keyword(关键字)、refresh(刷新)等。还可以指定其他任意值，如：creationdate(创建日期) 、&lt;br /&gt;document ID(文档编号)和level(等级)等。&lt;br /&gt;name的content指定实际内容。如：如果指定level(等级)为value(值)，则Content可能是beginner(初级)、intermediate(中级)、advanced(高级)。 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、Keywords (关键字)&lt;br /&gt;　说明：为搜索引擎提供的关键字列表&lt;br /&gt;　用法：&amp;lt;Meta name="Keywords" Content="关键词1,关键词2，关键词3,关键词4,&amp;#8230;&amp;#8230;"&amp;gt;&lt;br /&gt;　注意：各关键词间用英文逗号&amp;#8220;,&amp;#8221;隔开。META的通常用处是指定搜索引擎用来提高搜索质量的关键词。当数个META元素提供文档语言从属信息时，搜索引擎会使用lang特性来过滤并通过用户的语言优先参照来显示搜索结果。例如：&lt;br /&gt;&amp;lt;Meta name="Kyewords" Lang="EN" Content="vacation,greece,sunshine"&amp;gt;&lt;br /&gt;&amp;lt;Meta name="Kyewords" Lang="FR" Content="vacances,gr&amp;#232;:ce,soleil"&amp;gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;2、Description (简介)&lt;br /&gt;　说明：Description用来告诉搜索引擎你的网站主要内容。&lt;br /&gt;　用法：&amp;lt;Meta name="Description" Content="你网页的简述"&amp;gt;&lt;br /&gt;　注意： &lt;/p&gt;&lt;p&gt;&lt;br /&gt;3、Robots (机器人向导)&lt;br /&gt;　说明：Robots用来告诉搜索机器人哪些页面需要索引，哪些页面不需要索引。Content的参数有all、none、index、noindex、follow、nofollow。默认是all。&lt;br /&gt;　用法：&amp;lt;Meta name="Robots" Content="All|None|Index|Noindex|Follow|Nofollow"&amp;gt;&lt;br /&gt;　注意：许多搜索引擎都通过放出robot/spider搜索来登录网站，这些robot/spider就要用到meta元素的一些特性来决定怎样登录。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;　 all：文件将被检索，且页面上的链接可以被查询；&lt;br /&gt;　 none：文件将不被检索，且页面上的链接不可以被查询；(和 "noindex, no follow" 起相同作用)&lt;br /&gt;　 index：文件将被检索；（让robot/spider登录）&lt;br /&gt;　 follow：页面上的链接可以被查询；&lt;br /&gt;　 noindex：文件将不被检索，但页面上的链接可以被查询；(不让robot/spider登录)&lt;br /&gt;　nofollow：文件将不被检索，页面上的链接可以被查询。(不让robot/spider顺着此页的连接往下探找) &lt;/p&gt;&lt;p&gt;&lt;br /&gt;4、Author (作者)&lt;br /&gt;　说明：标注网页的作者或制作组&lt;br /&gt;　用法：&amp;lt;Meta name="Author" Content="张三，&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#97;&amp;#98;&amp;#99;&amp;#64;&amp;#115;&amp;#105;&amp;#110;&amp;#97;&amp;#46;&amp;#99;&amp;#111;&amp;#109;"&gt;abc@sina.com&lt;/a&gt;"&amp;gt;&lt;br /&gt;　注意：Content可以是：你或你的制作组的名字,或Email &lt;/p&gt;&lt;p&gt;&lt;br /&gt;5、Copyright (版权)&lt;br /&gt;　说明：标注版权&lt;br /&gt;　用法：&amp;lt;Meta name="Copyright" Content="本页版权归Zerospace所有。All Rights Reserved"&amp;gt;&lt;br /&gt;　注意： &lt;/p&gt;&lt;p&gt;&lt;br /&gt;6、Generator (编辑器)&lt;br /&gt;　说明：编辑器的说明&lt;br /&gt;　用法：&amp;lt;Meta name="Generator" Content="PCDATA|FrontPage|"&amp;gt;&lt;br /&gt;　注意：Content="你所用编辑器" &lt;/p&gt;&lt;p&gt;&lt;br /&gt;7、revisit-after (重访)&lt;br /&gt;　说明：&lt;br /&gt;　用法：&amp;lt;META name="revisit-after" CONTENT="7 days" &amp;gt;&lt;br /&gt;　注意： &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;#9733;Head中的其它一些用法 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、scheme (方案)&lt;br /&gt;　说明：scheme can be used when name is used to specify how the value of content should&lt;br /&gt;be interpreted.&lt;br /&gt;　用法：&amp;lt;meta scheme="ISBN" name="identifier" content="0-14-043205-1" /&amp;gt;&lt;br /&gt;　注意： &lt;/p&gt;&lt;p&gt;&lt;br /&gt;2、Link (链接)&lt;br /&gt;　说明：链接到文件&lt;br /&gt;　用法：&amp;lt;Link href="soim.ico" rel="Shortcut Icon"&amp;gt;&lt;br /&gt;　注意：很多网站如果你把她保存在收件夹中后，会发现它连带着一个小图标，如果再次点击进入之后还会发现地址栏中也有个小图标。现在只要在你的页头加上这段话，就能轻松实现这一功能。&amp;lt;LINK&amp;gt; 用来将目前文件与其它 URL 作连结，但不会有连结按钮，用於 &amp;lt;HEAD&amp;gt; 标记间， 格式如下： &lt;br /&gt;　&amp;lt;link href="URL" rel="relationship"&amp;gt; &lt;br /&gt;　&amp;lt;link href="URL" rev="relationship"&amp;gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;3、Base (基链接)&lt;br /&gt;　说明：插入网页基链接属性&lt;br /&gt;　用法：&amp;lt;Base href="&lt;a href="http://www.xia8.net/"&gt;http://www.xia8.net/&lt;/a&gt;" target="_blank"&amp;gt;&lt;br /&gt;　注意：你网页上的所有相对路径在链接时都将在前面加上&amp;#8220;http://www.cn8cn.com/&amp;#8221;。其中target="_blank"是链接文件在新的窗口中打开，你可以做其他设置。将&amp;#8220;_blank&amp;#8221;改为&amp;#8220;_parent&amp;#8221;是链接文件将在当前窗口的父级窗口中打开；改为&amp;#8220;_self&amp;#8221;链接文件在当前窗口（帧）中打开；改为&amp;#8220;_top&amp;#8221;链接文件全屏显示。 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以上是META标签的一些基本用法，其中最重要的就是：Keywords和Description的设定。为什么呢？道理很简单，这两个语句可以让搜索引擎能准确的发现你，吸引更多的人访问你的站点!根据现在流行搜索引擎(Google，Lycos，AltaVista等)的工作原理，搜索引擎先派机器人自动在WWW上搜索，当发现新的网站时，便于检索页面中的Keywords和Description，并将其加入到自己的数据库，然后再根据关键词的密度将网站排序。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;由此看来，我们必须记住添加Keywords和Description的META标签，并尽可能写好关键字和简介。否则，&lt;br /&gt;后果就会是：&lt;br /&gt;&lt;br /&gt;&amp;#9679;　如果你的页面中根本没有Keywords和Description的META标签，那么机器人是无法将你的站点加入数&lt;br /&gt;据库，网友也就不可能搜索到你的站点。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;#9679;　如果你的关键字选的不好，关键字的密度不高，被排列在几十甚至几百万个站点的后面被点击的可&lt;br /&gt;能性也是非常小的。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;写好Keywords(关键字)要注意以下几点： &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;#9679;　不要用常见词汇。例如www、homepage、net、web等。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;#9679;　不要用形容词，副词。例如最好的，最大的等。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;#9679;　不要用笼统的词汇，要尽量精确。例如&amp;#8220;爱立信手机&amp;#8221;，改用&amp;#8220;T28SC&amp;#8221;会更好。 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;#8220;三人之行，必有我师&amp;#8221;，寻找合适关键词的技巧是：到Google、Lycos、Alta等著名搜索引擎，搜索与&lt;br /&gt;你的网站内容相仿的网站，查看排名前十位的网站的META关键字，将它们用在你的网站上，效果可想而知了。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;#9733;小窍门 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;为了提高搜索点击率，这里还有一些&amp;#8220;捷径&amp;#8221;可以帮得到你： &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;#9679;　为了增加关键词的密度，将关键字隐藏在页面里(将文字颜色定义成与背景颜色一样)。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;#9679;　在图像的ALT注释语句中加入关键字。如：&amp;lt;IMG SRC="xxx.gif" Alt="Keywords"&amp;gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;#9679;　利用HTML的注释语句，在页面代码里加入大量关键字。用法： &amp;lt;!-- 这里插入关键字 --&amp;gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('d9b53549-5dce-4c63-9d38-35b9b4b9d450')"&gt;&lt;img style="display: none" id="code_img_opened_d9b53549-5dce-4c63-9d38-35b9b4b9d450" class="code_img_opened" onclick="cnblogs_code_hide('d9b53549-5dce-4c63-9d38-35b9b4b9d450',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&lt;div id="cnblogs_code_open_d9b53549-5dce-4c63-9d38-35b9b4b9d450" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;文件头，显示在浏览器标题区&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;http-equiv&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Content-Language"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="zh-cn"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;http-equiv&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Content-Type"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="text/html;&amp;nbsp;charset=gb2312"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="GENERATOR"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Microsoft&amp;nbsp;FrontPage&amp;nbsp;4.0"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ProgId"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="FrontPage.Editor.Document"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="制作人"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="唐蓉生"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;meta&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="主题词"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;content&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="HTML&amp;nbsp;网页制作&amp;nbsp;课件"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lavenderzh/aggbug/2383320.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/archive/2012/03/07/2383320.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lavenderzh/archive/2011/11/15/2250039.html</id><title type="text">ASP.NET保存信息总结(Application、Session、Cookie、ViewState和Cache等) .</title><summary type="text">在ASP.NET中，有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么? 为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示: 方法信息量大小保存时间应用范围保存位置Application任意大小整个应用程序的生命期所有用户服务器端Session小量,简单的数据用户活动时间+一段延迟时间(一般为20分钟)单个用户服务器端Cookie小量,简单的数据可以根据需要设定单个用户客户端Viewstate小量,简单的数据一个Web页面的生命期单个用户客户端Cache任意大小.</summary><published>2011-11-15T10:35:00Z</published><updated>2011-11-15T10:35:00Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lavenderzh/archive/2011/11/15/2250039.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/archive/2011/11/15/2250039.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在ASP.NET中，有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 为了更清楚的了解,我们总结出每一种对象应用的具体环境,如下表所示: &lt;/p&gt;&lt;table style="width: 759px; border-collapse: collapse; height: 271px" border="1" cellspacing="0" cellpadding="3"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;方法&lt;/td&gt;&lt;td&gt;信息量大小&lt;/td&gt;&lt;td style="height: 42px"&gt;保存时间&lt;/td&gt;&lt;td&gt;应用范围&lt;/td&gt;&lt;td&gt;保存位置&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="width: 116px"&gt;Application&lt;/td&gt;&lt;td style="width: 204px"&gt;任意大小&lt;/td&gt;&lt;td style="width: 246px"&gt;整个应用程序的生命期&lt;/td&gt;&lt;td style="width: 75px; height: 26px"&gt;所有用户&lt;/td&gt;&lt;td&gt;服务器端&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Session&lt;/td&gt;&lt;td&gt;小量,简单的数据&lt;/td&gt;&lt;td&gt;&lt;p&gt;用户活动时间+一段延迟时间(一般&lt;br /&gt;为20分钟)&lt;/p&gt;&lt;/td&gt;&lt;td&gt;单个用户&lt;/td&gt;&lt;td&gt;服务器端&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cookie&lt;/td&gt;&lt;td&gt;小量,简单的数据&lt;/td&gt;&lt;td&gt;可以根据需要设定&lt;/td&gt;&lt;td&gt;单个用户&lt;/td&gt;&lt;td&gt;客户端&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Viewstate&lt;/td&gt;&lt;td&gt;小量,简单的数据&lt;/td&gt;&lt;td&gt;一个Web页面的生命期&lt;/td&gt;&lt;td&gt;单个用户&lt;/td&gt;&lt;td&gt;客户端&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Cache&lt;/td&gt;&lt;td&gt;任意大小&lt;/td&gt;&lt;td&gt;可以根据需要设定&lt;/td&gt;&lt;td&gt;所有用户&lt;/td&gt;&lt;td&gt;服务器端&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;隐藏域&lt;/td&gt;&lt;td&gt;小量,简单的数据&lt;/td&gt;&lt;td&gt;一个Web页面的生命期&lt;/td&gt;&lt;td&gt;单个用户&lt;/td&gt;&lt;td&gt;客户端&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;查询字符串&lt;/td&gt;&lt;td&gt;小量,简单的数据&lt;/td&gt;&lt;td&gt;直到下次页面跳转请求&lt;/td&gt;&lt;td&gt;单个用户&lt;/td&gt;&lt;td&gt;客户端&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Web.Config文件&lt;/td&gt;&lt;td&gt;不变或极少改变的小量数据&lt;/td&gt;&lt;td&gt;直到配置文件被更新&lt;/td&gt;&lt;td&gt;单个用户&lt;/td&gt;&lt;td&gt;服务器端&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.Application对象 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application用于保存所有用户的公共的数据信息,如果使用Application对象,一个需要考虑的问题是任何写操作都要在 Application_OnStart事件(global.asax)中完成.尽管使用Application.Lock和 Applicaiton.Unlock方法来避免写操作的同步,但是它串行化了对Application对象的请求,当网站访问量大的时候会产生严重的性 能瓶颈.因此最好不要用此对象保存大的数据集合.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.Session对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Session用于保存每个用户的专用信息.她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右).S&lt;br /&gt;ession中的信息保存在Web服务器内容中,保存的数据量可大可小.当Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用 程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错 的选择.使用Session对象保存信息的代码如下: &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;存放信息&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Session[&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;username&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;zhouhuan&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;读取数据&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt; UserName&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;Session[&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;username&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;].ToString();&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.Cookie对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cookie用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息，信息保存的时间可以根据需要设置.如果没有设置 Cookie失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不 会过期.Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4096,因此不要用来保存数据集及其他大量数据.由于并非所有的浏览器都支持 Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性.使用 Cookie对象保存的代码如下:&lt;/p&gt;&lt;div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;存放信息&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Response.Cookies[&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;UserID&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;].Value&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;0001&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;读取信息&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt; UserID&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;Response.Cookies[&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;UserID&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;].Value;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4.ViewState对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ViewState 常用于保存单个用户的状态信息，有效期等于页面的生存期。ViewState容器可以保持大量的数据，但是必须谨慎使用，因为过多使用会影响应用程序的性 能。所有Web服务器控件都使用ViewState在页面回发期音保存自己的状态信息。如果某个控件不需要在回发期间保存状态信息,最好关闭该对象的 ViewState，避免不必要的资源浪费。通过给@Page指令添加&amp;#8220;EnableViewState=false&amp;#8221;属性可以禁止整个页面的 ViewState。使用ViewState对象保存信息的代码如下。&lt;/p&gt;&lt;div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;存放信息&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp; ViewState["nameID"]="0001";&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;读取信息&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp; string NameID&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;ViewState[&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;nameID&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;].ToString();&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;5.Cache对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Cache对象用于在HTTP请求间保存页面或数据。该对象的使用可以极大地提高整个应用程序的效率。它允许将频繁访问的大量服务器资源存储在内存 中，当用户发出相同的请求后服务器不再次处理而是将Cache中保存的信息返回给用户，节省了服务器处理请求的时间。此对象的实例是每个应用程序专用的， 其生存期依赖于该应用程序的生存期。当重新启动应用程序时，将重新创建其Cache对象的实例。使用Cache对象保存信息的代码如下。&lt;/p&gt;&lt;div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;存放信息&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp; Cache[&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;nameID&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;]&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;0001&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;存放信息&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp; Cache.Insert(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;nameID&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;0001&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;读取信息&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt; NameID&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;Cache[&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;nameID&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;].ToString();&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 6.隐藏域&lt;br /&gt;Hidden控件是属于HTML类型的服务器控件，使用此控件可以实现隐藏域的功能。其实此控件和其它服务器控件的使用没有太大区别，只是它不会在用户端 的浏览器中显示，始终处于隐藏状态。但是每次页面提交的时候，此控件和其它服务器控件一同提交到服务器端，因此在服务器端可以使用Value属性获取或保 存一些数据信息。使用Hidden控件保存信息的代码如下。&lt;/p&gt;&lt;div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;存放信息&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Hidden.Value="0001";&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;获取信息&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;string NameID=Hidden.Value;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;7.查询字符串&lt;br /&gt;查询字符串的方式是将要传递的值连接在URL后面，然后通过Response.Redirect方法实现客户端的重定向。这种方式可以实现在两个页面之间传递信息。由于URL的长度有一定的限制，因此不能传递太大的信息，加外安全性也不是很好。&lt;br /&gt;传递信息如下。&lt;/p&gt;&lt;div style="border-bottom: rgb(204,204,204) 1px solid; border-left: rgb(204,204,204) 1px solid; padding-bottom: 4px; background-color: rgb(238,238,238); padding-left: 4px; width: 98%; padding-right: 5px; color: red; font-size: 13px; border-top: rgb(204,204,204) 1px solid; border-right: rgb(204,204,204) 1px solid; padding-top: 4px"&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp; Response.Redirect(&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;List.aspx?nameID=0001&amp;amp;gradeID=002&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;执行上面的语句后在IE地址栏显示的URL的代码如下。&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp; http:&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;localhost/List.aspx?nameID=0001&amp;amp;grade=002&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;//&lt;/span&gt;&lt;span&gt;当跳转到List.aspx后，可以通过以下代码获得所传递的信息。&lt;/span&gt;&lt;span&gt;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt; NameID.GradeID;&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp; NameID&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;Request.Params[&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;nameID&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;];&lt;br /&gt;&lt;img alt="" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" /&gt;&amp;nbsp;&amp;nbsp; GradeID&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;Request.Params[&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;gradeID&lt;/span&gt;&lt;span style="color: #000000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;];&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 除了以上介绍的几种对象外，还可以使用Context对象和Web.Config配置文件。 &lt;/p&gt;&lt;img src="http://www.cnblogs.com/lavenderzh/aggbug/2250039.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/archive/2011/11/15/2250039.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lavenderzh/archive/2011/11/05/2237054.html</id><title type="text">【原创】VS2008 Web应用程序带数据库制作安装程序</title><summary type="text">一个解决方案中可能会包含多个类库项目和一个网站，打包过程如下：1、在【解决方案资源管理器】中【右键-添加-新建项目】，左侧选择【其他类型项目】，右侧选择【安装项目】，如下图：2、点击【确定】后，左侧【文件系统】选项卡中选择【应用程序文件夹】-【添加】-【项目输出】，类库项目选择添加【主输出】，网站选择添加【内容文件】3、在网站的制作过程中可能用到一些其他的BLL组件，也需要添加进来，还是选择【应用程序文件夹】-【添加】-【程序集】，选择你网站BIN文件夹下的一些BLL4、因为要带数据库带包，此处采用打包程序利用系统存储过程附加MDF和LDF文件的方法，所以【应用程序文件夹】中还需要【添加-文件</summary><published>2011-11-05T06:52:00Z</published><updated>2011-11-05T06:52:00Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lavenderzh/archive/2011/11/05/2237054.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/archive/2011/11/05/2237054.html"/><content type="html">&lt;p&gt;一个解决方案中可能会包含多个类库项目和一个网站，打包过程如下：&lt;/p&gt;&lt;p&gt;1、在【解决方案资源管理器】中【右键-添加-新建项目】，左侧选择【其他类型项目】，右侧选择【安装项目】，如下图：&lt;/p&gt;&lt;p&gt;&lt;img style="width: 679px; height: 412px" border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/01-1.JPG" width="679" height="412" /&gt;&lt;/p&gt;&lt;p&gt;2、点击【确定】后，左侧【文件系统】选项卡中选择【应用程序文件夹】-【添加】-【项目输出】，类库项目选择添加【主输出】，网站选择添加【内容文件】&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/02-1.JPG" width="483" height="194" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/1.JPG" width="321" height="356" /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/2.JPG" width="321" height="358" /&gt;&lt;/p&gt;&lt;p&gt;3、在网站的制作过程中可能用到一些其他的BLL组件，也需要添加进来，还是选择【应用程序文件夹】-【添加】-【程序集】，选择你网站BIN文件夹下的一些BLL&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/5.JPG" width="482" height="196" /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/6.JPG" width="478" height="352" /&gt;&lt;/p&gt;&lt;p&gt;4、因为要带数据库带包，此处采用打包程序利用系统存储过程附加MDF和LDF文件的方法，所以【应用程序文件夹】中还需要【添加-文件】，将数据库的MDF和LDF文件添加进来（先停止SQL服务器，直到安装程序制作完成），如果安装程序需要在控制面板的添加删除程序列表中有图标的话，也需要将ICO图标文件添加进来。&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/7.JPG" width="506" height="198" /&gt;&lt;/p&gt;&lt;p&gt;5、设置安装项目的常用属性：&lt;/p&gt;&lt;p&gt;Author：作者&lt;/p&gt;&lt;p&gt;Manufactuer：公司&lt;/p&gt;&lt;p&gt;Title：安装程序的标题&lt;/p&gt;&lt;p&gt;AddRemoveProgramsIco：设置为添加进来的ICO文件&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/8.JPG" width="456" height="309" /&gt;&lt;/p&gt;&lt;p&gt;如果不带数据库安装的话，可以将安装项目直接生成就可以了，如果Debug设置为True，则生成的MSI文件在Debug文件夹中，如果为False，生成的MSI文件在Release文件夹中。&lt;/p&gt;&lt;p&gt;6、在【解决方案资源管理器】中，右键，添加【新建项目】-【Visual C#】-【类库】，建立数据库安装程序，类库建好后，将默认的Class1.cs文件删除，右键，添加【新建项】-【安装程序类】，下面主要是此类的代码。&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/9.JPG" width="680" height="411" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/10.JPG" width="680" height="388" /&gt;&lt;/p&gt;&lt;p&gt;7、安装程序类的代码：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.ComponentModel;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.Configuration.Install;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.Linq;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;以下引入&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.Collections.Specialized;&lt;br /&gt;&lt;span style="color: #008080"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.Data;&lt;br /&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.Data.SqlClient;&lt;br /&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.Reflection;&lt;br /&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.Xml;&lt;br /&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;14&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt;&amp;nbsp;StuSetupClassLibrary&lt;br /&gt;&lt;span style="color: #008080"&gt;16&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[RunInstaller(&lt;span style="color: #0000ff"&gt;true&lt;/span&gt;)]&lt;br /&gt;&lt;span style="color: #008080"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;partial&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&amp;nbsp;InstallerDB&amp;nbsp;:&amp;nbsp;Installer&lt;br /&gt;&lt;span style="color: #008080"&gt;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;22&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;必需的设计器变量,均来自于安装程序的&amp;#8220;自定义操作&amp;#8221;视图中的设置&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;23&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;24&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;hostname;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;数据库服务器名称&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;25&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;username;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;登录数据库服务器的用户名&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;26&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;userpassword;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;登录数据库服务器的密码&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;27&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;dbname;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;数据库名称&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;28&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&amp;nbsp;InstallerDB()&lt;br /&gt;&lt;span style="color: #008080"&gt;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;br /&gt;&lt;span style="color: #008080"&gt;32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;33&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;34&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;构造安装数据库文件的SQL语句（调用系统存储过程）&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;35&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;36&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;返回构造的SQL语句&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;37&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;CreateSqlStr()&lt;br /&gt;&lt;span style="color: #008080"&gt;38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;sqlstr&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000"&gt;""&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;datafile&amp;nbsp;=&amp;nbsp;Context.Parameters[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;installdir&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;]&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;@"FlowerShop&lt;/span&gt;&lt;span style="color: #800000"&gt;.mdf&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;logfile&amp;nbsp;=&amp;nbsp;Context.Parameters[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;installdir&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;]&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;@"FlowerShop&lt;/span&gt;&lt;span style="color: #800000"&gt;_log.ldf&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sqlstr&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;EXEC&amp;nbsp;&amp;nbsp;sp_attach_db&amp;nbsp;@dbname&amp;nbsp;='&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;Context.Parameters[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;dbname&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;]&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;',@filename1='&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;datafile&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;',@filename2='&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;logfile&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&amp;nbsp;sqlstr;&lt;br /&gt;&lt;span style="color: #008080"&gt;44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;45&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;46&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;通过传入CreateSqlStr()方法构造的SQL语句来执行数据库安装&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;47&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;48&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="DatabaseName"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;SQL服务器上存在的任一数据库，如：pubs&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;49&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="SqlStr"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;执行安装的SQL语句，来源于CreateSqlStr()方法的返回值&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;50&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;ExecuteSql(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;DatabaseName,&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;SqlStr)&lt;br /&gt;&lt;span style="color: #008080"&gt;51&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;52&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;SqlConnectionStr&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000"&gt;@"&lt;/span&gt;&lt;span style="color: #800000"&gt;server=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;hostname&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;;uid=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;username&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;;pwd=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;userpassword;&lt;br /&gt;&lt;span style="color: #008080"&gt;53&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlConnection&amp;nbsp;myConnection&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&amp;nbsp;SqlConnection(SqlConnectionStr);&lt;br /&gt;&lt;span style="color: #008080"&gt;54&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlCommand&amp;nbsp;myCommand&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&amp;nbsp;SqlCommand(SqlStr,&amp;nbsp;myConnection);&lt;br /&gt;&lt;span style="color: #008080"&gt;55&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCommand.Connection.Open();&lt;br /&gt;&lt;span style="color: #008080"&gt;56&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCommand.Connection.ChangeDatabase(DatabaseName);&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;替换当前连接打开的数据库&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;57&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCommand.ExecuteNonQuery();&lt;br /&gt;&lt;span style="color: #008080"&gt;58&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;myCommand.Connection.Close();&lt;br /&gt;&lt;span style="color: #008080"&gt;59&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;60&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;61&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;调用ExecuteSql（）方法执行安装&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;62&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;63&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;AddStuInfoDataBase()&lt;br /&gt;&lt;span style="color: #008080"&gt;64&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;65&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExecuteSql(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;pubs&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;CreateSqlStr());&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;设置当前连接打开pubs数据库,然后执行新数据库安装&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;66&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;67&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;68&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;修改web.config文件中的数据库连接字符串&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;69&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;70&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;ModifyXML()&lt;br /&gt;&lt;span style="color: #008080"&gt;71&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;72&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;XMLdir&amp;nbsp;=&amp;nbsp;Context.Parameters[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;installdir&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;]&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;@"&lt;/span&gt;&lt;span style="color: #800000"&gt;web.config&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;73&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlDocument&amp;nbsp;doc&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&amp;nbsp;XmlDocument();&lt;br /&gt;&lt;span style="color: #008080"&gt;74&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doc.Load(XMLdir);&lt;br /&gt;&lt;span style="color: #008080"&gt;75&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;strContent&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;server=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;hostname&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;;database=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;dbname&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;;uid=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;username&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;;pwd=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;userpassword&amp;nbsp;;&lt;br /&gt;&lt;span style="color: #008080"&gt;76&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlNodeList&amp;nbsp;xnl&amp;nbsp;=&amp;nbsp;doc.SelectSingleNode(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration/connectionStrings&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).ChildNodes;&lt;br /&gt;&lt;span style="color: #008080"&gt;77&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;XmlElement&amp;nbsp;xe&amp;nbsp;=&amp;nbsp;(XmlElement)xnl.Item(&lt;span style="color: #800080"&gt;0&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080"&gt;78&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xe.SetAttribute(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;connectionString&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;strContent);&lt;br /&gt;&lt;span style="color: #008080"&gt;79&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;doc.Save(XMLdir);&lt;br /&gt;&lt;span style="color: #008080"&gt;80&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;81&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;82&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;重写安装方法&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;83&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;84&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="stateSaver"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;85&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;Install(IDictionary&amp;nbsp;stateSaver)&lt;br /&gt;&lt;span style="color: #008080"&gt;86&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080"&gt;87&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;base&lt;/span&gt;.Install(stateSaver);&lt;br /&gt;&lt;span style="color: #008080"&gt;88&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;hostname&amp;nbsp;=&amp;nbsp;Context.Parameters[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;hostname&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;来源于安装过程中用户输入的SQL服务器名称&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;89&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;username&amp;nbsp;=&amp;nbsp;Context.Parameters[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;username&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;来源于安装过程中用户输入的SQL用户名&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;90&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;userpassword&amp;nbsp;=&amp;nbsp;Context.Parameters[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;userpassword&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;];&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;来源于安装过程中用户输入的SQL密码&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;91&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dbname&amp;nbsp;=&amp;nbsp;Context.Parameters[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;dbname&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;];&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;来源于安装过程中用户为数据库新起的名字&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;92&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.AddStuInfoDataBase();&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;执行数据库安装&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;93&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.ModifyXML();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;修改数据库连接字符串&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;94&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;95&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080"&gt;96&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080"&gt;97&lt;/span&gt;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;【注意】&amp;nbsp;最后一个方法Install方法中Parameters中的键名都是与接下来要添加的自定义操作中的变量名要保持一致的，包括上面用到的installdir。&lt;/p&gt;&lt;p&gt;【注意】&amp;nbsp;类库项目编写完成后，在解决方案中选中类库项目，右键，生成&lt;/p&gt;&lt;p&gt;8、在安装项目的【应用程序文件夹】中【添加】-【项目输出】，将刚建好的DbClass项目的&amp;#8220;主输出&amp;#8221;添加进来。&lt;/p&gt;&lt;p&gt;9、在安装项目上右键-【视图】-【用户界面】,在【安装】中，选择【启动】，右键选择【添加对话框】-【文本框（A）】，调整文本框A的位置到【安装文件夹】之上，如果要添加许可协议，还可以再添加对话框，选择【许可协议】，调整位置到【欢迎使用】之下。&lt;/p&gt;&lt;p&gt;10、选中【文本框（A）】，设置其属性如下：&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/12.JPG" width="447" height="405" /&gt;&lt;br /&gt;注意设置的Edit*Property&lt;/p&gt;&lt;p&gt;11、在安装项目上右键-【视图】-【自定义操作】，在【安装】处右键【添加自定义操作】，选择应用程序文件夹中的DbClass主输出，并设置主输出的CustomActionData属性为：/dbname=[DBNAME]&amp;nbsp; /hostname=[SERVER]&amp;nbsp; /username=[UID]&amp;nbsp; /userpassword=[PWD]&amp;nbsp; /installdir="[TARGETDIR]\"，总共包括5项，都是DbClass项目的类中要用到的，每一项都以/开头，每项之间都用空格隔开，每一项的名字都是与DbClass项目的类中Context.Paramerters的键名一直，其中前4项的[]中的内容都与上面用户界面的文本框A的属性中设置的Edit*Property一致，最后一项是固定的TARGETDIR，写法有所不同，[]两边有双引号。下面的提交、回滚、卸载都同样设置。&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/13.JPG" width="369" height="262" /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/04.JPG" width="460" height="311" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/14.JPG" width="760" height="182" /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/lavenderzh/15.JPG" width="245" height="181" /&gt;&lt;/p&gt;&lt;p&gt;12、如果要添加许可协议，先创建一个rtf文件，来包含许可协议的内容，注意此rtf文件不能新建一个word DOC文件，然后将其扩展名再改成rtf，这样许可协议在显示的时候会是乱码，必须打开WORD软件，去新建一个空白文档，然后写入许可协议内容，最后直接保存成rtf格式，随后在【文件系统】的【应用程序文件夹】中添加【文件】，选择此rtf文件，然后在【用户界面】的【安装】-【启动】中选择【许可协议】，设置LicenseFile属性为应用程序文件中的rtf文件。&lt;/p&gt;&lt;p&gt;13、可以为安装包添加卸载程序&lt;/p&gt;&lt;p&gt;A、在系统文件的system32文件夹下找到msiexec.exe。(c:\windows\system32\msiexec.exe)在打包项目中应用程序文件夹中添加文件msiexec.exe。&lt;/p&gt;&lt;p&gt;注意：最后生成时若提示msiexec.exe受windows文件保护，可以将msiexec.exe文件复制到另一个位置，然后添加到安装程序中来，并重新设置B步骤中的创建方式的target&lt;br /&gt;B、创建msiexec的快捷方式，改此快捷方式的Argmuments属性为&amp;#8220;/x {产品ID}&amp;#8221;，说明：产品ID的值为打包项目(比如FlowerShopSetup) 的ProductCode属性值，如: /x{BB8D4C5A-B041-489B-84FF-ACF0C8342264}。&lt;br /&gt;C、将快捷方式拖到用户程序菜单中即可，可以为快捷方法重命名，如：卸载FlowerShop，也可以设置快捷方式的Icon属性，为快捷方式指定图标。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最后选择安装项目，右键生成即可。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lavenderzh/aggbug/2237054.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/archive/2011/11/05/2237054.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235801.html</id><title type="text">asp.net中的缓存（三）应用程序数据缓存</title><summary type="text">应用程序数据缓存本缓存依赖于 System.Web.Caching 命名空间。 该命名空间提供了缓存服务器上常用的数据的类，其包含的一个Cache类提供很多的方法，由于该类是一个字典类，所以，在其中存放任意的数据对象，如哈希表、数据集等。这些方法能够对这些对象进行增加、删除、失效等操作，甚至还可以依赖其它文件或缓存项的对象，并且能在从Cache中移除对象时执行回调以通知应用程序。示例代码如下：应用程序数据缓存1//增加命名空间2usingSystem.Web.Caching;34///&lt;summary&gt;5///根据索引键值从缓存中获取对象6///&lt;/summary&gt;7/</summary><published>2011-11-04T03:01:00Z</published><updated>2011-11-04T03:01:00Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235801.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235801.html"/><content type="html">&lt;p align="left"&gt;&lt;a href="http://blog.sina.com.cn/u/1286320447"&gt;&lt;strong&gt;&lt;font color="#437b40"&gt;应用程序数据缓存&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="left"&gt;本缓存依赖于 System.Web.Caching 命名空间。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 该命名空间提供了缓存服务器上常用的数据的类，其包含的一个Cache类提供很多的方法，由于该类是一个字典类，所以，在其中存放任意的数据对象，如哈希表、数据集等。这些方法能够对这些对象进行增加、删除、失效等操作，甚至还可以依赖其它文件或缓存项的对象，并且能在从Cache中移除对象时执行回调以通知应用程序。示例代码如下：&lt;/p&gt;&lt;p align="left"&gt;应用程序数据缓存&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;增加命名空间&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&amp;nbsp;System.Web.Caching;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;根据索引键值从缓存中获取对象&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="cacheKey"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;索引键值&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;缓存的对象&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&amp;nbsp;GetObjectFromCache(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;cacheKey)&lt;br /&gt;&lt;span style="color: #800080"&gt;10&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #800080"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cache&amp;nbsp;cache&amp;nbsp;=&amp;nbsp;HttpRuntime.Cache;&lt;br /&gt;&lt;span style="color: #800080"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&amp;nbsp;cache[cacheKey];&lt;br /&gt;&lt;span style="color: #800080"&gt;13&lt;/span&gt;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #800080"&gt;14&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #800080"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;16&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;将对象以cacheKey为索引键值添加到缓存中&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;17&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;18&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="cacheKey"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;索引键值&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;19&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="obj"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;需要缓存的对象&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;20&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;AddObjectToCache(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;cacheKey,&amp;nbsp;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&amp;nbsp;obj)&lt;br /&gt;&lt;span style="color: #800080"&gt;21&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #800080"&gt;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cache&amp;nbsp;cache&amp;nbsp;=&amp;nbsp;HttpRuntime.Cache;&lt;br /&gt;&lt;span style="color: #800080"&gt;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cache.Insert(cacheKey,&amp;nbsp;obj);&lt;br /&gt;&lt;span style="color: #800080"&gt;24&lt;/span&gt;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #800080"&gt;25&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #800080"&gt;26&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;27&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;将对象以cacheKey为索引键值添加到缓存中&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;28&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;29&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="cacheKey"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;索引键值&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;30&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="obj"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;需要缓存的对象&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;31&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="absoluteExpiration"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;绝对过期时间&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;32&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="slidingExpiration"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;最后一次访问所插入对象时与该对象过期时之间的时间间隔&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;33&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;AddObjectToCache(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;cacheKey,&amp;nbsp;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&amp;nbsp;obj,&amp;nbsp;DateTime&amp;nbsp;absoluteExpiration,&amp;nbsp;TimeSpan&amp;nbsp;slidingExpiration)&lt;br /&gt;&lt;span style="color: #800080"&gt;34&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #800080"&gt;35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Cache&amp;nbsp;cache&amp;nbsp;=&amp;nbsp;HttpRuntime.Cache;&lt;br /&gt;&lt;span style="color: #800080"&gt;36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cache.Insert(cacheKey,&amp;nbsp;obj,&amp;nbsp;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;,&amp;nbsp;absoluteExpiration,&amp;nbsp;slidingExpiration);&lt;br /&gt;&lt;span style="color: #800080"&gt;37&lt;/span&gt;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #800080"&gt;38&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #800080"&gt;39&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;Page_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&lt;span style="color: #800080"&gt;40&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #800080"&gt;41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;cacheKey&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;__test&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #800080"&gt;42&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #800080"&gt;43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;从缓存中获取&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;GetObjectFromCache(cacheKey);&lt;br /&gt;&lt;span style="color: #800080"&gt;45&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;缓存里没有&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;46&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&amp;nbsp;(obj&amp;nbsp;==&amp;nbsp;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #800080"&gt;47&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #800080"&gt;48&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;把当前时间进行缓存&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;49&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;obj&amp;nbsp;=&amp;nbsp;DateTime.Now;&lt;br /&gt;&lt;span style="color: #800080"&gt;50&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&amp;nbsp;(obj&amp;nbsp;!=&amp;nbsp;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #800080"&gt;51&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #800080"&gt;52&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;缓存时间30秒&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;53&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp;cacheTime&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;30&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #800080"&gt;54&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;添加到缓存中去&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;55&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AddObjectToCache(cacheKey,&amp;nbsp;obj,&amp;nbsp;DateTime.Now.AddSeconds(cacheTime),&amp;nbsp;TimeSpan.Zero);&lt;br /&gt;&lt;span style="color: #800080"&gt;56&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #800080"&gt;57&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #800080"&gt;58&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Literal1.Text&amp;nbsp;=&amp;nbsp;obj.ToString();&lt;br /&gt;&lt;span style="color: #800080"&gt;59&lt;/span&gt;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p align="left"&gt;&lt;wbr&gt;&lt;wbr&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 这些代码就是比较好的缓存解决方法，不过这里有一个问题，当数据发生变化时，缓存里面还是过期的数据，只有等到缓存内容过期之后，才能重新获取新的数据。下面两篇就解决了这个问题。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lavenderzh/aggbug/2235801.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235801.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235797.html</id><title type="text">asp.net中的缓存（二）局部数据缓存</title><summary type="text">局部数据缓存有时我们需要的功能不是缓存全部的页面，而是缓存页面上的某一个部分，其余部分是动态的，这时，就需要用到页面局部缓存，该缓存包括两个部分：控件缓存和替换后缓存。 控件缓存（片段缓存） 本缓存是之前提到过的，类似于页面输出缓存那样，建立一个用户控件，将需要缓存的信息写在控件内，并标记其为可缓存的，这样就缓存了控件内的信息，但是并没有缓存整个页面，这样就达到了页面局部缓存的目的。这种缓存比较适合页面的信息有较多的动态信息，少部分的静态信息，这样的情况可用页面局部缓存。 声明方式也很简单，先建立一个用户控件（ascx），并且在其内部声明为可缓存的，如下所示：可缓存的用户控件1&lt;%@Co</summary><published>2011-11-04T02:59:00Z</published><updated>2011-11-04T02:59:00Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235797.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235797.html"/><content type="html">&lt;p align="left"&gt;&lt;a href="http://blog.sina.com.cn/u/1286320447"&gt;&lt;strong&gt;局部数据缓存&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="left"&gt;有时我们需要的功能不是缓存全部的页面，而是缓存页面上的某一个部分，其余部分是动态的，这时，就需要用到页面局部缓存，该缓存包括两个部分：&lt;strong&gt;控件缓存&lt;/strong&gt;和&lt;strong&gt;替换后缓存&lt;/strong&gt;。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; &lt;strong&gt;控件缓存（片段缓存）&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 本缓存是之前提到过的，类似于页面输出缓存那样，建立一个用户控件，将需要缓存的信息写在控件内，并标记其为可缓存的，这样就缓存了控件内的信息，但是并没有缓存整个页面，这样就达到了页面局部缓存的目的。这种缓存比较适合页面的信息有较多的动态信息，少部分的静态信息，这样的情况可用页面局部缓存。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 声明方式也很简单，先建立一个用户控件（ascx），并且在其内部声明为可缓存的，如下所示：&lt;/p&gt;&lt;p align="left"&gt;可缓存的用户控件&lt;br /&gt;1&amp;nbsp;&lt;wbr&gt;&amp;lt;%@&amp;nbsp;&lt;wbr&gt;Control&amp;nbsp;&lt;wbr&gt;Language="C#"&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;CodeBehind="ControlCache1.ascx.cs"&amp;nbsp;&lt;wbr&gt;Inherits="TestWebCache.UserControls.ControlCache1"&amp;nbsp;&lt;wbr&gt;%&amp;gt;&lt;br /&gt;2&amp;nbsp;&lt;wbr&gt;&amp;lt;%@&amp;nbsp;&lt;wbr&gt;OutputCache&amp;nbsp;&lt;wbr&gt;Duration="60"&amp;nbsp;&lt;wbr&gt;VaryByParam="none"&amp;nbsp;&lt;wbr&gt;%&amp;gt;&lt;br /&gt;3&amp;nbsp;&lt;wbr&gt;&lt;br /&gt;4&amp;nbsp;&lt;wbr&gt;&amp;lt;asp:Literal&amp;nbsp;&lt;wbr&gt;ID="lblControlContent"&amp;nbsp;&lt;wbr&gt;runat="server"&amp;nbsp;&lt;wbr&gt;/&amp;gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 用户控件的后台代码为获取当前时间。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 再建立一个aspx页面来调用该控件，并且在页面上也方式一个Literal，来获取当前时间，以此产生对比的效果，页面前台如下所示：&lt;/p&gt;&lt;p align="left"&gt;控件缓存 - 前台代码&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;1&amp;nbsp;&lt;span style="background-color: #ffff00; color: #000000"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;@&amp;nbsp;Page&amp;nbsp;Language&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;C#&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;&amp;nbsp;CodeBehind&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;TestPartCache1.aspx.cs&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;Inherits&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;TestWebCache.TestPartCache1&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: #ffff00; color: #000000"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;2&amp;nbsp;&lt;span style="background-color: #ffff00; color: #000000"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;@&amp;nbsp;Register&amp;nbsp;Src&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;UserControls/ControlCache1.ascx&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;TagName&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;ControlCache1&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;TagPrefix&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;uc1&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: #ffff00; color: #000000"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;3&amp;nbsp;&lt;br /&gt;&amp;nbsp;4&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;DOCTYPE&amp;nbsp;html&amp;nbsp;PUBLIC&amp;nbsp;"-//W3C//DTD&amp;nbsp;XHTML&amp;nbsp;1.0&amp;nbsp;Transitional//EN"&amp;nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;5&amp;nbsp;&lt;br /&gt;&amp;nbsp;6&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;7&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;测试页面局部缓存&amp;nbsp;-&amp;nbsp;控件缓存&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;9&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;10&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;form&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="form1"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;控件时间：&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;uc1:ControlCache1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="ControlCache1_1"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;页面时间：&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Literal&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="lblPageContent"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;form&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;16&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;17&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p align="left"&gt;&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 浏览该页面，在每次刷新的时候可以看到，控件的时间每60秒才变化一次，而页面时间是伴随着每次刷新操作都在改变，这样就达到了页面局部缓存的目的。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; &lt;strong&gt;替换后缓存&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 本缓存与上述的控件缓存正好相反，它是对整个页面除部分动态数据之外的部分进行缓存。有时，我们需要对整个aspx页面进行缓存，但是在这个页面中，又有部分数据需要和数据库实时交互的，其余的部分则是一成不变（或者很少变化）的静态数据，这时，就可以使用替换后缓存。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 在ASP.NET 2.0中，替换后缓存主要有三种方式：以声明方式使用Substitution控件、以编程方式使用Substitution控件API、以隐式方式使用控件。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 可以看到，前两种方法都是以Substitution控件为核心的，那么，何为Substitution控件呢？&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; Substitution控件能够指定页面输出缓存中需要以动态内容替换该控件的部分，即：允许对整个页面进行输出缓存，然后使用该控件指出页面中不用缓存的部分。页面中可缓存的区域在和数据库交互完一次之后，直到缓存过期或被清除，才会再和数据库进行交互，而动态区域（即：Substitution控件所指定的区域）则每次收到请求时，都要和数据库进行交互。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; &lt;strong&gt;Substitution&lt;/strong&gt;&lt;strong&gt;控件的使用&lt;/strong&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 先将页面设置成输出缓存，然后再在页面上放置该控件，即可实现替换后缓存，实例代码如下所示：&lt;/p&gt;&lt;p align="left"&gt;替换后缓存 - 前台代码&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;1&amp;nbsp;&lt;span style="background-color: #ffff00; color: #000000"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;@&amp;nbsp;Page&amp;nbsp;Language&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;C#&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;&amp;nbsp;CodeBehind&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;TestPartCache2.aspx.cs&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;Inherits&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;TestWebCache.TestPartCache2&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: #ffff00; color: #000000"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;2&amp;nbsp;&lt;span style="background-color: #ffff00; color: #000000"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;@&amp;nbsp;OutputCache&amp;nbsp;Duration&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;60&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;VaryByParam&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;none&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: #ffff00; color: #000000"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;3&amp;nbsp;&lt;br /&gt;&amp;nbsp;4&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;DOCTYPE&amp;nbsp;html&amp;nbsp;PUBLIC&amp;nbsp;"-//W3C//DTD&amp;nbsp;XHTML&amp;nbsp;1.0&amp;nbsp;Transitional//EN"&amp;nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;5&amp;nbsp;&lt;br /&gt;&amp;nbsp;6&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;7&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;测试页面局部缓存&amp;nbsp;-&amp;nbsp;替换后缓存&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;9&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;10&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;form&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="form1"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;页面缓存时间：&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Literal&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="lblPageContent"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;p&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;替换后的时间：&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Substitution&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Substitution1"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&lt;br /&gt;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MethodName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="GetDateTime"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;form&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;17&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;18&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p align="left"&gt;替换后缓存 - 后台代码&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;Page_Load(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&amp;nbsp;(!IsPostBack)&lt;br /&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lblPageContent.Text&amp;nbsp;=&amp;nbsp;DateTime.Now.ToString();&lt;br /&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;7&lt;/span&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;8&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #800080"&gt;9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;10&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;获取系统当前时间&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;11&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;必须是静态方法&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;12&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;13&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="context"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;必须接受此类型的参数&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;14&lt;/span&gt;&amp;nbsp;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;必须返回字符串&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #800080"&gt;15&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;protected&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;GetDateTime(HttpContext&amp;nbsp;context)&lt;br /&gt;&lt;span style="color: #800080"&gt;16&lt;/span&gt;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #800080"&gt;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&amp;nbsp;DateTime.Now.ToString();&lt;br /&gt;&lt;span style="color: #800080"&gt;18&lt;/span&gt;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p align="left"&gt;&lt;wbr&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 根据上面的代码，可以看出，Substitution控件有一个很重要的属性：MethodName。该属性就是设置当前Substitution控件执行时所调用的方法名，不过此方法相当特殊，有三个条件必须满足（代码中注释写了的）：&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 1、此方法必须为静态的方法（private、protected、public 均可）&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 2、此方法必须接受 HttpContext 类型的参数&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 3、此方法必须返回 string 类型的值&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 在页面请求时，Substitution控件会自动执行MethodName所指定的后台方法，而其返回值则直接显示在页面上。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lavenderzh/aggbug/2235797.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235797.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235791.html</id><title type="text">asp.net中的缓存（一）页面输出缓存</title><summary type="text">页面输出缓存本缓存机制是.NET环境中比较简单的缓存机制，其作用是将整个aspx页面的内容保存在服务器的内存中。这样，用户在访问该页面的时候，直接从服务器内存中调用，而不用和数据库进行交互，除非缓存数据过期，才重新从数据库取一次数据。这样的环境比较适合于一些经常不用变动的数据页面。 使用方法非常简单，在aspx页面顶部添加如下声明。&lt;%@OutputCacheDuration="60"VaryByParam="none"%&gt; 对于上面的声明，解释一下参数的意思： Duration：缓存过期时间（单位：秒）。上述声明表示本页面在每60秒过期一次</summary><published>2011-11-04T02:57:00Z</published><updated>2011-11-04T02:57:00Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235791.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235791.html"/><content type="html">&lt;p align="left"&gt;&lt;strong&gt;&lt;a href="http://blog.sina.com.cn/u/1286320447"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/a&gt;&lt;a href="http://blog.sina.com.cn/u/1286320447"&gt;页面输出缓存&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;本缓存机制是.NET环境中比较简单的缓存机制，其作用是将整个aspx页面的内容保存在服务器的内存中。这样，用户在访问该页面的时候，直接从服务器内存中调用，而不用和数据库进行交互，除非缓存数据过期，才重新从数据库取一次数据。这样的环境比较适合于一些经常不用变动的数据页面。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 使用方法非常简单，在aspx页面顶部添加如下声明。&lt;/p&gt;&lt;p align="left"&gt;&amp;lt;%@&amp;nbsp;&lt;wbr&gt;OutputCache&amp;nbsp;&lt;wbr&gt;Duration="60"&amp;nbsp;&lt;wbr&gt;VaryByParam="none"&amp;nbsp;&lt;wbr&gt;%&amp;gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 对于上面的声明，解释一下参数的意思：&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; Duration：缓存过期时间（单位：秒）。上述声明表示本页面在每60秒过期一次（即：在60秒时间内，该页面是读取的服务器缓存里面的数据，并没有直接从数据库获取数据），这个参数是必填的！&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; VaryByParam：根据POST（或GET）过来的参数来更新缓存内容，如果需要多个参数，用分号隔开。如果不想要任何参数来修改缓存内容，则将其值设置为：none；如果希望所有的参数都能修改缓存内容，则将其值设置为：*。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 范例如下：&lt;/p&gt;&lt;p align="left"&gt;测试页面缓存 - 前台代码&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;1&amp;nbsp;&lt;span style="background-color: #ffff00; color: #000000"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;@&amp;nbsp;Page&amp;nbsp;Language&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;C#&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;&amp;nbsp;CodeBehind&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;Default.aspx.cs&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;Inherits&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;TestWebCache.Default&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: #ffff00; color: #000000"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;2&amp;nbsp;&lt;span style="background-color: #ffff00; color: #000000"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;@&amp;nbsp;OutputCache&amp;nbsp;Duration&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;60&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;VaryByParam&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;=&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;none&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #800000"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="background-color: #ffff00; color: #000000"&gt;%&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;3&amp;nbsp;&lt;br /&gt;&amp;nbsp;4&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;DOCTYPE&amp;nbsp;html&amp;nbsp;PUBLIC&amp;nbsp;"-//W3C//DTD&amp;nbsp;XHTML&amp;nbsp;1.0&amp;nbsp;Transitional//EN"&amp;nbsp;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;5&amp;nbsp;&lt;br /&gt;&amp;nbsp;6&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;html&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;7&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;head&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;测试页面缓存&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;title&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;9&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;head&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;10&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;form&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="form1"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;asp:Literal&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Literal1"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;runat&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="server"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;form&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;14&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;15&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;html&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;1&amp;nbsp;protected&amp;nbsp;void&amp;nbsp;Page_Load(object&amp;nbsp;sender,&amp;nbsp;EventArgs&amp;nbsp;e)&lt;br /&gt;2&amp;nbsp;{&lt;br /&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;(!IsPostBack)&lt;br /&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Literal1.Text&amp;nbsp;=&amp;nbsp;DateTime.Now.ToString();&lt;br /&gt;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;7&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p align="left"&gt;&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 如果想根据Url里面的某一个参数进行缓存的更新，则可以在&amp;#8220;VaryByParam&amp;#8221;的等号后面添加该参数的名称，例如，普通情况下，在访问本页面的时候，我们可以输入Url为：&lt;a href="http://localhost:17112/Default.aspx"&gt;http://localhost:17112/Default.aspx&lt;/a&gt;，即使是带有参数的情况下访问该页面，例如：&lt;a href="http://localhost:17112/Default.aspx?a=1"&gt;http://localhost:17112/Default.aspx?a=1&lt;/a&gt;，也不会对页面的内容有任何的影响，因为在页面顶部声明缓存的时候，我将&amp;#8220;VaryByParam&amp;#8221;后面的值填的&amp;#8220;none&amp;#8221;，如果将此值改为上面第二个Url中的参数&amp;#8220;a&amp;#8221;，则本页面会因为参数&amp;#8220;a&amp;#8221;的改变而改变页面内容，当&amp;#8220;a&amp;#8221;在赋相同的值的时候，页面没有变化，如果在页面过期时间（即：60秒）内，改变参数&amp;#8220;a&amp;#8221;的值，页面的内容也会产生相应的变化。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 如果需要的是多个参数，例如：&lt;a href="http://localhost:17112/Default.aspx?a=1&amp;amp;b=2&amp;amp;c=3"&gt;http://localhost:17112/Default.aspx?a=1&amp;amp;b=2&amp;amp;c=3&lt;/a&gt;，那么，在声明页面缓存的时候，应该将&amp;#8220;VaryByParam&amp;#8221;的值赋为：a;b;c，即：VaryByParam="a;b;c"。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; OutputCache 指令中的其它属性参数描述如下：&lt;/p&gt;&lt;p align="left"&gt;OutputCache 其它属性&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;1&amp;nbsp;&lt;wbr&gt;&amp;lt;%@&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;2&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;OutputCache&amp;nbsp;&lt;wbr&gt;Duration="#ofseconds"&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;3&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;Location="Any&amp;nbsp;&lt;wbr&gt;|&amp;nbsp;&lt;wbr&gt;Client&amp;nbsp;&lt;wbr&gt;|&amp;nbsp;&lt;wbr&gt;Downstream&amp;nbsp;&lt;wbr&gt;|&amp;nbsp;&lt;wbr&gt;Server&amp;nbsp;&lt;wbr&gt;|&amp;nbsp;&lt;wbr&gt;None&amp;nbsp;&lt;wbr&gt;|&amp;nbsp;&lt;wbr&gt;ServerAndClient"&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;4&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;Shared="True&amp;nbsp;&lt;wbr&gt;|&amp;nbsp;&lt;wbr&gt;False"&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;5&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;VaryByControl="controlname"&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;6&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;VaryByCustom="browser&amp;nbsp;&lt;wbr&gt;|&amp;nbsp;&lt;wbr&gt;customstring"&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;7&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;VaryByHeader="headers"&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;8&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;VaryByParam="parametername"&amp;nbsp;&lt;wbr&gt;&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;9&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;CacheProfile="cache&amp;nbsp;&lt;wbr&gt;profile&amp;nbsp;&lt;wbr&gt;name&amp;nbsp;&lt;wbr&gt;|&amp;nbsp;&lt;wbr&gt;''"&lt;br /&gt;10&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;NoStore="true&amp;nbsp;&lt;wbr&gt;|&amp;nbsp;&lt;wbr&gt;false"&lt;br /&gt;11&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;SqlDependency="database/table&amp;nbsp;&lt;wbr&gt;name&amp;nbsp;&lt;wbr&gt;pair&amp;nbsp;&lt;wbr&gt;|&amp;nbsp;&lt;wbr&gt;CommandNotification"&lt;br /&gt;12&amp;nbsp;&lt;wbr&gt;%&amp;gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 当然，如果很多页面都添加了页面缓存，而且它们的缓存时间又都设置得是一样的，这个时候，我们就可以利用web.config来统一配置这些缓存的过期时间，这样可以达到一处改动，在多处都能起到相应的作用，配置的范例如下：&lt;/p&gt;&lt;p align="left"&gt;web.config的配置&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;1&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;system.web&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;caching&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheSettings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheProfiles&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;add&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="CacheConfig"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;duration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="60"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheProfiles&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;outputCacheSettings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;8&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;caching&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;9&amp;nbsp;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;system.web&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p align="left"&gt;&lt;br /&gt;&amp;nbsp;&lt;wbr&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 这样一来，我们在页面顶部就可以添加如下所示的页面缓存声明方式就可以了：&lt;/p&gt;&lt;p align="left"&gt;1&amp;nbsp;&lt;wbr&gt;&amp;lt;%@&amp;nbsp;&lt;wbr&gt;OutputCache&amp;nbsp;&lt;wbr&gt;CacheProfile="CacheConfig"&amp;nbsp;&lt;wbr&gt;VaryByParam="none"&amp;nbsp;&lt;wbr&gt;%&amp;gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 但是需要注意几点：&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 1、如果在页面中的用户控件内声明OutputCache，是不支持CacheProfile属性的。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 2、所添加的CacheProfile必须在web.config中存在。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 还可以通过页面中的控件的变化，来修改页面缓存，声明如下所示（假设页面上存在一个ID为DropDownList1的下拉菜单）：&lt;/p&gt;&lt;p align="left"&gt;1&amp;nbsp;&lt;wbr&gt;&amp;lt;%@&amp;nbsp;&lt;wbr&gt;OutputCache&amp;nbsp;&lt;wbr&gt;Duration="60"&amp;nbsp;&lt;wbr&gt;VaryByParam="none"&amp;nbsp;&lt;wbr&gt;VaryByControl="DropDownList1"&amp;nbsp;&lt;wbr&gt;%&amp;gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; 上面说了这么多，全都是在前台页面上来设置页面缓存，.NET还提供了通过后台代码来实现页面缓存。页面输出缓存API的缓存策略就是用Response的Cache属性，该方式的核心是调用System.Web.HttpCachePolicy。该类主要包含了用户设置缓存特定的HTTP标头的方法和用于控制ASP.NET页面输出缓存的方法。下面说几个常用的方法：&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; &lt;strong&gt;SetExpires&lt;/strong&gt; 用于设置缓存过期的绝对时间。它的参数是一个DataTime类的实例，表示过期的绝对时间。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; &lt;strong&gt;SetLastModified&lt;/strong&gt; 用于设置页面的Last-Modified HTTP标头。Last-Modified HTTP标头表示页面上次修改时间，缓存将依靠它来进行计时。如果违反了缓存限制层次结构，此方法将失败。该方法的参数是一个DataTime类的实例。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; &lt;strong&gt;SetSlidingExpiration&lt;/strong&gt; 该方法将缓存过期从绝对时间设置为可调时间。其参数是一个布尔值。当参数为true时，Cache-Control HTTP标头将随每个响应而更新。此过期模式与相对于当前时间将过期标头添加到所有输出集的IIS配置选项相同。当参数为False时，将保留该设置，且任何启用可调整过期的尝试都将静态失败。此方法不直接映射到HTTP标头。它由后续模块或辅助请求来设置源服务器缓存策略。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; &lt;strong&gt;SetOmitVaryStar&lt;/strong&gt; ASP.NET 2.0新增的方法。用于指定在按参数进行区分时，响应是否应该包含vary:*标头。方法参数是一个布尔值，若要指示HttpCachePolicy不对其VaryByHeaders属性使用*值，则为true；否则为false。&lt;/p&gt;&lt;p align="left"&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt;&amp;nbsp;&lt;wbr&gt; &lt;strong&gt;SetCacheability&lt;/strong&gt; 用于设置页面的Cache-Control HTTP标头。该标头用于控制在网络上缓存文档的方式。该方法有两种重载方式，所不同的是参数。一种重载方法的参数是HttpCacheability枚举值，包括NoCache、Private、Public、Server、ServerAndNoCache和ServerAndPrivate（有关这些枚举值的定义，可参考MSDN）。另一种方法的参数有两个，一个参数是HttpCacheability枚举值，另一个参数是字符串，表示添加到标头的缓存控制扩展。需要注意的是，仅当与Private或NoCache指令一起使用时，字段扩展名才有效。如果组合不兼容的指令和扩展，则此方法将引发无效参数异常。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lavenderzh/aggbug/2235791.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/archive/2011/11/04/2235791.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lavenderzh/archive/2011/10/19/2217955.html</id><title type="text">ASP.NET Web应用程序和ASP.NET网站的区别</title><summary type="text">WebApplication编程模型的优点：●网站编译速度快，使用了增量编译模式，仅仅只有文件被修改后，这部分才会被增量编译进去。●生成的程序集WebSite：生成随机的程序集名，需要通过插件WebDeployment才可以生成单一程序集WebApplication：可以指定网站项目生成单一程序集，因为是独立的程序集，所以和其他项目一样可以指定应用程序集的名字、版本、输出位置等信息●可以将网站拆分成多个项目以方便管理●可以从项目中和源代码管理中排除一个文件●方便的支持VSTS的Team Build方便每日构建●更强大的代码检查功能，并且检查策略受源代码控制●可以对编译前后进行自己规定的处理We</summary><published>2011-10-19T10:22:00Z</published><updated>2011-10-19T10:22:00Z</updated><author><name>Lavenders</name><uri>http://www.cnblogs.com/lavenderzh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lavenderzh/archive/2011/10/19/2217955.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lavenderzh/archive/2011/10/19/2217955.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&lt;div&gt;&lt;p&gt;&lt;strong&gt;WebApplication&lt;/strong&gt;&lt;strong&gt;编程模型的优点&lt;/strong&gt;：&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;网站编译速度快，使用了增量编译模式，仅仅只有文件被修改后，这部分才会被增量编译进去。&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;生成的程序集&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WebSite：生成随机的程序集名，需要通过插件WebDeployment才可以生成单一程序集&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WebApplication：可以指定网站项目生成单一程序集，因为是独立的程序集，所以和其他项目一样可以指定应用程序集的名字、版本、输出位置等信息&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;可以将网站拆分成多个项目以方便管理&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;可以从项目中和源代码管理中排除一个文件&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;方便的支持VSTS的Team Build方便每日构建&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;更强大的代码检查功能，并且检查策略受源代码控制&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;可以对编译前后进行自己规定的处理&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;WebSite&lt;/strong&gt;&lt;strong&gt;编程模型的优点&lt;/strong&gt;：&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;动态编译该页面，马上可以看到效果，不用编译整个站点（主要优势）&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;同上，可以使错误的部分和使用的部分不相干扰（可以要求只有编译通过才能签入）&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;可以每个页面生成一个程序集（一般不会采用这种方式）&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;可以把一个目录当做一个Web应用来处理，直接复制文件就可以发布，不需要项目文件（适合小站点）&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;&amp;#9679;可以把页面也编译到程序集中（应该用不到，而且WebApplication也可以通过WebDeployment插件来实现）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;strong&gt;还有一些不同和相同的地方：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;都是设计网页的。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;都可以添加ASP.Net文件夹&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;web应用程序Default.aspx显示有两个原有文件及Default.aspx.cs和Default.aspx.designer.cs；Web网站Default.aspx显示&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;有一个原有文件Default.aspx.cs。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;web应用程序有重新生成和发布两项；Web网站只有一个发布网站。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;web应用程序和一般的winform没有什么区别都有引用的是命名空间等；&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;Web网站在引用后出现一个bin文件夹那里存放dll和pdb文件。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;web应用程序可以作为类库被引用；Web网站则不可以作为类库被引用。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;web应用程序可以添加ASP.Net文件夹中不包括bin、App_Code；Web网站可以添加ASP.Net文件夹包括bin、App_Code。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;web应用程序还可添加组件和类；Web网站则没有。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;源文件虽然都是Default.aspx.cs但是web应用程序有命名空间，多了一项System.Collections空间引用。&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Web应用程序在修改了页面底层的代码之后需要重新进行编译，&amp;nbsp;而网站不需要重新编译&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;网站可以添加APS文件夹，Web应用程序不可以&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Web应用程序的项目会生成Dll文件&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;网站在发布的时候，会自动生成Dll文件，但是每次的Dll文件名都不一样&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Web应用程序会有解决方案和项目文件&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;最表面的区别就是你部署的时候 方式不同&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;应用程序你只需要页面和bin文件夹里面的dll文件&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;网站你则还需要把页面的后台文件一起部署&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="white-space: pre"&gt;&lt;/span&gt;相对而言，大网站比较适合Web Application项目，小网站比较适合Web Site项目。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;script type="text/javascript"&gt;if ($ != jQuery) {$ = jQuery.noConflict();}var isLogined = false;var cb_blogId = 46854;var cb_entryId = 2126750;var cb_blogApp = "lonelyxmas";var cb_blogUserGuid = "cdfd460b-63cf-dd11-9e4d-001cf0cd104b";var cb_entryCreatedDate = '2011/8/3 22:55:00';&lt;/script&gt;&lt;img src="http://www.cnblogs.com/lavenderzh/aggbug/2217955.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lavenderzh/archive/2011/10/19/2217955.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
