<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-happy everyday   </title><link>http://www.cnblogs.com/smallfa/</link><description>可以平凡 不可以平庸 
无爱则无忧，无欲则无求，无怒而无敌，无怨才是佛。所有烦恼，都是放不下的执著
</description><language>zh-cn</language><lastBuildDate>Fri, 25 Jul 2008 22:15:44 GMT</lastBuildDate><pubDate>Fri, 25 Jul 2008 22:15:44 GMT</pubDate><ttl>60</ttl><item><title>试安装SQL Server 2008 CTP</title><link>http://www.cnblogs.com/smallfa/archive/2008/06/01/1211508.html</link><dc:creator>henry_2008</dc:creator><author>henry_2008</author><pubDate>Sun, 01 Jun 2008 01:44:00 GMT</pubDate><guid>http://www.cnblogs.com/smallfa/archive/2008/06/01/1211508.html</guid><description><![CDATA[<h2>
</h2>
<div class="postbody">
<p>1. SQL Server 2008 CTP CD封面<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/1.png" border="0" height="480" width="640" /><br />
<br />
2.接受安装许可协议<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/2.png" border="0" height="600" width="800" /><br />
<br />
3.SQL Server安装中心(选择第一项进行安装)<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/3.png" border="0" height="536" width="800" /><br />
<br />
4.系统配置检查<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/4.png" border="0" height="600" width="800" /><br />
<br />
5.特性选择<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/5.png" border="0" height="600" width="800" /><br />
<br />
6.实例配置<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/6.png" border="0" height="600" width="800" /><br />
<br />
7.服务器配置<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/7.png" border="0" height="600" width="800" /><br />
<br />
8.服务的系统帐户配置<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/8.png" border="0" height="600" width="800" /><br />
<br />
9.数据库引擎配置<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/9.png" border="0" /><br />
<br />
10.数据库引擎配置（选择默认登陆帐户）<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/10.png" border="0" height="600" width="800" /><br />
<br />
11.分析服务配置安全帐户<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/11.png" border="0" /><br />
<br />
12.报表服务配置<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/12.png" border="0" height="600" width="800" /><br />
<br />
13.错误和使用报告配置选项<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/13.png" border="0" height="600" width="800" /><br />
<br />
14.安装组件一览表<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/14.png" border="0" height="600" width="800" /><br />
<br />
15.安装过程<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/15.png" border="0" height="600" width="800" /><br />
<br />
16.安装总结<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/16.png" border="0" height="600" width="800" /><br />
<br />
17.SQL Server 2008 (Code Name "Katmai") Management Studio <br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/17.png" border="0" height="672" width="992" /><br />
<br />
18.登录SQL Server 2008数据库实例<br />
<img alt="" src="http://www.cnblogs.com/images/cnblogs_com/ricktsuei/18.png" border="0" /></p>
</div>
<div class="postfoot"><br />
<a href="http://www.cnblogs.com/RickTsuei/category/137208.html"></a></div>
<img src ="http://www.cnblogs.com/smallfa/aggbug/1211508.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41307/" target="_blank">[新闻]金山:360的免费杀毒只能是短期行为</a>]]></description></item><item><title>用在JavaScript的RequestHelper</title><link>http://www.cnblogs.com/smallfa/archive/2008/05/31/1211428.html</link><dc:creator>henry_2008</dc:creator><author>henry_2008</author><pubDate>Sat, 31 May 2008 15:39:00 GMT</pubDate><guid>http://www.cnblogs.com/smallfa/archive/2008/05/31/1211428.html</guid><description><![CDATA[<h2>
<a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/robot/archive/2008/05/31/1211225.html">用在JavaScript的RequestHelper</a>
</h2>
<div style="font-size: 14px; line-height: 180%;"><font face="Verdana">　　碰到一个小小的需求,就是要根据传入的锚(也就是url中#后面的东西啦)来显示不同的内容,记得以前写了的,不知道被我丢到哪去了,又要重新写一个,顺便把功能整理加强了一些,加入了取QueryString和Cookie的东西,老习惯,贴代码.<br />
</font><font face="Verdana">RequestHelper.js<br />
//功能&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp; 在javascript中提供QueryString/Cookie/Anchor的访问.<br />
/*使用&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp; <br />
var Request = new RequestHelper();<br />
var s = Request.QueryString["id"];&nbsp; //取得url中的id参数.<br />
var c = Request.Cookies["name"];&nbsp;&nbsp;&nbsp; //取得id为name的cookie值.<br />
var a = Request.Anchor;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //取得url中定位的锚点名称.<br />
*/<br />
//更新&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp; 2008-05-31<br />
RequestHelper.prototype.GetParams = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; var result = {};<br />
&nbsp;&nbsp;&nbsp; var loc = document.location.toString();<br />
&nbsp;&nbsp;&nbsp; if(loc.indexOf("?") &gt; -1)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var l = loc.lastIndexOf("#") &gt; -1 ? loc.lastIndexOf("#") : loc.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var param_str = loc.substring(loc.indexOf("?")+1, l);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var params = param_str.split("&amp;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var x = 0; x &lt; params.length; x++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; params[x] = params[x].split("=");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result[params[x][0]] = params[x][1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return result;<br />
}</font></div>
<div>
<p><font face="Verdana">RequestHelper.prototype.GetCookies = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; var result = {};<br />
&nbsp;&nbsp;&nbsp; var cookie = document.cookie;<br />
&nbsp;&nbsp;&nbsp; if(cookie.length &gt; 0)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var reg = /(^[a-zA-z0-9]+?|; [a-zA-z0-9]+?)=/g;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var c = cookie.match(reg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(c)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var n = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var x = 0; x &lt; c.length; x++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = (x &lt; c.length - 1) ? cookie.indexOf(c[x + 1].toString()) : cookie.length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var s = cookie.substring(cookie.indexOf(c[x].toString()),n);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = s.split("=");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s[0] = s[0].replace(/^; / , "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result[s[0]] = s[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return result;<br />
}</font></p>
<p><font face="Verdana">RequestHelper.prototype.GetAnchor = function()<br />
{<br />
&nbsp;&nbsp;&nbsp; var Anchor;<br />
&nbsp;&nbsp;&nbsp; var loc = document.location.toString()<br />
&nbsp;&nbsp;&nbsp; if(loc.lastIndexOf("#") &gt; -1)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Anchor = loc.substring(loc.lastIndexOf("#")+1);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; return Anchor;<br />
}</font></p>
<p><font face="Verdana">function RequestHelper()<br />
{<br />
&nbsp;&nbsp;&nbsp; this.QueryString = this.GetParams();<br />
&nbsp;&nbsp;&nbsp; this.Cookies = this.GetCookies();<br />
&nbsp;&nbsp;&nbsp; this.Anchor = this.GetAnchor();<br />
}</font></p>
<p style="font-size: 14px; line-height: 180%;">&nbsp;　　经初步测试,没发现问题,但不保证没有任何bug,有用得上的,请随便复制粘贴,有更好的方法的,请各位多多指点,我只是小菜一个,大家就砖下留情了.<br />
另，因cookie的名称不支持某些特殊符号，所以这里只取了数字和字母，大家注意了，如果有其它的办法，麻烦指点指点。呵呵！</p>
</div>
<img src ="http://www.cnblogs.com/smallfa/aggbug/1211428.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41306/" target="_blank">[新闻]江民科技回应杀毒软件免费说 没病不能乱吃药</a>]]></description></item><item><title>自己编的一个精致的Ajax框架 </title><link>http://www.cnblogs.com/smallfa/archive/2008/05/25/1206748.html</link><dc:creator>henry_2008</dc:creator><author>henry_2008</author><pubDate>Sat, 24 May 2008 17:13:00 GMT</pubDate><guid>http://www.cnblogs.com/smallfa/archive/2008/05/25/1206748.html</guid><description><![CDATA[Posted on 2008-05-24 16:06 <a href="http://yidon.cnblogs.com/">Yidon</a> 阅读(56) <a href="http://www.cnblogs.com/yidon/archive/2008/05/24/1206451.html#Post">评论(0)</a> &nbsp;<a href="http://www.cnblogs.com/yidon/admin/EditPosts.aspx?postid=1206451">编辑</a> <a href="http://www.cnblogs.com/yidon/AddToFavorite.aspx?id=1206451">收藏</a> <img height="1" src="http://www.cnblogs.com/yidon/aggbug/1206451.html?type=1&amp;webview=1" width="1"  alt="" /> <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description rdf:about="http://www.cnblogs.com/yidon/archive/2008/05/24/1206451.html" dc:identifier="http://www.cnblogs.com/yidon/archive/2008/05/24/1206451.html" dc:title="自己编的一个精致的Ajax框架" trackback:ping="http://www.cnblogs.com/yidon/services/trackbacks/1206451.aspx"  />
</rdf:RDF>
-->
<div class="postbody">
<p><font face="Verdana"><span style="color: #333399"><font face="Verdana">&nbsp;<font face="Verdana">&nbsp; 不知道大家都是怎么使用Ajax技术的，现在Ajax框架类也不少。我都喜欢自己设计和编写代码，所以现成的Ajax框架我用的并不多，这类框架我就用过jQuery，我相信用过的人都知道它的强大，的确是一个非常好用的js类库，但是对它我总是觉得能少用就少用，能不用就不用，毕竟它功能太多了，体积自然就不小，而且我们常用到的功能可能都占不到它的十分之一，如果你像我一样，用jQuery只是为了使用它的Ajax框架的话，那么我建议你还是像我一样编个自己的框架吧。下面就是我编写的Ajax框架，代码不多，但我觉得对Ajax来说已经足够了，我做网站就差不多都用它。</font></font></span><span style="color: red"><font style="color: #339966; background-color: #cce8cf" face="Verdana"><br />
</font></span></font></p>
<p><font face="Verdana"><span style="color: red"><font style="color: #ff6600" face="Verdana">以下就是基本代码，具体用法和更多解析请到我的U-Live 博客（<font face="Verdana"><a href="http://blog.u-live.cn/blog-21.aspx">http://blog.u-live.cn/blog-21.aspx</a>）</font>去查看，谢谢！</p>
</font></span></font>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_24_26_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_24_26_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_24_26_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_24_26_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_24_26_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_24_26_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_24_26_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_24_26_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;&nbsp;ajax&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="Codehighlighter1_24_26_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_24_26_Open_Text"><span style="color: #000000">{}</span></span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img id="Codehighlighter1_64_579_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_64_579_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_64_579_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_64_579_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_64_579_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_64_579_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_64_579_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_64_579_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />ajax.CreateXMLHttp&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">()&nbsp;&nbsp;</span><span id="Codehighlighter1_64_579_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_64_579_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_95_141_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_95_141_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_95_141_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_95_141_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_95_141_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_95_141_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_95_141_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_95_141_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(window.XMLHttpRequest)</span><span id="Codehighlighter1_95_141_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_95_141_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;&nbsp;XMLHttpRequest();<br />
<img id="Codehighlighter1_173_577_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_173_577_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_173_577_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_173_577_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_173_577_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_173_577_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_173_577_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_173_577_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(window.ActiveXObject)</span><span id="Codehighlighter1_173_577_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_173_577_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_190_240_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_190_240_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_190_240_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_190_240_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_190_240_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_190_240_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_190_240_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_190_240_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span id="Codehighlighter1_190_240_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_190_240_Open_Text"><span style="color: #000000">{</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;&nbsp;ActiveXObject(</span><span style="color: #000000">"</span><span style="color: #000000">Microsoft.XMLHTTP</span><span style="color: #000000">"</span><span style="color: #000000">);}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_261_571_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_261_571_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_261_571_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_261_571_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_261_571_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_261_571_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_261_571_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_261_571_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">(e)</span><span id="Codehighlighter1_261_571_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_261_571_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_286_333_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_286_333_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_286_333_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_286_333_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_286_333_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_286_333_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_286_333_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_286_333_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span id="Codehighlighter1_286_333_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_286_333_Open_Text"><span style="color: #000000">{</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;&nbsp;ActiveXObject(</span><span style="color: #000000">"</span><span style="color: #000000">Msxml2.XMLHTTP</span><span style="color: #000000">"</span><span style="color: #000000">);}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_362_557_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_362_557_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_362_557_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_362_557_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_362_557_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_362_557_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_362_557_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_362_557_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">(e)</span><span id="Codehighlighter1_362_557_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_362_557_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alart(</span><span style="color: #000000">"</span><span style="color: #000000">XMLHttp&nbsp;&nbsp;object&nbsp;&nbsp;could&nbsp;&nbsp;not&nbsp;&nbsp;be&nbsp;&nbsp;created.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">throw</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;&nbsp;Error(</span><span style="color: #000000">"</span><span style="color: #000000">XMLHttp&nbsp;&nbsp;object&nbsp;&nbsp;could&nbsp;&nbsp;not&nbsp;&nbsp;be&nbsp;&nbsp;created.</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />ajax.Request&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(url,func,isxml,ispost,parameters)<br />
<img id="Codehighlighter1_641_1426_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_641_1426_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_641_1426_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_641_1426_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_641_1426_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_641_1426_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_641_1426_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_641_1426_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_641_1426_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_641_1426_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">var</span><span style="color: #000000">&nbsp;&nbsp;xhr</span><span style="color: #000000">=</span><span style="color: #0000ff">this</span><span style="color: #000000">.CreateXMLHttp();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(IsUndefined(ispost))&nbsp;&nbsp;ispost</span><span style="color: #000000">=</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ispost)<br />
<img id="Codehighlighter1_739_872_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_739_872_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_739_872_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_739_872_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_739_872_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_739_872_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_739_872_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_739_872_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_739_872_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_739_872_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xhr.open(</span><span style="color: #000000">"</span><span style="color: #000000">POST</span><span style="color: #000000">"</span><span style="color: #000000">,url,</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xhr.setRequestHeader(</span><span style="color: #000000">"</span><span style="color: #000000">Content-Type</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">application/x-www-form-urlencoded;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xhr.open(</span><span style="color: #000000">"</span><span style="color: #000000">GET</span><span style="color: #000000">"</span><span style="color: #000000">,url,</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img id="Codehighlighter1_932_1244_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_932_1244_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_932_1244_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_932_1244_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_932_1244_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_932_1244_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_932_1244_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_932_1244_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(func)</span><span id="Codehighlighter1_932_1244_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_932_1244_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_975_1238_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_975_1238_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_975_1238_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_975_1238_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_975_1238_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_975_1238_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_975_1238_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_975_1238_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xhr.onreadystatechange</span><span style="color: #000000">=</span><span style="color: #0000ff">function</span><span style="color: #000000">()</span><span id="Codehighlighter1_975_1238_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_975_1238_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_1014_1228_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1014_1228_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1014_1228_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1014_1228_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1014_1228_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1014_1228_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1014_1228_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1014_1228_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(xhr.readyState&nbsp;&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">4</span><span style="color: #000000">)</span><span id="Codehighlighter1_1014_1228_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1014_1228_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(httpSuccess(xhr))<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;func(isxml</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">xhr.responseXML</span><span style="color: #000000">?</span><span style="color: #000000">xhr.responseXML:xhr.responseText)<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000">"</span><span style="color: #000000">请求页面发生错误</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;xhr.setRequestHeader(</span><span style="color: #000000">"</span><span style="color: #000000">X-Requested-With</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">XMLHttpRequest</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">IsUndefined(parameters))<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xhr.send(parameters);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xhr.send(</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1427_1441_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1427_1441_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1427_1441_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1427_1441_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1427_1441_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1427_1441_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1427_1441_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1427_1441_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_1427_1441_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_1427_1441_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">用Get方式提交数据</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />ajax.Get&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(url,func)<br />
<img id="Codehighlighter1_1474_1521_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1474_1521_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1474_1521_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1474_1521_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1474_1521_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1474_1521_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1474_1521_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1474_1521_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_1474_1521_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1474_1521_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.Request(url,func,</span><span style="color: #0000ff">false</span><span style="color: #000000">,</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_1522_1537_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1522_1537_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1522_1537_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1522_1537_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1522_1537_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1522_1537_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1522_1537_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1522_1537_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_1522_1537_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_1522_1537_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">用Post方式提交数据</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />ajax.Post&nbsp;&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">function</span><span style="color: #000000">(url,func,parameters)<br />
<img id="Codehighlighter1_1582_1639_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1582_1639_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1582_1639_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1582_1639_Closed_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_1582_1639_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1582_1639_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1582_1639_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1582_1639_Open_Text').style.display='inline';" alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_1582_1639_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_1582_1639_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">.Request(url,func,</span><span style="color: #0000ff">false</span><span style="color: #000000">,</span><span style="color: #0000ff">true</span><span style="color: #000000">,parameters);<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
</span></div>
</div>
<img src ="http://www.cnblogs.com/smallfa/aggbug/1206748.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41305/" target="_blank">[新闻]WCG2008中国区总决赛打响</a>]]></description></item><item><title>一次.NET Web应用程序安装包的制作经历:Sql数据库安装的3种方式 配置IIS及Web.Config文件</title><link>http://www.cnblogs.com/smallfa/archive/2008/05/22/1205164.html</link><dc:creator>henry_2008</dc:creator><author>henry_2008</author><pubDate>Thu, 22 May 2008 12:30:00 GMT</pubDate><guid>http://www.cnblogs.com/smallfa/archive/2008/05/22/1205164.html</guid><description><![CDATA[&nbsp;一次难得的安装包制作经历,因为之前从没有制作过安装包,那就免不了遇到问题,在摸索和学习中获得了不少宝贵经验,在这里我将用图文并茂的形式详细描述一下流程及主要难点问题的解决方法,希望对需要的朋友有所帮助.<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;首先建一个Web应用程序的安装项目<br />
<div align="center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog01.JPG" border="0" height="499" width="690" /></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;建好项目后在该安装项目的文件系统中加入Web应用程序的所有文件,全选后拖到"Web应用程序文件夹"内即可,也可以在"Web应用程序文件夹"点击右键在菜单中选择添加文件<br />
<br />
<div align="center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog02.JPG" border="0" height="192" width="564" /></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果有多个Web应用程序需要放在同一个安装包内安装,可以在"目标计算机上的文件系统"上点右键添加"Web自定义文件夹",如图中的WebControls<br />
<br />
<div align="center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog03.JPG" border="0" height="127" width="512" /></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在Web文件夹的属性里,可以设置一下默认页及虚拟目录名称,其他的属性可以无视,使用默认值就可以了<br />
<br />
<div align="center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog04.JPG" border="0" height="139" width="241" /></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;到此,一个Web应用程序的安装包就基本完成了,直接生成的安装程序就可以将安装到\Inetpub\wwwroot目录下成为一个虚拟站点了,如果你的站点没有数据库的话,基本可以打完收工了^_^<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;之后遇到的第一个问题就是如何安装数据库.在网上找了一些资料,虽然说的比较详细,但都没有图例,习惯了傻瓜教程的我花了不少时间去摸索,下面就图文说明一下<br />
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先设计用户录入SQL数据库信息的界面,这个VS.NET有现成的界面,稍微修改一下即可,非常简单,打开安装包项目的用户界面<br />
<br />
</p>
<div align="center"><img src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog05.JPG" border="0"  alt="" /></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在"启动"项里添加一个"文本框(A)"对话框<br />
</p>
<div align="center"><img src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog06.JPG" border="0"  alt="" /></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;将"文本框(A)"移动到安装流程中合适的位置,设置一下属性,请注意,这里的EditProperty的值是传递用户输入数据的关键字,必填<br />
<br />
<p>
</p>
<div align="center"><img src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog07.JPG" border="0"  alt="" /></div>
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面就进入重点了,这个流程的操作搞了半天才搞明白,在解决方案中再建一个类库项目,名字叫DBInstall,在该项目创建一个继承于System.Configuration.Install.Installer的类<br />
<br />
<div align="center"><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog08.JPG" border="0" height="80" width="523" /></div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;暂时不写代码,将此类库与安装项目关联起来先,在"Web应用程序文件夹"下的任意文件夹里点击右键添加一个"项目输出"<br />
<br />
</div>
<div align="center"><img src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog09.JPG" border="0"  alt="" /></div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;默认会选中当前的DBInstall项目,不用改任何选项直接点确定,会在文件夹中新增一个"主输出来自DBInstall(活动)"的文件项<br />
<br />
</div>
<div align="center"><img src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog10.JPG" border="0"  alt="" /></div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;接下来在项目自定义操作的"安装"项上点右键添加自定义操作,选择刚刚新增"主输出来自DBInstall(活动)"的文件夹,选中确定添加到安装项内<br />
<br />
</div>
<div align="center"><img src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog11.JPG" border="0" height="175" width="408"  alt="" /></div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
添加完毕后设置"主输出来自DBInstall(活动)"的CustomActionData属性的值为
/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3]
/pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"
,通过该格式化字符串接收用户输入传递给安装程序的自定义数据,前4个传入值是"文本框(A)"中相关联的TextBox的值,第5个参数
"TARGETDIR"返回的是Web应用程序安装路径<br />
<br />
</div>
<div align="center"><img src="http://www.cnblogs.com/images/cnblogs_com/moonspell/Blog12.JPG" border="0"  alt="" /></div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在,可以去写安装Sql数据库的代码,在继承于System.Configuration.Install.Installer的InstallDb类中重载Install方法,在该方法内编写安装过程中需要执行的代码<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;先编写个执行SQL语句的方法,后面编写安装数据库的代码时需要用到,传入的参数分别是 connStr - 数据库链接字符串,DatabaseName - 链接的数据库名称,Sql - 待执行的SQL语句<br />
</div>
<div align="center">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<div align="left"><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;ExecuteSql(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;connStr,&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;DatabaseName,&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;Sql)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlConnection&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlConnection(connStr);<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlCommand&nbsp;cmd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlCommand(Sql,&nbsp;conn);<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.Open();<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.ChangeDatabase(DatabaseName);<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">try</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.ExecuteNonQuery();<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">finally</span><span style="color: #000000;">&nbsp;{<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.Close();<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
</div>
</div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在研究过程中,我尝试了3种安装数据库的方法,下面将一一讲解一下<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一种方法是通过附加数据库的方式来实现安装数据库,首先将需要安装的初始化数据库从Sql Server中分离,将该数据库的mdf和ldf文件添加到"Web应用程序文件夹"中,这里是放在DataBase文件夹中的,在Install方法中添加以下代码<br />
<br />
</div>
<div align="center">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<div align="left"><span style="color: #008080;">1</span>&nbsp;<span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;connStr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Format(</span><span style="color: #000000;">"</span><span style="color: #000000;">data&nbsp;source={0};user&nbsp;id={1};password={2};persist&nbsp;security&nbsp;info=false;packet&nbsp;size=4096</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">server</span><span style="color: #000000;">"</span><span style="color: #000000;">],&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">user</span><span style="color: #000000;">"</span><span style="color: #000000;">],&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">pwd</span><span style="color: #000000;">"</span><span style="color: #000000;">]);<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;strSql&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">EXEC&nbsp;sp_attach_db&nbsp;&nbsp;@dbname&nbsp;&nbsp;=&nbsp;&nbsp;N'</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">dbname</span><span style="color: #000000;">"</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">',</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">@filename1&nbsp;&nbsp;=&nbsp;&nbsp;N'</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">targetdir</span><span style="color: #000000;">"</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">DataBase\\DemoData.mdf',</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">@filename2&nbsp;&nbsp;=&nbsp;&nbsp;N'</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">targetdir</span><span style="color: #000000;">"</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">DataBase\\DemoData_log.ldf'</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">ExecuteSql(connStr,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">master</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;strSql);&nbsp;</span></div>
</div>
</div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
可以看到,通过this.Context.Parameters["KeyName"]的方法,可以获取由应用程序传递的自定义数据,获取数据库的相关信
息拼成链接字符串,再拼一个附加数据库的SQL语句,用的是master库中的存储过程sp_attach_db,3个参数分别是数据库的名称,及mdf
和ldf完整路径,因此要拼完整具体目录并加上文件名,这样,执行一下这个Sql语句即能将数据库附加到Sql
Server,但是这样做有个问题,卸载安装时安装程序会删除mdf和ldf文件,如果数据库在使用中,则卸载出错,如果数据库未使用,则被删除,后果严
重,因此,只能用脚本去安装数据库<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第二种方法是从网上看来的,在进程中通过osql.exe去执行SQL脚本文件安装数据库<br />
<br />
</div>
<div align="center">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<div align="left"><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">System.Diagnostics.Process&nbsp;sqlProcess&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;System.Diagnostics.Process();<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">sqlProcess.StartInfo.FileName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">osql.exe</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">sqlProcess.StartInfo.Arguments&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Format(</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;-U&nbsp;{0}&nbsp;-P&nbsp;{1}&nbsp;-d&nbsp;{2}&nbsp;-i&nbsp;{3}/db.sql</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">user</span><span style="color: #000000;">"</span><span style="color: #000000;">],&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">pwd</span><span style="color: #000000;">"</span><span style="color: #000000;">],&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">dbname</span><span style="color: #000000;">"</span><span style="color: #000000;">],&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">targetdir</span><span style="color: #000000;">"</span><span style="color: #000000;">]);<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">sqlProcess.StartInfo.WindowStyle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;System.Diagnostics.ProcessWindowStyle.Hidden;<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">sqlProcess.Start();<br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">sqlProcess.WaitForExit();&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">等待执行</span></div>
</div>
</div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
此种方法需要开一个进程,性能比较高,并且将进程的WindowStyle设置为Hidden,用户就看不到执行时的Dos窗体了,最后,一定要加上等待
执行完成的WaitForExit方法,否则,数据库还未安装完成时安装程序很可能就已经完成安装提示用户可以退出了<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第三种方法是直接用先前所写的ExecuteSql方法执行安装脚本中的Sql语句<br />
<br />
</div>
<div align="center">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<div align="left"><span style="color: #008080;">1</span>&nbsp;<span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;connStr&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Format(</span><span style="color: #000000;">"</span><span style="color: #000000;">data&nbsp;source={0};user&nbsp;id={1};password={2};persist&nbsp;security&nbsp;info=false;packet&nbsp;size=4096</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">server</span><span style="color: #000000;">"</span><span style="color: #000000;">],&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">user</span><span style="color: #000000;">"</span><span style="color: #000000;">],&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">pwd</span><span style="color: #000000;">"</span><span style="color: #000000;">]);<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">ExecuteSql(connStr,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">master</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">CREATE&nbsp;DATABASE&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">dbname</span><span style="color: #000000;">"</span><span style="color: #000000;">]);<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">StringBuilder&nbsp;sb&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.GetSqlFile(</span><span style="color: #000000;">"</span><span style="color: #000000;">Demo.sql</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">ExecuteSql(connStr,&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">dbname</span><span style="color: #000000;">"</span><span style="color: #000000;">],&nbsp;sb.ToString());<br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">sb&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.GetSqlFile(</span><span style="color: #000000;">"</span><span style="color: #000000;">Demo_Data.sql</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">8</span>&nbsp;<span style="color: #000000;">ExecuteSql(connStr,&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">dbname</span><span style="color: #000000;">"</span><span style="color: #000000;">],&nbsp;sb.ToString());</span></div>
</div>
</div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过GetSqlFile方法获得脚本中的Sql,这里用了两个脚本文件,一个是创建数据库的,一个是创建默认数据的,两个脚本文件是可以合并成一个文件的,执行一次即可<br />
<br />
</div>
<div align="left">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><span style="color: #008080;">1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;获取Sql文件里的脚本</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;StringBuilder&nbsp;GetSqlFile(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;pFileName)&nbsp;{<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sqlTemp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;StringBuilder();<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlTemp.Append(File.ReadAllText(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.Context.Parameters[</span><span style="color: #000000;">"</span><span style="color: #000000;">targetdir</span><span style="color: #000000;">"</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">DataBase\\</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;pFileName,&nbsp;System.Text.Encoding.GetEncoding(</span><span style="color: #000000;">"</span><span style="color: #000000;">GB2312</span><span style="color: #000000;">"</span><span style="color: #000000;">)));<br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;sqlTemp;<br />
</span><span style="color: #008080;">8</span>&nbsp;<span style="color: #000000;">}</span></div>
</div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
需要提醒的是,创建数据库的脚本文件中,需要将"GO","SET ANSI_NULLS ON","SET QUOTED_IDENTIFIER
ON"去掉,否则通过SqlCommand执行会出错,另外,如果默认数据的Insert脚本中包含中文,读取Sql语句时要加上
System.Text.Encoding.GetEncoding(<span style="color: #000000;">"</span><span style="color: #000000;">GB2312</span><span style="color: #000000;">"</span><span style="color: #000000;">)这个参数,否则中文变乱码,默认数据的Insert脚本可以在网上找到导出所有数据Insert语句的存储过程<br />
</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3种安装数据库的方法中后两种比较实用,第一种方法虽然方便快捷,但是卸载时万一将数据库也误卸载,那就损失惨重了<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
接下来说两个小问题,安装好了肯定要配置Web.Config中的数据库链接字符串,网上有现成的修改App.Config和Web.Config的方
法,和安装数据库时的方法一样,拼好数据库链接字符串,调用修改Web.Config的方法,通过键名找到相应的键,将键值改为新的数据库链接字符串即可<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
另一个问题是在不同系统环境下测试安装包时发现的,如果系统中有.NET 1.1和.NET
2.0两个环境,安装的虚拟站点默认使用1.1的.NET版本,如果系统先安装了.NET
2.0再安装IIS,那默认网站的ASP.NET版本选项是空的,没有选中2.0版本,因此安装的虚拟目录ASP.NET版本选项也是空的,问了不少网
友,都说需要执行aspnet_regiis.exe
-i去注册2.0版本的.NET,但是如果安装好了再让用户去做这些操作总觉得有些别扭,看了一下aspnet_regiis.exe的参数说明,发现可
以对某个虚拟站点进行.NET版本注册,就写下面这段代码去注册当天安装的虚拟目录<br />
<br />
</div>
<div align="center">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;">
<div align="left"><span style="color: #008080;">1</span>&nbsp;<span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;path&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Environment.GetFolderPath(Environment.SpecialFolder.System).ToUpper().Replace(</span><span style="color: #000000;">"</span><span style="color: #000000;">SYSTEM32</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">""</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">@"</span><span style="color: #000000;">Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">System.Diagnostics.Process&nbsp;process&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;System.Diagnostics.Process();<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">process.StartInfo.FileName&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;path;<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">process.StartInfo.Arguments&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">-s W3SVC/1/ROOT/</span><span style="color: #000000;">" + "虚拟站点名称"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">process.StartInfo.WindowStyle&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;System.Diagnostics.ProcessWindowStyle.Hidden;<br />
</span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">process.Start();<br />
</span><span style="color: #008080;">8</span>&nbsp;<span style="color: #000000;">process.WaitForExit();</span></div>
</div>
</div>
<div align="left"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;第一行的代码是获取aspnet_regiis.exe的具体路径,然后通过一个进程去执行注册操作,这样,即使出现前两种情况,都不用担心没有将虚拟站点的ASP.NET版本注册正确Web应用程序无法运行了<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这两部分代码可以建一个像安装数据库一样继承于System.Configuration.Install.Installer的自定义操作来执行,不过,方便起见,直接放在InstallDB类中就可以了<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;安装包的制作是件很复杂的事,通过这次经历,只是学到了一点皮毛,在这里班门弄斧一下,希望对需要的朋友有所帮助^_^<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
==================================================<br />
DBInstall.cs<br />
<br />
<span style="color: #2000ff;"><br />
using System;<br />
using System.Collections.Generic;<br />
using System.ComponentModel;<br />
using System.Configuration.Install;<br />
using System.Data.SqlClient;<br />
<br />
namespace DBInstall<br />
{<br />
&nbsp;&nbsp;&nbsp; [RunInstaller(true)]<br />
&nbsp;&nbsp;&nbsp; public partial class InstallDb : Installer<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public InstallDb()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitializeComponent();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private void ExecuteSql(string connStr, string DatabaseName, string Sql)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlConnection conn = new SqlConnection(connStr);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlCommand cmd = new SqlCommand(Sql, conn);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.Open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.ChangeDatabase(DatabaseName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd.ExecuteNonQuery();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; finally<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; conn.Close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region Install&nbsp; 从这里开始启动安装<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void Install(System.Collections.IDictionary stateSaver)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Install(stateSaver);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string connStr = string.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096", this.Context.Parameters["server"], this.Context.Parameters["user"], this.Context.Parameters["pwd"]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0030;"> string strSql = "EXEC sp_attach_db&nbsp; @dbname&nbsp; =&nbsp; N'" + this.Context.Parameters["dbname"] + "',"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "@filename1&nbsp; =&nbsp; N'" + this.Context.Parameters["targetdir"] + "DataBase\\Super.mdf',"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + "@filename2&nbsp; =&nbsp; N'" + this.Context.Parameters["targetdir"] + "DataBase\\Super_log.ldf'";</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ExecuteSql(connStr, "master", strSql); <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #region Uninstall 删除<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override void Uninstall(System.Collections.IDictionary savedState)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加自定义的卸载代码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (savedState == null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new ApplicationException("未能卸载！");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.Uninstall(savedState);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #endregion<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp; }<br />
}</span><br />
<br />
</div>
<img src ="http://www.cnblogs.com/smallfa/aggbug/1205164.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41304/" target="_blank">[新闻]新型的编程语言:eC</a>]]></description></item><item><title>VS2005 web程序自定义安装包的制作[转]</title><link>http://www.cnblogs.com/smallfa/archive/2008/05/22/1205010.html</link><dc:creator>henry_2008</dc:creator><author>henry_2008</author><pubDate>Thu, 22 May 2008 08:27:00 GMT</pubDate><guid>http://www.cnblogs.com/smallfa/archive/2008/05/22/1205010.html</guid><description><![CDATA[摘要: 利用VS2005的&#8220;Web安装项目&#8221;建立安装包很难对安装过程进行详细控制，因此直接采用&#8220;安装项目&#8221;来建立web程序安装包。我们需要安装过程中自动创建虚拟目录，并且可以修改数据库连接字符串，假设我们在安装过程中需要用户修改web.config文件里连接字符串其形式如下：&lt;configuration&gt;...&lt;connectionStri&nbsp;&nbsp;<a href='http://www.cnblogs.com/smallfa/archive/2008/05/22/1205010.html'>阅读全文</a><img src ="http://www.cnblogs.com/smallfa/aggbug/1205010.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41304/" target="_blank">[新闻]新型的编程语言:eC</a>]]></description></item><item><title>图文描述Vs2005制作WEB应用程序安装包的方法[E8.Net正式用户可以找我们获取全部代码参考]</title><link>http://www.cnblogs.com/smallfa/archive/2008/05/22/1205011.html</link><dc:creator>henry_2008</dc:creator><author>henry_2008</author><pubDate>Thu, 22 May 2008 08:27:00 GMT</pubDate><guid>http://www.cnblogs.com/smallfa/archive/2008/05/22/1205011.html</guid><description><![CDATA[摘要: 图文描述Vs2005制作WEB应用程序安装包的方法[E8.Net正式用户可以找我们获取全部代码参考]Posted on 2008-03-22 17:19 苏康胜 阅读(167) 评论(0) 编辑 收藏--> WEB应用程序的发布很多时候是需要给最终用户自己进行安装的. 因此我们需要开发终端用户方便使用的安装包. 。NET工具安装工程向导很快速的就可以实现一个WEB应用程序的安装制作，如果提供给终端&nbsp;&nbsp;<a href='http://www.cnblogs.com/smallfa/archive/2008/05/22/1205011.html'>阅读全文</a><img src ="http://www.cnblogs.com/smallfa/aggbug/1205011.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41304/" target="_blank">[新闻]新型的编程语言:eC</a>]]></description></item><item><title>我的分页控件（未完，待续）——控件件介绍及思路 </title><link>http://www.cnblogs.com/smallfa/archive/2008/05/04/1181323.html</link><dc:creator>henry_2008</dc:creator><author>henry_2008</author><pubDate>Sun, 04 May 2008 02:25:00 GMT</pubDate><guid>http://www.cnblogs.com/smallfa/archive/2008/05/04/1181323.html</guid><description><![CDATA[摘要: 我的分页控件（未完，待续）——控件件介绍及思路 一、 工作的层次UI层和逻辑层。UI层：显示首页、末页、上一页、下一页、页号导航、文本框输入页号；共计多少条记录、多少页、当前页号等信息。逻辑层：提供分页算法（SQL语句），根据分页控件的属性，在运行的时候生成分页用的SQL语句。二、 流程l 设置分页控件的属性l 根据算法和属性生成SQL语句，通过&#8220;我的数据访问层&#8221;访问数据库&nbsp;&nbsp;<a href='http://www.cnblogs.com/smallfa/archive/2008/05/04/1181323.html'>阅读全文</a><img src ="http://www.cnblogs.com/smallfa/aggbug/1181323.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41303/" target="_blank">[新闻]免费的BitDefender能复制卡巴斯基的成功吗?</a>]]></description></item><item><title>转帖：客户端表单通用验证checkForm(oForm) js版 </title><link>http://www.cnblogs.com/smallfa/archive/2008/05/04/1181236.html</link><dc:creator>henry_2008</dc:creator><author>henry_2008</author><pubDate>Sun, 04 May 2008 01:49:00 GMT</pubDate><guid>http://www.cnblogs.com/smallfa/archive/2008/05/04/1181236.html</guid><description><![CDATA[&nbsp;
*--------------- 客户端表单通用验证checkForm(oForm) -----------------<br />
&nbsp;*&nbsp;本程序最初是由wanghr100(灰豆宝宝.net)的checkForm基础上进行修改的，增加了很多功能,如下：<br />
&nbsp;*&nbsp;1.对非ie的支持<br />
&nbsp;*&nbsp;2.增加了内置表达式和内置提示<br />
&nbsp;*&nbsp; 3.增加了显示方式（弹出式和页面显示式）<br />
&nbsp;*&nbsp;4.增加了显示一条和显示全部<br />
&nbsp;*&nbsp;5.进行了封装（CLASS_CHECK）<br />
&nbsp;*&nbsp;6.支持外接函数或表达式（应用在密码一致）<br />
&nbsp;*&nbsp;7.简化了调用方式，所有操作只需要&lt;script language='javascript' src='checkform.js'&gt;,<br />
&nbsp;&nbsp; 然后在HTML里定义各标签验证格式<br />
&nbsp;*&nbsp;8.对IE增加了对键盘输入的限制（如：定义usage='int'时，输入框只能输入数字（非IE无效）<br />
&nbsp;*&nbsp;9.增加了对disabled的不验证<br />
&nbsp;* 10.自定义报警方式（重写showMessageEx方法）
<p>&nbsp;*-----------------------------申明信息-----------------------------<br />
&nbsp;*<br />
&nbsp;*&nbsp;作者：&nbsp;ttyp<br />
&nbsp;*&nbsp;邮箱：&nbsp;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#116;&#116;&#121;&#112;&#64;&#50;&#49;&#99;&#110;&#46;&#99;&#111;&#109;">ttyp@21cn.com</a><br />
&nbsp;*&nbsp;博客：&nbsp;<a href="http://www.cnblogs.com/ttyp/">http://www.cnblogs.com/ttyp/</a><br />
&nbsp;*&nbsp; 声明：&nbsp;对本程序可以任意复制传播，但请保留这些声明，对于内置的表达式有些没有做到很严格，如果你<br />
&nbsp;&nbsp;&nbsp;有好的建议和意见，欢迎邮件和我联系或者上我的博客留言</p>
<p>&nbsp;*&nbsp;简介：<br />
&nbsp;&nbsp;&nbsp;本程序只需要对需要验证的标签设置三个属性：usage,exp,tip</p>
<p>&nbsp;&nbsp;&nbsp;usage&nbsp;:&nbsp;内置格式或表达式或函数<br />
&nbsp;&nbsp;&nbsp;exp&nbsp;&nbsp;:&nbsp;正则表达式（注意如果指定了usage则忽略exp)<br />
&nbsp;&nbsp;&nbsp;tip&nbsp;&nbsp;:&nbsp;出错提示（如果是内置格式可以不要此属性，有缺省提示）</p>
<p>&nbsp;&nbsp;&nbsp;调用时只需要引用&lt;script language='javascript' src='checkform.js'&gt;，然后为每个标记<br />
&nbsp;&nbsp;&nbsp;增加以上3个属性（不一定需要全部）</p>
<p>&nbsp;*&nbsp;原作者:&nbsp;wanghr100(灰豆宝宝.net)<br />
&nbsp;*&nbsp;email:&nbsp;<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#119;&#97;&#110;&#103;&#104;&#114;&#49;&#48;&#48;&#64;&#49;&#50;&#54;&#46;&#99;&#111;&#109;">wanghr100@126.com</a><br />
&nbsp;*<br />
&nbsp;*--------------- 客户端表单通用验证checkForm(oForm) -----------------<br />
&nbsp;*/<br />
////////////////////////////////////////////////////////////////////////////////</p>
<p><br />
function CLASS_CHECK()<br />
{<br />
&nbsp;this.pass&nbsp;&nbsp;= true;&nbsp;&nbsp;//是否通过验证<br />
&nbsp;this.showAll&nbsp;= true;&nbsp;&nbsp;//是否显示所有的验证错误<br />
&nbsp;this.alert&nbsp;&nbsp;= false;&nbsp;//报警方式（默认alert报警）<br />
&nbsp;this.message&nbsp;= "";&nbsp;&nbsp;//错误内容<br />
&nbsp;this.first&nbsp;&nbsp;= null;&nbsp;&nbsp;//在显示全部验证错误时的第一个错误控件（用于回到焦点）</p>
<p>&nbsp;//定义内置格式<br />
&nbsp;var aUsage = <br />
&nbsp;{<br />
&nbsp;&nbsp;"int":"^([+-]?)\\d+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//整数<br />
&nbsp;&nbsp;"int+":"^([+]?)\\d+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//正整数<br />
&nbsp;&nbsp;"int-":"^-\\d+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//负整数<br />
&nbsp;&nbsp;"num":"^([+-]?)\\d*\\.?\\d+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数字<br />
&nbsp;&nbsp;"num+":"^([+]?)\\d*\\.?\\d+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//正数<br />
&nbsp;&nbsp;"num-":"^-\\d*\\.?\\d+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//负数<br />
&nbsp;&nbsp;"float":"^([+-]?)\\d*\\.\\d+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//浮点数<br />
&nbsp;&nbsp;"float+":"^([+]?)\\d*\\.\\d+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//正浮点数<br />
&nbsp;&nbsp;"float-":"^-\\d*\\.\\d+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//负浮点数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//邮件<br />
&nbsp;&nbsp;"email":"^\\w+((-\\w+)|(<a href="file://.//w+%29%29*//@%5BA-Za-z0-9%5D+%28%28//.%7C-%29%5BA-Za-z0-9%5D+%29*//.%5BA-Za-z0-9%5D+$">\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$</a>",&nbsp;<br />
&nbsp;&nbsp;"color":"^#[a-fA-F0-9]{6}",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//颜色<br />
&nbsp;&nbsp;"url":"^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&amp;=]*)?$",&nbsp;//联接<br />
&nbsp;&nbsp;"chinese":"^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$",&nbsp;&nbsp;&nbsp;&nbsp;//仅中文<br />
&nbsp;&nbsp;"ascii":"^[\\x00-\\xFF]+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//仅ACSII字符<br />
&nbsp;&nbsp;"zipcode":"^\\d{6}$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//邮编<br />
&nbsp;&nbsp;"mobile":"^0{0,1}13[0-9]{9}$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//手机<br />
&nbsp;&nbsp;"ip4":"^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}.\\d{1,3}$",&nbsp;&nbsp;&nbsp;&nbsp;//ip地址<br />
&nbsp;&nbsp;"notempty":"^\\S+$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//非空<br />
&nbsp;&nbsp;"picture":"(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$",&nbsp;//图片<br />
&nbsp;&nbsp;"rar":"(.*)\\.(rar|zip|7zip|tgz)$",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//压缩文件<br />
&nbsp;&nbsp;"date":"^\\d{4}(<a href="file://-%7c///%7C/.%29//d%7B1,2%7D//1//d%7B1,2%7D$">\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$</a>"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//日期<br />
&nbsp;};</p>
<p>&nbsp;//缺省消息<br />
&nbsp;var aMessage =<br />
&nbsp;{<br />
&nbsp;&nbsp;"int"&nbsp;:"请输入整数",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//整数<br />
&nbsp;&nbsp;"int+"&nbsp;:"请输入正整数",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//正整数<br />
&nbsp;&nbsp;"int-"&nbsp;:"请输入负整数",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//负整数<br />
&nbsp;&nbsp;"num"&nbsp;:"请输入数字",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//数字<br />
&nbsp;&nbsp;"num+"&nbsp;:"请输入正数",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//正数<br />
&nbsp;&nbsp;"num-"&nbsp;:"请输入负整数",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//负数<br />
&nbsp;&nbsp;"float"&nbsp;:"请输入浮点数",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//浮点数<br />
&nbsp;&nbsp;"float+":"请输入正浮点数",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//正浮点数<br />
&nbsp;&nbsp;"float-":"请输入负浮点数",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//负浮点数<br />
&nbsp;&nbsp;"email"&nbsp;:"请输入正确的邮箱地址",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//邮件<br />
&nbsp;&nbsp;"color"&nbsp;:"请输入正确的颜色",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//颜色<br />
&nbsp;&nbsp;"url"&nbsp;:"请输入正确的连接地址",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//联接<br />
&nbsp;&nbsp;"chinese":"请输入中文",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//中文<br />
&nbsp;&nbsp;"ascii"&nbsp;:"请输入ascii字符",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//仅ACSII字符<br />
&nbsp;&nbsp;"zipcode":"请输入正确的邮政编码",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//邮编<br />
&nbsp;&nbsp;"mobile":"请输入正确的手机号码",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//手机<br />
&nbsp;&nbsp;"ip4"&nbsp;:"请输入正确的IP地址",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ip地址<br />
&nbsp;&nbsp;"notempty":"不能为空",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//非空<br />
&nbsp;&nbsp;"picture":"请选择图片",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//图片<br />
&nbsp;&nbsp;"rar"&nbsp;:"请输入压缩文件",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//压缩文件<br />
&nbsp;&nbsp;"date"&nbsp;:"请输入正确的日期"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//日期<br />
&nbsp;}</p>
<p>&nbsp;var me = this;</p>
<p>&nbsp;function checkForm(oForm)<br />
&nbsp;{<br />
&nbsp;&nbsp;me.pass&nbsp;&nbsp;= true;<br />
&nbsp;&nbsp;me.message&nbsp;= "";<br />
&nbsp;&nbsp;me.first&nbsp;= null;<br />
&nbsp;&nbsp;var els = oForm.elements;<br />
&nbsp;&nbsp;//遍历所有表元素<br />
&nbsp;&nbsp;for(var i=0;i&lt;els.length;i++)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;//取得格式<br />
&nbsp;&nbsp;&nbsp;var sUsage&nbsp;= els[i].getAttribute("Usage");&nbsp;<br />
&nbsp;&nbsp;&nbsp;var sReg&nbsp;= "";<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//如果设置Usage，则使用内置正则表达式，忽略Exp<br />
&nbsp;&nbsp;&nbsp;if(typeof(sUsage)!="undefined"&amp;&amp;sUsage!=null)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//如果Usage在表达室里找到，则使用内置表达式，无则认为是表达式；表达式可以是函数；<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(aUsage[sUsage]!=null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sReg = aUsage[sUsage];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(eval(sUsage)==false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;me.pass&nbsp;&nbsp;= false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(me.first==null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;me.first&nbsp;= els[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addMessage(getMessage(els[i]));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(me.showAll==false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setFocus(els[i]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;catch(e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("表达式[" + sUsage +"]错误:" + e.description)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;sReg = els[i].getAttribute("Exp");<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;if(typeof(sReg)!="undefined"&amp;&amp;sReg!=null)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//对于失效状态不验证<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(isDisabled(els[i])==true)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;//取得表单的值,用通用取值函数<br />
&nbsp;&nbsp;&nbsp;&nbsp;var sVal = getValue(els[i]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;//字符串-&gt;正则表达式,不区分大小写<br />
&nbsp;&nbsp;&nbsp;&nbsp;var reg = new RegExp(sReg,"i");<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(!reg.test(sVal))<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;me.pass&nbsp;&nbsp;= false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(me.first==null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;me.first&nbsp;= els[i];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//alert(reg);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//验证不通过,弹出提示warning<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var sTip = getMessage(els[i]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(sTip.length==0&amp;&amp;typeof(sUsage)!="undefined"&amp;&amp;sUsage!=null&amp;&amp;aMessage[sUsage]!=null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sTip = aMessage[sUsage];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addMessage(sTip);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(me.showAll==false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//该表单元素取得焦点,用通用返回函数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setFocus(els[i]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;if(me.pass==false)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;showMessage();</p>
<p>&nbsp;&nbsp;&nbsp;if(me.first!=null&amp;&amp;me.showAll==true)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;setFocus(me.first);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;return me.pass;<br />
&nbsp;}</p>
<p>&nbsp;/*<br />
&nbsp; *&nbsp;添加错误信息<br />
&nbsp; */<br />
&nbsp;function addMessage(msg)<br />
&nbsp;{<br />
&nbsp;&nbsp;if(me.alert==true)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;me.message += msg + "\n";<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;me.message += msg + "&lt;br&gt;";<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;/*<br />
&nbsp; *&nbsp;显示错误<br />
&nbsp; */<br />
&nbsp;function getMessage(els)<br />
&nbsp;{<br />
&nbsp;&nbsp;var sTip = els.getAttribute("tip");<br />
&nbsp;&nbsp;if(typeof(sTip)!="undefined"&amp;&amp;sTip!=null)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;return sTip;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;return "";<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p><br />
&nbsp;/*<br />
&nbsp; *&nbsp;显示错误<br />
&nbsp; */<br />
&nbsp;function showMessage()<br />
&nbsp;{<br />
&nbsp;&nbsp;//外接显示错误函数<br />
&nbsp;&nbsp;if(typeof(me.showMessageEx)=="function")<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;return me.showMessageEx(me.message);<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;if(me.alert==true)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;alert(me.message);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;var divTip;<br />
&nbsp;&nbsp;&nbsp;&nbsp;divTip = document.getElementById("divErrorMessage");<br />
&nbsp;&nbsp;&nbsp;try<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(typeof(divTip)=="undefined"||divTip==null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;divTip = document.createElement("div");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;divTip.id&nbsp;&nbsp;&nbsp;= "divErrorMessage";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;divTip.name&nbsp;&nbsp;&nbsp;= "divErrorMessage";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;divTip.style.color&nbsp;= "red";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(divTip);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;divTip.innerHTML = me.message;<br />
&nbsp;&nbsp;&nbsp;}catch(e){}<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;/*<br />
&nbsp; *&nbsp;获得元素是否失效（失效的元素不做判断）<br />
&nbsp; */<br />
&nbsp;function isDisabled(el)<br />
&nbsp;{<br />
&nbsp;&nbsp;//对于radio,checkbox元素，只要其中有一个非失效元素就验证<br />
&nbsp;&nbsp;if(el.type=="radio"||el.type=="checkbox")<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;//取得第一个元素的name,搜索这个元素组<br />
&nbsp;&nbsp;&nbsp;var tmpels = document.getElementsByName(el.name);<br />
&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;tmpels.length;i++)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(tmpels[i].disabled==false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;return true;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;return el.disabled;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p><br />
&nbsp;/*<br />
&nbsp; *&nbsp;取得对象的值（对于单选多选框把其选择的个数作为需要验证的值）<br />
&nbsp; */<br />
&nbsp;function getValue(el)<br />
&nbsp;{<br />
&nbsp;&nbsp;//取得表单元素的类型<br />
&nbsp;&nbsp;var sType = el.type;<br />
&nbsp;&nbsp;switch(sType)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;//文本输入框,直接取值el.value<br />
&nbsp;&nbsp;&nbsp;case "text":<br />
&nbsp;&nbsp;&nbsp;case "hidden":<br />
&nbsp;&nbsp;&nbsp;case "password":<br />
&nbsp;&nbsp;&nbsp;case "file":<br />
&nbsp;&nbsp;&nbsp;case "textarea": return el.value;<br />
&nbsp;&nbsp;&nbsp;//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个，"00"表示选中两个<br />
&nbsp;&nbsp;&nbsp;case "checkbox":<br />
&nbsp;&nbsp;&nbsp;case "radio": return getRadioValue(el);<br />
&nbsp;&nbsp;&nbsp;case "select-one":<br />
&nbsp;&nbsp;&nbsp;case "select-multiple": return getSelectValue(el);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;//取得radio,checkbox的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数<br />
&nbsp;&nbsp;function getRadioValue(el)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;var sValue = "";<br />
&nbsp;&nbsp;&nbsp;//取得第一个元素的name,搜索这个元素组<br />
&nbsp;&nbsp;&nbsp;var tmpels = document.getElementsByName(el.name);<br />
&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;tmpels.length;i++)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(tmpels[i].checked)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sValue += "0";<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;return sValue;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;//取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数<br />
&nbsp;&nbsp;function getSelectValue(el)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;var sValue = "";<br />
&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;el.options.length;i++)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//单选下拉框提示选项设置为value=""<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(el.options[i].selected &amp;&amp; el.options[i].value!="")<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sValue += "0";<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;return sValue;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;/*<br />
&nbsp; *&nbsp;对没有通过验证的元素设置焦点<br />
&nbsp; */<br />
&nbsp;function setFocus(el)<br />
&nbsp;{<br />
&nbsp;&nbsp;//取得表单元素的类型<br />
&nbsp;&nbsp;var sType = el.type;<br />
&nbsp;&nbsp;switch(sType)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;//文本输入框,光标定位在文本输入框的末尾<br />
&nbsp;&nbsp;&nbsp;case "text":<br />
&nbsp;&nbsp;&nbsp;case "hidden":<br />
&nbsp;&nbsp;&nbsp;case "password":<br />
&nbsp;&nbsp;&nbsp;case "file":<br />
&nbsp;&nbsp;&nbsp;case "textarea": <br />
&nbsp;&nbsp;&nbsp;&nbsp;try{el.focus();var rng = el.createTextRange(); rng.collapse(false); rng.select();}catch(e){};<br />
&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;//单多选,第一选项非失效控件取得焦点<br />
&nbsp;&nbsp;&nbsp;case "checkbox":<br />
&nbsp;&nbsp;&nbsp;case "radio": <br />
&nbsp;&nbsp;&nbsp;&nbsp;var els = document.getElementsByName(el.name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;els.length;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(els[i].disabled == false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].focus();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;case "select-one":<br />
&nbsp;&nbsp;&nbsp;case "select-multiple":<br />
&nbsp;&nbsp;&nbsp;&nbsp;el.focus();<br />
&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;<br />
&nbsp;//自动绑定到所有form的onsubmit事件<br />
&nbsp;if(window.attachEvent)<br />
&nbsp;{<br />
&nbsp;&nbsp;window.attachEvent("onload",function(){for(var
i=0;i&lt;document.forms.length;i++){var theFrom = document.forms[i];
if(theFrom){theFrom.attachEvent("onsubmit",function(){return
checkForm(theFrom);});}}});<br />
&nbsp;}<br />
&nbsp;else<br />
&nbsp;{<br />
&nbsp;&nbsp;window.onsubmit = function(e){var theFrom = e.target;if(theFrom){return checkForm(theFrom);}}<br />
&nbsp;}</p>
<p>&nbsp;this.keyCheck = function()<br />
&nbsp;{<br />
&nbsp;&nbsp;if(window.attachEvent)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;window.attachEvent("onload",function(){for(var
i=0;i&lt;document.forms.length;i++){var theFrom = document.forms[i];
if(theFrom){myKeyCheck(theFrom);}}});<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;else<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;//TOOD<br />
&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;function myKeyCheck(oForm)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;var els = oForm.elements;<br />
&nbsp;&nbsp;&nbsp;//遍历所有表元素<br />
&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;els.length;i++)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;//取得格式<br />
&nbsp;&nbsp;&nbsp;&nbsp;var sUsage&nbsp;= els[i].getAttribute("Usage");&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;//如果设置Usage，则使用内置正则表达式，忽略Exp<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(typeof(sUsage)!="undefined"&amp;&amp;sUsage!=null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(sUsage.toLowerCase ())<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "zipcode":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "int":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onkeypress&nbsp;= function(){return
/\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')&lt;0?String.fromCharCode(event.keyCode)=="+":false)||(this.value.indexOf('-')&lt;0?String.fromCharCode(event.keyCode)=="-":false);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onpaste&nbsp;&nbsp;= function(){return !clipboardData.getData('text').match(/\D/);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].ondragenter&nbsp;= function(){return false;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].style.imeMode= "disabled";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "mobile":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "int+":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onkeypress&nbsp;= function(){return
/\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('+')&lt;0?String.fromCharCode(event.keyCode)=="+":false);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onpaste&nbsp;&nbsp;= function(){return !clipboardData.getData('text').match(/\D/);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].ondragenter&nbsp;= function(){return false;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].style.imeMode= "disabled";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "int-":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onkeypress&nbsp;= function(){return
/\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('-')&lt;0?String.fromCharCode(event.keyCode)=="-":false);}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onpaste&nbsp;&nbsp;= function(){return !clipboardData.getData('text').match(/\D/);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].ondragenter&nbsp;= function(){return false;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].style.imeMode= "disabled";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "float":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "num":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onkeypress&nbsp;= function(){return /[\+\-\.]|\d/.test(String.fromCharCode(event.keyCode));}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onpaste&nbsp;&nbsp;= function(){return !clipboardData.getData('text').match(/\D/);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].ondragenter&nbsp;= function(){return false;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].style.imeMode= "disabled";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "float+":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "num+":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onkeypress&nbsp;= function(){return /[\+\.]|\d/.test(String.fromCharCode(event.keyCode));}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onpaste&nbsp;&nbsp;= function(){return !clipboardData.getData('text').match(/\D/);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].ondragenter&nbsp;= function(){return false;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].style.imeMode= "disabled";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "float-":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "num-":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onkeypress&nbsp;= function(){return /[\-\.]|\d/.test(String.fromCharCode(event.keyCode));}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onpaste&nbsp;&nbsp;= function(){return !clipboardData.getData('text').match(/\D/);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].ondragenter&nbsp;= function(){return false;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].style.imeMode= "disabled";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "ascii":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].style.imeMode= "disabled";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "ip4":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onkeypress&nbsp;= function(){return /[\.]|\d/.test(String.fromCharCode(event.keyCode));}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onpaste&nbsp;&nbsp;= function(){return !clipboardData.getData('text').match(/\D/);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].ondragenter&nbsp;= function(){return false;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].style.imeMode= "disabled";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].maxLength&nbsp;= 15;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "color":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onkeypress&nbsp;= function(){return
/[a-fA-Z]|\d/.test(String.fromCharCode(event.keyCode))||(this.value.indexOf('#')&lt;0?String.fromCharCode(event.keyCode)=="#":false);}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onpaste&nbsp;&nbsp;= function(){return !clipboardData.getData('text').match(/\D/);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].ondragenter&nbsp;= function(){return false;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].maxLength&nbsp;= 7;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].style.imeMode= "disabled";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "date":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onkeypress&nbsp;= function(){return /[\/\-\.]|\d/.test(String.fromCharCode(event.keyCode));}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].onpaste&nbsp;&nbsp;= function(){return !clipboardData.getData('text').match(/\D/);}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].ondragenter&nbsp;= function(){return false;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;els[i].style.imeMode= "disabled";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}</p>
<p>//初始化<br />
var g_check = new CLASS_CHECK();<br />
&nbsp;g_check.keyCheck();</p>
<img src ="http://www.cnblogs.com/smallfa/aggbug/1181236.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41303/" target="_blank">[新闻]免费的BitDefender能复制卡巴斯基的成功吗?</a>]]></description></item><item><title>通用权限的思路。只是一个简单的思路。</title><link>http://www.cnblogs.com/smallfa/archive/2008/05/04/1181227.html</link><dc:creator>henry_2008</dc:creator><author>henry_2008</author><pubDate>Sun, 04 May 2008 01:45:00 GMT</pubDate><guid>http://www.cnblogs.com/smallfa/archive/2008/05/04/1181227.html</guid><description><![CDATA[<div class="postTitle">
<a id="AjaxHolder_ctl01_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/jyk/archive/2008/04/29/1176050.html">通用权限的思路。只是一个简单的思路。</a>
</div>
<br />
面对权限，我们要解决几个的问题。<br />
<br />
<strong>第一个就是：我们的软件里面有哪些功能？</strong> —— 给用户自己维护角色作准备<br />
<br />
比如添加新闻、添加产品、客户信息维护、合同管理等等，当然还可以细分一下，<br />
客户信息维护又可以分为：客户基本信息、客户的联系人、客户报价、客户的合同等。<br />
<br />
我的习惯是建立一个表，叫做功能结点表。<br />
这个表可以生成左面的功能树，也可以记录项目里面一共有哪些功能。<br />
这里的一个功能指的是两个页面，一个是列表页面，一个是表单页面。<br />
列表页面包括查询、导出数据等功能，表单页面又可以再往下继续划分，就是可以在包含子功能结点。<br />
<br />
这样一个项目里的功能就全部记录到了一个表里面。<br />
<span style="color: red;"><br />
功能结点表的主要字段<br />
</span>FunctionID<br />
ParentID<br />
Title<br />
URL<br />
...<br />
<br />
其它字段略。<br />
<br />
<br />
<strong>第二个问题：哪些人可以访问到那些功能结点？ </strong><br />
<br />
这个问题呢就要引入&#8220;角色&#8221;或者&#8220;用户组&#8221;的概念了。<br />
<br />
我们建立一个角色表来记录一个角色拥有的功能结点。<br />
我们可以写一个程序，让客户自己来维护，也就是说用户可以自己添加、修改&#8220;角色&#8221;。<br />
<br />
然后把人员和角色关联起来就可以了。<br />
<br />
<span style="color: red;">角色表的主要字段<br />
</span>RoleID<br />
TItle <br />
<br />
<span style="color: red;">角色拥有的功能节点表得主要字段<br />
</span>Role_FunctionID<br />
RoleID<br />
FunctionID<br />
<br />
<br />
<strong>第三个问题：详细权限的划分</strong><br />
<br />
一个页面可能会有很多的功能，比如可以查看、查询、添加数据、修改数据、删除数据（又可以分为逻辑删除和物理删除）、导出数据等。<br />
<br />
而一个人（或者说是角色）来到这个页面后（获得了访问权限），不一定会拥有上面的全部的权限。<br />
这样就需要再详细区分一下。<br />
<br />
这样的话我们在加一个字段就可以了，通过这个字段来判断登录人有哪些具体的权限。<br />
<br />
<span style="color: red;">角色拥有的功能节点表得主要字段<br />
</span>Role_FunctionID<br />
RoleID<br />
FunctionID<br />
<strong>详细权限<br />
</strong><br />
<br />
<br />
<strong>第四个问题：资源的访问权限<br />
<br />
</strong>这个我还没有想好怎么解决。<br />
<br />
就是说同一个页面，业务员只能看到自己的客户信息、并且可以维护，<br />
<br />
然后业务一部门的经理只能看到业务一部门的业务员的客户信息，不能看到其他业务部的客户信息<br />
<br />
再然后是业务部的总经理，他可以看到所有业务员的客户信息。<br />
<br />
最后就是，不知道大家有没有遇到过&#8220;内勤&#8221;这个职位，就是说业务员只管联系客户，不用自己录入客户信息，<br />
<br />
而往电脑里录入信息的工作就全交给内勤了。<br />
<br />
再往下说就更烦了，一个业务部可能只有一个内勤，也可能有多个内勤，一个内勤会对应多个业务员。<br />
好了先不说了，好像有点跑题了，这个就当作是特利吧。<br />
<br />
<br />
前三个问题都不需要引入部门的概念，但是第四个问题就不得不考虑部门了。<br />
<br />
<br />
以上是我的思路，不知道能不能把权限的问题，从粗粒度上说清楚。<br />
<br />
有不对的请指出，大家一起研究。<br />
<br />
<br />
<br />
<br />
<div class="postTitle">
<a id="AjaxHolder_ctl01_TitleUrl" class="postTitle2" href="http://www.cnblogs.com/jyk/archive/2008/05/01/1178753.html">通用权限的思路。带有数据库关系图</a>
</div>
<br />
写完了就要提交了，想向上传一个图片，IE居然死掉了，白写了，还得重来一遍。郁闷。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;上篇：<a class="postTitle2" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/jyk/archive/2008/04/29/1176050.html">通用权限的思路。只是一个简单的思路。</a>&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;上一篇住要是想说一下大体的思路，就是一个主要的框架，我觉得在做一件事情之前，都需要有一个初略的设计，就是中提的想法，抓住问题的关键点。所以对于权限问题，我觉得需要抓住下面的这四个问题；<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;1、我们的软件里面有哪些功能？<br />
&nbsp;&nbsp;&nbsp;&nbsp;2、哪些人可以<strong>访问</strong>到哪些功能结点？<br />
&nbsp;&nbsp;&nbsp;&nbsp;3、访问到了页面后可以做哪些事情？（查询、添加、修改、删除、导出、打印等）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（原来的说法：详细权限的划分）<br />
&nbsp;&nbsp;&nbsp;&nbsp;4、在同一个页面里哪些人可以看到那些信息<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;（原来的说法：资源的访问权限）<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;这是我的个人见解，是通过几个项目总结出来的，如果不全面、或者不正确的话，欢迎大家及时指正，共同努力、共同提高！<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;我设计了下面的这几个表，来解决这些问题。这里我只想表示表之间的关联，至于字段我只是写了几个主要的，字段的设计嘛，大家肯定各有各的方式，我想我写出来主要的就可以了。<br />
<br />
&nbsp; <img alt="" src="http://www.cnblogs.com/images/cnblogs_com/jyk/role_Visio.gif" border="0" width="801" height="401" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;我的英文比较差，还是直接用中文吧，这样更直接一些。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;如果看图不太清楚的话，可以到这里下载 visio 格式的文件。<font face="Verdana"><a href="http://www.cnblogs.com/jyk/archive/2008/04/25/1170979.html">http://www.cnblogs.com/jyk/archive/2008/04/25/1170979.html</a></font>&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;先来看<strong>第一个问题</strong><span style="color: #0000ff;">，[<font face="Verdana">项目—功能结点</font>]</span> 和 <span style="color: #0000ff;">[<font face="Verdana">项目—节点拥有的详细权限] </font></span><font face="Verdana">这两个表记录了项目里面有哪些功能结点和详细的功能，<br />
</font><span style="color: #0000ff;">[<font face="Verdana">项目—功能结点</font>]&nbsp;</span> 功能节点，可以通过这个表来呈现左面的功能树。记录打开的页面和相关的信息。<br />
<span style="color: #0000ff;">[<font face="Verdana">项目—节点拥有的详细权限]</font></span>&nbsp;按钮组，一个功能节点（主要是列表页面）有哪些按钮，比如&#8220;添加&#8221;按钮，&#8220;修改&#8221;按钮等。记录按钮的名称、打开的页面和相关的信息。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;这两个表是在设计阶段完成的，程序员可以根据这个来实现功能。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;解决了第一个问题后，<strong>第二个问题</strong>就好办了，<span style="color: #0000ff;">[<font face="Verdana">项目—角色</font>]</span> 和 <span style="color: #0000ff;">[<font face="Verdana">角色拥有的功能结点</font>]</span> 来 实现。<br />
<span style="color: #0000ff;">[<font face="Verdana">项目—角色</font>]&nbsp; <span style="color: #000000;">记录项目里面有哪些角色。</span></span><br />
<span style="color: #0000ff;">[<font face="Verdana">角色拥有的功能结点</font>] <span style="color: #000000;">记录一个角色拥有哪些功能结点，功能结点里面有哪些具体的操作（添加、修改等）<br />
</span></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;不知道大家的项目的角色是在什么时候诞生的，是在设计的时候吗？还是程序做好之后由用户自己设计？我的做法是后者。因为客户比我们更清楚需要多少角色，需要什么样的角色，一个角色里有哪些功能更合适。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;我们可以做一个维护程序，让客户自行添加。先在角色表里添加一个角色，然后选择角色可以看到的功能页面，最后选择在这个功能结点里可以做的操作（添加、修改等）。这样一个角色就诞生了。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;角色有了之后，就可以给人