<?xml-stylesheet type="text/xsl" href="/Include/FeedStylesheets/rss.xsl" media="screen"?><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>tony的空间</title><link>http://blog.fwwwd.com/tony/default.aspx</link><description>姓名：tony&lt;br/&gt;职业：IT&lt;br/&gt;年龄：3*&lt;br/&gt;位置：中国&lt;br/&gt;个性介绍：</description><managingEditor>tony</managingEditor><dc:language>zh-CN</dc:language><generator> I-Favourite 1.0.3.0</generator><Count>6</Count><item><dc:creator>tony</dc:creator><title>ASP.NET中如何防范SQL注入式攻击 </title><link>http://blog.fwwwd.com/tony/archive/140859.aspx</link><pubDate>Wed, 09 Apr 2008 01:42:03 GMT</pubDate><guid>http://blog.fwwwd.com/tony/archive/140859.aspx</guid><wfw:comment>http://blog.fwwwd.com/tony/archive/140859.aspx</wfw:comment><comments>http://blog.fwwwd.com/tony/archive/140859.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss /><trackback:ping>http://blog.fwwwd.com/tony/Trackback.aspx?postID=140859</trackback:ping><description>&lt;p&gt;ASP.NET中如何防范SQL注入式攻击&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;br /&gt;
一、什么是SQL注入式攻击？ &lt;/p&gt;
&lt;p&gt;　　所谓SQL注入式攻击，就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串，欺骗服务器执行恶意的SQL命令。在某些表单中，用户输入的内容直接用来构造（或者影响）动态SQL命令，或作为存储过程的输入参数，这类表单特别容易受到SQL注入式攻击。常见的SQL注入式攻击过程类如： &lt;/p&gt;
&lt;p&gt;　　⑴ 某个ASP.NET Web应用有一个登录页面，这个登录页面控制着用户是否有权访问应用，它要求用户输入一个名称和密码。 &lt;/p&gt;
&lt;p&gt;　　⑵ 登录页面中输入的内容将直接用来构造动态的SQL命令，或者直接用作存储过程的参数。下面是ASP.NET应用构造查询的一个例子： &lt;/p&gt;
&lt;p&gt;System.Text.StringBuilder query = new System.Text.StringBuilder(&lt;br /&gt;
&amp;nbsp; &amp;quot;SELECT * from Users WHERE login = '&amp;quot;)&lt;br /&gt;
&amp;nbsp; .Append(txtLogin.Text).Append(&amp;quot;' AND password='&amp;quot;)&lt;br /&gt;
&amp;nbsp; .Append(txtPassword.Text).Append(&amp;quot;'&amp;quot;);&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;　　⑶ 攻击者在用户名字和密码输入框中输入&amp;quot;'或'1'='1&amp;quot;之类的内容。 &lt;/p&gt;
&lt;p&gt;　　⑷ 用户输入的内容提交给服务器之后，服务器运行上面的ASP.NET代码构造出查询用户的SQL命令，但由于攻击者输入的内容非常特殊，所以最后得到的SQL命令变成：SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'。 &lt;/p&gt;
&lt;p&gt;　　⑸ 服务器执行查询或存储过程，将用户输入的身份信息和服务器中保存的身份信息进行对比。 &lt;/p&gt;
&lt;p&gt;　　⑹ 由于SQL命令实际上已被注入式攻击修改，已经不能真正验证用户身份，所以系统会错误地授权给攻击者。 &lt;/p&gt;
&lt;p&gt;　　如果攻击者知道应用会将表单中输入的内容直接用于验证身份的查询，他就会尝试输入某些特殊的SQL字符串篡改查询改变其原来的功能，欺骗系统授予访问权限。 &lt;/p&gt;
&lt;p&gt;　　系统环境不同，攻击者可能造成的损害也不同，这主要由应用访问数据库的安全权限决定。如果用户的帐户具有管理员或其他比较高级的权限，攻击者就可能对数据库的表执行各种他想要做的操作，包括添加、删除或更新数据，甚至可能直接删除表。 &lt;/p&gt;
&lt;p&gt;二、如何防范？ &lt;/p&gt;
&lt;p&gt;　　好在要防止ASP.NET应用被SQL注入式攻击闯入并不是一件特别困难的事情，只要在利用表单输入的内容构造SQL命令之前，把所有输入内容过滤一番就可以了。过滤输入内容可以按多种方式进行。 &lt;/p&gt;
&lt;p&gt;　　⑴ 对于动态构造SQL查询的场合，可以使用下面的技术： &lt;/p&gt;
&lt;p&gt;　　第一：替换单引号，即把所有单独出现的单引号改成两个单引号，防止攻击者修改SQL命令的含义。再来看前面的例子，&amp;ldquo;SELECT * from Users WHERE login = ''' or ''1''=''1' AND password = ''' or ''1''=''1'&amp;rdquo;显然会得到与&amp;ldquo;SELECT * from Users WHERE login = '' or '1'='1' AND password = '' or '1'='1'&amp;rdquo;不同的结果。 &lt;/p&gt;
&lt;p&gt;　　第二：删除用户输入内容中的所有连字符，防止攻击者构造出类如&amp;ldquo;SELECT * from Users WHERE login = 'mas' -- AND password =''&amp;rdquo;之类的查询，因为这类查询的后半部分已经被注释掉，不再有效，攻击者只要知道一个合法的用户登录名称，根本不需要知道用户的密码就可以顺利获得访问权限。 &lt;/p&gt;
&lt;p&gt;　　第三：对于用来执行查询的数据库帐户，限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作，因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERT、UPDATE或DELETE命令。 &lt;/p&gt;
&lt;p&gt;　　⑵ 用存储过程来执行所有的查询。SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外，它还使得数据库权限可以限制到只允许特定的存储过程执行，所有的用户输入必须遵从被调用的存储过程的安全上下文，这样就很难再发生注入式攻击了。 &lt;/p&gt;
&lt;p&gt;　　⑶ 限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符，那么不要认可表单中输入的10个以上的字符，这将大大增加攻击者在SQL命令中插入有害代码的难度。 &lt;/p&gt;
&lt;p&gt;　　⑷ 检查用户输入的合法性，确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行&amp;mdash;&amp;mdash;之所以要执行服务器端验证，是为了弥补客户端验证机制脆弱的安全性。 &lt;/p&gt;
&lt;p&gt;　　在客户端，攻击者完全有可能获得网页的源代码，修改验证合法性的脚本（或者直接删除脚本），然后将非法内容通过修改后的表单提交给服务器。因此，要保证验证操作确实已经执行，唯一的办法就是在服务器端也执行验证。你可以使用许多内建的验证对象，例如RegularExpressionValidator，它们能够自动生成验证用的客户端脚本，当然你也可以插入服务器端的方法调用。如果找不到现成的验证对象，你可以通过CustomValidator自己创建一个。 &lt;/p&gt;
&lt;p&gt;　　⑸ 将用户登录名称、密码等数据加密保存。加密用户输入的数据，然后再将它与数据库中保存的数据比较，这相当于对用户输入的数据进行了&amp;ldquo;消毒&amp;rdquo;处理，用户输入的数据不再对数据库有任何特殊的意义，从而也就防止了攻击者注入SQL命令。System.Web.Security.FormsAuthentication类有一个HashPasswordForStoringInConfigFile，非常适合于对输入数据进行消毒处理。 &lt;/p&gt;
&lt;p&gt;　　⑹ 检查提取数据的查询所返回的记录数量。如果程序只要求返回一个记录，但实际返回的记录却超过一行，那就当作出错处理。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt; </description></item><item><dc:creator>tony</dc:creator><title>ASP.NET编程中经常会用到的27个函数集</title><link>http://blog.fwwwd.com/tony/archive/140857.aspx</link><pubDate>Wed, 09 Apr 2008 01:22:54 GMT</pubDate><guid>http://blog.fwwwd.com/tony/archive/140857.aspx</guid><wfw:comment>http://blog.fwwwd.com/tony/archive/140857.aspx</wfw:comment><comments>http://blog.fwwwd.com/tony/archive/140857.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss /><trackback:ping>http://blog.fwwwd.com/tony/Trackback.aspx?postID=140857</trackback:ping><description>&lt;p&gt;1、DateTime 数字型 &lt;/p&gt;
&lt;p&gt;System.DateTime currentTime=new System.DateTime(); &lt;br /&gt;
1.1 取当前年月日时分秒 currentTime=System.DateTime.Now; &lt;br /&gt;
1.2 取当前年 int 年=currentTime.Year; &lt;br /&gt;
1.3 取当前月 int 月=currentTime.Month; &lt;br /&gt;
1.4 取当前日 int 日=currentTime.Day; &lt;br /&gt;
1.5 取当前时 int 时=currentTime.Hour; &lt;br /&gt;
1.6 取当前分 int 分=currentTime.Minute; &lt;br /&gt;
1.7 取当前秒 int 秒=currentTime.Second; &lt;br /&gt;
1.8 取当前毫秒 int 毫秒=currentTime.Millisecond; &lt;br /&gt;
（变量可用中文） &lt;/p&gt;
&lt;p&gt;2、Int32.Parse(变量) Int32.Parse(&amp;quot;常量&amp;quot;) &lt;br /&gt;
字符型转换 转为32位数字型 &lt;/p&gt;
&lt;p&gt;3、 变量.ToString() &lt;br /&gt;
字符型转换 转为字符串 &lt;br /&gt;
12345.ToString(&amp;quot;n&amp;quot;); //生成 12,345.00 &lt;br /&gt;
12345.ToString(&amp;quot;C&amp;quot;); //生成 ￥12,345.00 &lt;br /&gt;
12345.ToString(&amp;quot;e&amp;quot;); //生成 1.234500e+004 &lt;br /&gt;
12345.ToString(&amp;quot;f4&amp;quot;); //生成 12345.0000 &lt;br /&gt;
12345.ToString(&amp;quot;x&amp;quot;); //生成 3039 (16进制) &lt;br /&gt;
12345.ToString(&amp;quot;p&amp;quot;); //生成 1,234,500.00% &lt;/p&gt;
&lt;p&gt;4、变量.Length 数字型 &lt;br /&gt;
取字串长度： &lt;br /&gt;
如： string str=&amp;quot;中国&amp;quot;; &lt;br /&gt;
int Len = str.Length ; //Len是自定义变量， str是求测的字串的变量名 &lt;/p&gt;
&lt;p&gt;5、System.Text.Encoding.Default.GetBytes(变量) &lt;br /&gt;
字码转换 转为比特码 &lt;br /&gt;
如：byte[] bytStr = System.Text.Encoding.Default.GetBytes(str); &lt;br /&gt;
然后可得到比特长度： &lt;br /&gt;
len = bytStr.Length; &lt;/p&gt;
&lt;p&gt;6、System.Text.StringBuilder(&amp;quot;&amp;quot;) &lt;br /&gt;
字符串相加，（+号是不是也一样？） &lt;br /&gt;
如：System.Text.StringBuilder sb = new System.Text.StringBuilder(&amp;quot;&amp;quot;); &lt;br /&gt;
sb.Append(&amp;quot;中华&amp;quot;); &lt;br /&gt;
sb.Append(&amp;quot;人民&amp;quot;); &lt;br /&gt;
sb.Append(&amp;quot;共和国&amp;quot;); &lt;/p&gt;
&lt;p&gt;7、变量.Substring(参数1,参数2); &lt;br /&gt;
截取字串的一部分，参数1为左起始位数，参数2为截取几位。 &lt;br /&gt;
如：string s1 = str.Substring(0,2); &lt;/p&gt;
&lt;p&gt;8、String user_IP=Request.ServerVariables[&amp;quot;REMOTE_ADDR&amp;quot;].ToString(); &lt;br /&gt;
取远程用户IP地址 &lt;/p&gt;
&lt;p&gt;9、穿过代理服务器取远程用户真实IP地址： &lt;br /&gt;
if(Request.ServerVariables[&amp;quot;HTTP_VIA&amp;quot;]!=null){ &lt;br /&gt;
string user_IP=Request.ServerVariables[&amp;quot;HTTP_X_FORWARDED_FOR&amp;quot;].ToString(); &lt;br /&gt;
}else{ &lt;br /&gt;
string user_IP=Request.ServerVariables[&amp;quot;REMOTE_ADDR&amp;quot;].ToString(); &lt;br /&gt;
} &lt;/p&gt;
&lt;p&gt;10、 Session[&amp;quot;变量&amp;quot;]; &lt;br /&gt;
存取Session值； &lt;br /&gt;
如，赋值： Session[&amp;quot;username&amp;quot;]=&amp;quot;小布什&amp;quot;; &lt;/p&gt;
&lt;p&gt;取值： Object objName=Session[&amp;quot;username&amp;quot;]; &lt;br /&gt;
String strName=objName.ToString(); &lt;br /&gt;
清空： Session.RemoveAll(); &lt;/p&gt;
&lt;p&gt;11、String str=Request.QueryString[&amp;quot;变量&amp;quot;]; &lt;br /&gt;
用超链接传送变量。 &lt;br /&gt;
如在任一页中建超链接:&amp;lt;a href=Edit.aspx?fbid=23&amp;gt;点击&amp;lt;/a&amp;gt; &lt;br /&gt;
在Edit.aspx页中取值：String str=Request.QueryString[&amp;quot;fdid&amp;quot;]; &lt;/p&gt;
&lt;p&gt;12、DOC对象.CreateElement(&amp;quot;新建节点名&amp;quot;); &lt;br /&gt;
创建XML文档新节点 &lt;/p&gt;
&lt;p&gt;13、父节点.AppendChild(子节点)； &lt;br /&gt;
将新建的子节点加到XML文档父节点下 &lt;/p&gt;
&lt;p&gt;14、 父节点.RemoveChild(节点); &lt;br /&gt;
删除节点 &lt;/p&gt;
&lt;p&gt;15、Response &lt;br /&gt;
Response.Write(&amp;quot;字串&amp;quot;)； &lt;br /&gt;
Response.Write(变量)； &lt;br /&gt;
向页面输出。 &lt;/p&gt;
&lt;p&gt;Response.Redirect(&amp;quot;URL地址&amp;quot;）； &lt;br /&gt;
跳转到URL指定的页面 &lt;/p&gt;
&lt;p&gt;16、char.IsWhiteSpce(字串变量，位数)&amp;mdash;&amp;mdash;逻辑型 &lt;br /&gt;
查指定位置是否空字符； &lt;br /&gt;
如： &lt;br /&gt;
string str=&amp;quot;中国 人民&amp;quot;; &lt;br /&gt;
Response.Write(char.IsWhiteSpace(str,2)); //结果为：True, 第一个字符是0位，2是第三个字符。 &lt;/p&gt;
&lt;p&gt;17、char.IsPunctuation('字符') --逻辑型 &lt;br /&gt;
查字符是否是标点符号 &lt;br /&gt;
如：Response.Write(char.IsPunctuation('A')); //返回：False &lt;/p&gt;
&lt;p&gt;18、(int)'字符' &lt;br /&gt;
把字符转为数字，查代码点，注意是单引号。 &lt;br /&gt;
如： &lt;br /&gt;
Response.Write((int)'中'); //结果为中字的代码：20013 &lt;/p&gt;
&lt;p&gt;19、(char)代码 &lt;br /&gt;
把数字转为字符，查代码代表的字符。 &lt;br /&gt;
如： &lt;br /&gt;
Response.Write((char)22269); //返回&amp;ldquo;国&amp;rdquo;字。 &lt;/p&gt;
&lt;p&gt;20、 Trim() &lt;br /&gt;
清除字串前后空格 &lt;/p&gt;
&lt;p&gt;21 、字串变量.Replace(&amp;quot;子字串&amp;quot;,&amp;quot;替换为&amp;quot;) &lt;br /&gt;
字串替换 &lt;br /&gt;
如： &lt;br /&gt;
string str=&amp;quot;中国&amp;quot;; &lt;br /&gt;
str=str.Replace(&amp;quot;国&amp;quot;,&amp;quot;央&amp;quot;); //将国字换为央字 &lt;br /&gt;
Response.Write(str); //输出结果为&amp;ldquo;中央&amp;rdquo; &lt;/p&gt;
&lt;p&gt;再如：（这个非常实用） &lt;/p&gt;
&lt;p&gt;string str=&amp;quot;这是&amp;lt;script&amp;gt;脚本&amp;quot;; &lt;br /&gt;
str=str.Replace(&amp;quot;&amp;lt;&amp;quot;,&amp;quot;&amp;lt;font&amp;gt;&amp;lt;&amp;lt;/font&amp;gt;&amp;quot;); //将左尖括号替换为&amp;lt;font&amp;gt; 与 &amp;lt; 与 &amp;lt;/font&amp;gt; （或换为&amp;lt;，但估计经XML存诸后，再提出仍会还原） &lt;br /&gt;
Response.Write(str); //显示为：&amp;ldquo;这是&amp;lt;script&amp;gt;脚本&amp;rdquo; &lt;/p&gt;
&lt;p&gt;如果不替换，&amp;lt;script&amp;gt;将不显示，如果是一段脚本，将运行；而替换后，脚本将不运行。 &lt;br /&gt;
这段代码的价值在于：你可以让一个文本中的所有HTML标签失效，全部显示出来，保护你的具有交互性的站点。 &lt;br /&gt;
具体实现：将你的表单提交按钮脚本加上下面代码： &lt;br /&gt;
string strSubmit=label1.Text; //label1是你让用户提交数据的控件ID。 &lt;br /&gt;
strSubmit=strSubmit.Replace(&amp;quot;&amp;lt;&amp;quot;,&amp;quot;&amp;lt;font&amp;gt;&amp;lt;&amp;lt;/font&amp;gt;&amp;quot;); &lt;br /&gt;
然后保存或输出strSubmit。 &lt;br /&gt;
用此方法还可以简单实现UBB代码。 &lt;/p&gt;
&lt;p&gt;22、Math.Max(i,j) &lt;br /&gt;
取i与j中的最大值 &lt;br /&gt;
如 int x=Math.Max(5,10); // x将取值 10 &lt;/p&gt;
&lt;p&gt;加一点吧 23、字串对比...... &lt;br /&gt;
加一点吧 &lt;/p&gt;
&lt;p&gt;23、字串对比一般都用: if(str1==str2){ } , 但还有别的方法: &lt;/p&gt;
&lt;p&gt;(1)、 &lt;br /&gt;
string str1; str2 &lt;br /&gt;
//语法: str1.EndsWith(str2); __检测字串str1是否以字串str2结尾,返回布尔值.如: &lt;br /&gt;
if(str1.EndsWith(str2)){ Response.Write(&amp;quot;字串str1是以&amp;quot;+str2+&amp;quot;结束的&amp;quot;); } &lt;/p&gt;
&lt;p&gt;(2)、 &lt;br /&gt;
//语法:str1.Equals(str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. &lt;/p&gt;
&lt;p&gt;(3)、 &lt;br /&gt;
//语法 Equals(str1,str2); __检测字串str1是否与字串str2相等,返回布尔值,用法同上. &lt;/p&gt;
&lt;p&gt;24、IndexOf() 、LastIndexOf() &lt;br /&gt;
查找字串中指定字符或字串首次（最后一次）出现的位置,返回索引值，如： &lt;br /&gt;
str1.IndexOf(&amp;quot;字&amp;quot;)； //查找&amp;ldquo;字&amp;rdquo;在str1中的索引值（位置） &lt;br /&gt;
str1.IndexOf(&amp;quot;字串&amp;quot;)；//查找&amp;ldquo;字串&amp;rdquo;的第一个字符在str1中的索引值（位置） &lt;br /&gt;
str1.IndexOf(&amp;quot;字串&amp;quot;,3,2)；//从str1第4个字符起，查找2个字符，查找&amp;ldquo;字串&amp;rdquo;的第一个字符在str1中的索引值（位置） &lt;/p&gt;
&lt;p&gt;25、Insert() &lt;br /&gt;
在字串中指定索引位插入指定字符。如： &lt;br /&gt;
str1.Insert(1,&amp;quot;字&amp;quot;);在str1的第二个字符处插入&amp;ldquo;字&amp;rdquo;，如果str1=&amp;quot;中国&amp;quot;，插入后为&amp;ldquo;中字国&amp;rdquo;； &lt;/p&gt;
&lt;p&gt;26、PadLeft()、PadRight() &lt;br /&gt;
在字串左（或右）加空格或指定char字符，使字串达到指定长度，如： &lt;br /&gt;
&amp;lt;% &lt;br /&gt;
string str1=&amp;quot;中国人&amp;quot;; &lt;br /&gt;
str1=str1.PadLeft(10,'1'); //无第二参数为加空格 &lt;br /&gt;
Response.Write(str1); //结果为&amp;ldquo;1111111中国人&amp;rdquo; ， 字串长为10 &lt;br /&gt;
%&amp;gt; &lt;/p&gt;
&lt;p&gt;27、Remove() &lt;br /&gt;
从指定位置开始删除指定数的字符 &lt;br /&gt;
字串对比一般都用: if(str1==str2){ } , 但还有别的方法&lt;/p&gt; </description></item><item><dc:creator>tony</dc:creator><title>ASP.NET 2.0配合MasterPage的优化CSS </title><link>http://blog.fwwwd.com/tony/archive/140828.aspx</link><pubDate>Tue, 08 Apr 2008 03:34:31 GMT</pubDate><guid>http://blog.fwwwd.com/tony/archive/140828.aspx</guid><wfw:comment>http://blog.fwwwd.com/tony/archive/140828.aspx</wfw:comment><comments>http://blog.fwwwd.com/tony/archive/140828.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss /><trackback:ping>http://blog.fwwwd.com/tony/Trackback.aspx?postID=140828</trackback:ping><description>&lt;p&gt;　　ASP.NET 2.0 中增加了内建的 MasterPage 的支持，这对我们来说是一个很大的便利。然而经过一段时间的使用，我发现 MasterPage 并不是那么完美：嵌套的 MasterPage 不能支持设计时界面，以及下面要提到的Content Page 中增加 CSS 的问题。 &lt;br /&gt;
&lt;br /&gt;
　　通常，在没有 2.0 之前，我们在页面里要增加一个 CSS 引用的语法如下：&lt;br /&gt;
&lt;br /&gt;
＜link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/test.css&amp;quot; /＞&lt;br /&gt;
&lt;br /&gt;
　　原本是很平常的做法。但是在一个 MasterPage 的子页面中，出现了一个很尴尬的局面，就是：我们该把上述代码放到什么位置？&lt;br /&gt;
&lt;br /&gt;
　　因为 MasterPage 的具体内容页面中，只能定义一个个的 ＜asp:Content /＞ 标签的内容。我们按照通常的做法在 aspx 里面无法对页面的 ＜header/＞ 内容进行控制。而这个 ＜link/＞ 标签又必须放在 ＜header/＞ 内。我试验过在 ＜asp:Content /＞ 内部加入这行代码，但是会提示出错的。&lt;br /&gt;
&lt;br /&gt;
　　同时，我们也无法在 MasterPage 的 ＜header/＞ 内部放好一个 ContentPlaceHolder 用于将来放入 CSS 的引用代码。&lt;br /&gt;
&lt;br /&gt;
　　因此我的做法是定义了一个 helper 类如下：&lt;br /&gt;
static public class ControlHelper&lt;br /&gt;
{&lt;br /&gt;
　static public void AddStyleSheet(Page page, string cssPath)&lt;br /&gt;
　{&lt;br /&gt;
　　HtmlLink link = new HtmlLink();&lt;br /&gt;
　　link.Href = cssPath;&lt;br /&gt;
　　link.Attributes[&amp;quot;rel&amp;quot;] = &amp;quot;stylesheet&amp;quot;;&lt;br /&gt;
　　link.Attributes[&amp;quot;type&amp;quot;] = &amp;quot;text/css&amp;quot;;&lt;br /&gt;
　　page.Header.Controls.Add(link);&lt;br /&gt;
　}&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
　　这样，在具体页面，我们就可以通过如下代码添加 CSS 引用：&lt;br /&gt;
&lt;br /&gt;
protected void Page_Load(object sender, EventArgs e)&lt;br /&gt;
{&lt;br /&gt;
　ControlHelper.AddStyleSheet(this.Page, &amp;quot;css/projectPage.css&amp;quot;); &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
　　并且，这个代码支持在具体内容页面，或者一个嵌套的 Master Page 中使用。&lt;br /&gt;
&lt;br /&gt;
　　说到这里也许有人会问，为什么要把 CSS 分开成这样来加载呢？有必要吗？我把所有页面的 CSS 定义到几个公共 CSS 文件里岂不是很好？&lt;br /&gt;
&lt;br /&gt;
　　其实，熟悉 web 标准的 HTML 制作的朋友一定知道，在比较完美的状态下，页面的 html 和用于表现的 CSS 应该彻底分离。而我们基于 web 标准的设计，通常是先做出一个 Master Page 中各个框架 div 的定位代码，以及 header，footer 部分的修饰代码。这些是每个内容页面都要用到的，会放在一个统一的 CSS 里面。其他的具体内容页面，每个页面又会有各自不同的内容的布局，修饰样式，因此我把每个具体页面特定的部分放在它自己的 CSS里。这样就形成了一个按照 Master Page 的实现层次（可嵌套），逐层合并的 CSS 模型。其好处是实现了每个 CSS 文件的职责分离，更容易理解和维护。&lt;/p&gt;
&lt;pre&gt;　　ASP.NET 2.0 中增加了内建的 MasterPage 的支持，这对我们来说是一个很大的便利。然而经过一段时间的使用，我发现 MasterPage 并不是那么完美：嵌套的 MasterPage 不能支持设计时界面，以及下面要提到的Content Page 中增加 CSS 的问题。 &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
　　通常，在没有 2.0 之前，我们在页面里要增加一个 CSS 引用的语法如下：&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
＜link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/test.css&amp;quot; /＞&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
　　原本是很平常的做法。但是在一个 MasterPage 的子页面中，出现了一个很尴尬的局面，就是：我们该把上述代码放到什么位置？&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;br /&amp;gt;
&amp;lt;br /&amp;gt;
　　同时，我们也无法在 MasterPage 的 ＜header/＞ 内部放好一个 ContentPlaceHolder 用于将来放入 CSS 的引用代码。&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
　　因此我的做法是定义了一个 helper 类如下：&amp;lt;br /&amp;gt;
static public class ControlHelper&amp;lt;br /&amp;gt;
{&amp;lt;br /&amp;gt;
　static public void AddStyleSheet(Page page, string cssPath)&amp;lt;br /&amp;gt;
　{&amp;lt;br /&amp;gt;
　　HtmlLink link = new HtmlLink();&amp;lt;br /&amp;gt;
　　link.Href = cssPath;&amp;lt;br /&amp;gt;
　　link.Attributes[&amp;quot;rel&amp;quot;] = &amp;quot;stylesheet&amp;quot;;&amp;lt;br /&amp;gt;
　　link.Attributes[&amp;quot;type&amp;quot;] = &amp;quot;text/css&amp;quot;;&amp;lt;br /&amp;gt;
　　page.Header.Controls.Add(link);&amp;lt;br /&amp;gt;
　}&amp;lt;br /&amp;gt;
} &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
　　这样，在具体页面，我们就可以通过如下代码添加 CSS 引用：&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
protected void Page_Load(object sender, EventArgs e)&amp;lt;br /&amp;gt;
{&amp;lt;br /&amp;gt;
　ControlHelper.AddStyleSheet(this.Page, &amp;quot;css/projectPage.css&amp;quot;); &amp;lt;br /&amp;gt;
} &amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
　　并且，这个代码支持在具体内容页面，或者一个嵌套的 Master Page 中使用。&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
　　说到这里也许有人会问，为什么要把 CSS 分开成这样来加载呢？有必要吗？我把所有页面的 CSS 定义到几个公共 CSS 文件里岂不是很好？&amp;lt;br /&amp;gt;
&amp;lt;br /&amp;gt;
　　其实，熟悉 web 标准的 HTML 制作的朋友一定知道，在比较完美的状态下，页面的 html 和用于表现的 CSS 应该彻底分离。而我们基于 web 标准的设计，通常是先做出一个 Master Page 中各个框架 div 的定位代码，以及 header，footer 部分的修饰代码。这些是每个内容页面都要用到的，会放在一个统一的 CSS 里面。其他的具体内容页面，每个页面又会有各自不同的内容的布局，修饰样式，因此我把每个具体页面特定的部分放在它自己的 CSS里。这样就形成了一个按照 Master Page 的实现层次（可嵌套），逐层合并的 CSS 模型。其好处是实现了每个 CSS 文件的职责分离，更容易理解和维护。 &lt;/pre&gt; </description></item><item><dc:creator>tony</dc:creator><title>Asp.net生成htm静态文件的两种途径</title><link>http://blog.fwwwd.com/tony/archive/140827.aspx</link><pubDate>Tue, 08 Apr 2008 03:32:48 GMT</pubDate><guid>http://blog.fwwwd.com/tony/archive/140827.aspx</guid><wfw:comment>http://blog.fwwwd.com/tony/archive/140827.aspx</wfw:comment><comments>http://blog.fwwwd.com/tony/archive/140827.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss /><trackback:ping>http://blog.fwwwd.com/tony/Trackback.aspx?postID=140827</trackback:ping><description>&lt;p&gt;在asp.net中，如何回车触发指定按钮的事件？ &lt;/p&gt;
&lt;p&gt;假设：&lt;/p&gt;
&lt;p&gt;&amp;lt;asp:TextBox runat=&amp;quot;server&amp;quot; Width=&amp;quot;240px&amp;quot;&amp;gt;&amp;lt;/asp:TextBox&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;lt;asp:Button runat=&amp;quot;server&amp;quot; BorderWidth=&amp;quot;1px&amp;quot; BorderColor=&amp;quot;Purple&amp;quot; BorderStyle=&amp;quot;Solid&amp;quot; Text=&amp;quot;Search Site&amp;quot;&amp;gt;&amp;lt;/asp:Button&amp;gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;解决方法： &lt;/p&gt;
&lt;p&gt;在.aspx页面中添加： &lt;/p&gt;
&lt;p&gt;&amp;lt;SCRIPT LANGUAGE=&amp;quot;javascript&amp;quot;&amp;gt; &lt;/p&gt;
&lt;p&gt;function EnterKeyClick(button) &lt;/p&gt;
&lt;p&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;if (event.keyCode == 13) &lt;/p&gt;
&lt;p&gt;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p&gt;event.keyCode=9; &lt;/p&gt;
&lt;p&gt;event.returnValue = false; &lt;/p&gt;
&lt;p&gt;document.all[button].click(); &lt;/p&gt;
&lt;p&gt;} &lt;/p&gt;
&lt;p&gt;} &lt;/p&gt;
&lt;p&gt;&amp;lt;/SCRIPT&amp;gt; &lt;/p&gt;
&lt;p&gt;在Page_Load事件中添加：&lt;/p&gt;
&lt;p&gt;TextBox1.Attributes.Add(&amp;quot;onkeydown&amp;quot;,&amp;quot;EnterKeyClick('ButtonOK');&amp;quot;); &lt;/p&gt;
&lt;p&gt;关于DATAGRID数据更改时点2次/行号跟不准/失去焦点/丢失e等一系列问题的解决办法：首先把数据连接/dataadater等信息全放到void bindgrid中，其他地方不用if(!ISPOSTBACK)，在PAGELOAD的时候只用个&lt;br /&gt;
&amp;nbsp;&amp;nbsp; if (!IsPostBack)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BindGrid();&lt;br /&gt;
&amp;nbsp;&amp;nbsp; }&lt;br /&gt;
---------------------------------------------------------------------------------&lt;br /&gt;
例如：&amp;nbsp; private void Page_Load(object sender, System.EventArgs e)&lt;br /&gt;
&amp;nbsp; { if (!IsPostBack)&lt;br /&gt;
&amp;nbsp;&amp;nbsp; {BindGrid();}&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; private void DataGrid1_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)&lt;br /&gt;
&amp;nbsp; { DataGrid1.EditItemIndex = e.Item.ItemIndex;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; BindGrid();&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; private void DataGrid1_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)&lt;br /&gt;
&amp;nbsp; { DataGrid1.EditItemIndex = -1;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; BindGrid();&lt;br /&gt;
&amp;nbsp; }&lt;br /&gt;
&amp;nbsp; void BindGrid() &lt;br /&gt;
&amp;nbsp; { oleDbDataAdapter1.Fill(dataSet11);&lt;br /&gt;
&amp;nbsp;&amp;nbsp; DataGrid1.DataBind();&lt;br /&gt;
&amp;nbsp; } &lt;br /&gt;
&lt;/p&gt; </description></item><item><dc:creator>tony</dc:creator><title>收集一些常用的正则表达式</title><link>http://blog.fwwwd.com/tony/archive/140823.aspx</link><pubDate>Tue, 08 Apr 2008 03:06:24 GMT</pubDate><guid>http://blog.fwwwd.com/tony/archive/140823.aspx</guid><wfw:comment>http://blog.fwwwd.com/tony/archive/140823.aspx</wfw:comment><comments>http://blog.fwwwd.com/tony/archive/140823.aspx#Feedback</comments><slash:comments>1151</slash:comments><wfw:commentRss /><trackback:ping>http://blog.fwwwd.com/tony/Trackback.aspx?postID=140823</trackback:ping><description>&lt;p style="TEXT-INDENT: 2em"&gt;关键字：正则表达式 &amp;nbsp;模式匹配 Javascript&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;正则表达式用于字符串处理，表单验证等场合，实用高效，但用到时总是不太把握，以致往往要上网查一番。我将一些常用的表达式收藏在这里，作备忘之用。本贴随时会更新。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;匹配中文字符的正则表达式： [\u4e00-\u9fa5]&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;匹配双字节字符(包括汉字在内)：[^\x00-\xff]&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;应用：计算字符串的长度（一个双字节字符长度计2，ASCII字符计1）&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;String.prototype.len=function(){return this.replace([^\x00-\xff]/g,&amp;quot;aa&amp;quot;).length;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;匹配空行的正则表达式：\n[\s| ]*\r&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;匹配HTML标记的正则表达式：/&amp;lt;(.*)&amp;gt;.*&amp;lt;\/\1&amp;gt;|&amp;lt;(.*) \/&amp;gt;/ &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;匹配首尾空格的正则表达式：(^\s*)|(\s*$)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;String.prototype.trim = function()&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return this.replace(/(^\s*)|(\s*$)/g, &amp;quot;&amp;quot;);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;利用正则表达式分解和转换IP地址：&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;下面是利用正则表达式匹配IP地址，并将IP地址转换成对应数值的Javascript程序：&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;function IP2V(ip)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g&amp;nbsp; //匹配IP地址的正则表达式&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;if(re.test(ip))&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;else&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;throw new Error(&amp;quot;Not a valid IP address!&amp;quot;)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;不过上面的程序如果不用正则表达式，而直接用split函数来分解可能更简单，程序如下：&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;var ip=&amp;quot;10.100.20.168&amp;quot;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;ip=ip.split(&amp;quot;.&amp;quot;)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;alert(&amp;quot;IP值是：&amp;quot;+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;匹配Email地址的正则表达式：\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;匹配网址URL的正则表达式：http://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;amp;=]*)?&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&lt;strike&gt;利用正则表达式去除字串中重复的字符的算法程序&lt;/strike&gt;：[注：此程序不正确，原因见本贴回复]&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;var s=&amp;quot;abacabefgeeii&amp;quot;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;var s1=s.replace(/(.).*\1/g,&amp;quot;$1&amp;quot;)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;var re=new RegExp(&amp;quot;[&amp;quot;+s1+&amp;quot;]&amp;quot;,&amp;quot;g&amp;quot;)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;var s2=s.replace(re,&amp;quot;&amp;quot;) &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;alert(s1+s2)&amp;nbsp; //结果为：abcefgi&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法，最终没有找到，这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符，再以重复的字符建立第二个表达式，取到不重复的字符，两者串连。这个方法对于字符顺序有要求的字符串可能不适用。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;得用正则表达式从URL地址中提取文件名的javascript程序，如下结果为page1&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;s=&amp;quot;http://www.9499.net/page1.htm&amp;quot;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;s=s.replace(/(.*\/){0,}([^\.]+).*/ig,&amp;quot;$2&amp;quot;)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;alert(s)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;利用正则表达式限制网页表单里的文本框输入内容：&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;用正则表达式限制只能输入中文：onkeyup=&amp;quot;value=value.replace(/[^\u4E00-\u9FA5]/g,'')&amp;quot; onbeforepaste=&amp;quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))&amp;quot;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;用正则表达式限制只能输入全角字符：&amp;nbsp;onkeyup=&amp;quot;value=value.replace(/[^\uFF00-\uFFFF]/g,'')&amp;quot; onbeforepaste=&amp;quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))&amp;quot;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;用正则表达式限制只能输入数字：onkeyup=&amp;quot;value=value.replace(/[^\d]/g,'') &amp;quot;onbeforepaste=&amp;quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))&amp;quot;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;用正则表达式限制只能输入数字和英文：onkeyup=&amp;quot;value=value.replace(/[\W]/g,'') &amp;quot;onbeforepaste=&amp;quot;clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))&amp;quot;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;正则表达式，相关链接 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&lt;a href="http://blog.csdn.net/laily/category/19548.aspx"&gt;http://blog.csdn.net/laily/category/19548.aspx&lt;/a&gt; &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&lt;a href="http://blog.csdn.net/laily/archive/2004/06/30/30525.aspx"&gt;http://blog.csdn.net/laily/archive/2004/06/30/30525.aspx&lt;/a&gt; 微软的正则表达式教程（五）：选择/编组和后向引用 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&lt;a href="http://blog.csdn.net/laily/archive/2004/06/30/30522.aspx"&gt;http://blog.csdn.net/laily/archive/2004/06/30/30522.aspx&lt;/a&gt; 微软的正则表达式教程（四）：限定符和定位符 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&lt;a href="http://blog.csdn.net/laily/archive/2004/06/30/30517.aspx"&gt;http://blog.csdn.net/laily/archive/2004/06/30/30517.aspx&lt;/a&gt; 微软的正则表达式教程（三）：字符匹配 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&lt;a href="http://blog.csdn.net/laily/archive/2004/06/30/30514.aspx"&gt;http://blog.csdn.net/laily/archive/2004/06/30/30514.aspx&lt;/a&gt; 微软的正则表达式教程（二）：正则表达式语法和优先权顺序 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&lt;a href="http://blog.csdn.net/laily/archive/2004/06/30/30511.aspx"&gt;http://blog.csdn.net/laily/archive/2004/06/30/30511.aspx&lt;/a&gt; 微软的正则表达式教程（一）：正则表达式简介 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&lt;a href="http://blog.csdn.net/laily/archive/2004/06/30/30360.aspx"&gt;http://blog.csdn.net/laily/archive/2004/06/30/30360.aspx&lt;/a&gt; 小程序大作为：高级查找/替换、正则表达式练习器、Javascript脚本程序调试器 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&lt;a href="http://blog.csdn.net/laily/archive/2004/06/24/25872.aspx"&gt;http://blog.csdn.net/laily/archive/2004/06/24/25872.aspx&lt;/a&gt; 经典正则表达式 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;正则表达式，正规表达式，正则表达式匹配，正则表达式语法，模式匹配，正规表达式匹配 javascript正则表达式 ASP正则表达式 ASP.NET正则表达式 C#正则表达式 JSP正则表达式 PHP正则表达式 VB.NET正则表达式 VBSCript正则表达式编程 delphi正则表达式 jscript &lt;a href="http://www.mscenter.edu.cn/blog/yongsheng/archive/2004/11/19/308.html#878"&gt;#&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.mscenter.edu.cn/blog/Yongsheng"&gt;yongsheng&lt;/a&gt; &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;^(((19)|(20))\d{2})(((((-|/)0?)|0)[1-9])|((-|/)?1[0-2]))((((((-|/)0?)|0)[1-9])|((-|/)?[1-2][0-9]))|((-|/)?3[0-1]))$ &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;2004-1-1格式 &lt;a href="http://www.mscenter.edu.cn/blog/yongsheng/archive/2004/11/19/308.html#898"&gt;#&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.mscenter.edu.cn/blog/Yongsheng"&gt;yongsheng&lt;/a&gt; &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;一、验证类 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;1、数字验证内 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;1.1 整数 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;1.2 大于0的整数 （用于传来的ID的验证) &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;1.3 负整数的验证 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;1.4 整数不能大于iMax &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;1.5 整数不能小于iMin &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;2、时间类 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;2.1 短时间，形如 (13:04:06) &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;2.2 短日期，形如 (2003-12-05) &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;2.3 长时间，形如 (2003-12-05 13:04:06) &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;2.4 只有年和月。形如(2003-05,或者2003-5) &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;2.5 只有小时和分钟,形如(12:03) &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;3、表单类 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;3.1 所有的表单的值都不能为空 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;3.2 多行文本框的值不能为空。 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;3.3 多行文本框的值不能超过sMaxStrleng &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;3.4 多行文本框的值不能少于sMixStrleng &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;3.5 判断单选框是否选择。 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;3.6 判断复选框是否选择. &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;3.7 复选框的全选，多选，全不选，反选 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;3.8 文件上传过程中判断文件类型 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;4、字符类 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;4.1 判断字符全部由a-Z或者是A-Z的字字母组成 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;4.2 判断字符由字母和数字组成。 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;4.3 判断字符由字母和数字，下划线,点号组成.且开头的&lt;a href="http://202.119.73.208/NetEAn/com/test/jsprint.htm"&gt;http://202.119.73.208/NetEAn/com/test/jsprint.htm&lt;/a&gt; &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在每个文本框的onblur事件中调用校验代码,并且每个文本框中onKeyDown事件中写一个enter转tab函数 &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;//回车键换为tab &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;function enterToTab() &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;{ &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;if(event.srcElement.type != 'button' &amp;amp;&amp;amp; event.srcElement.type != 'textarea' &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;amp;&amp;amp; event.keyCode == 13) &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;{ &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;event.keyCode = 9; &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;} &lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;}&amp;nbsp;&lt;/p&gt; </description></item><item><dc:creator>tony</dc:creator><title>在打包程序中自动安装SQL Server数据库</title><link>http://blog.fwwwd.com/tony/archive/140822.aspx</link><pubDate>Tue, 08 Apr 2008 03:04:21 GMT</pubDate><guid>http://blog.fwwwd.com/tony/archive/140822.aspx</guid><wfw:comment>http://blog.fwwwd.com/tony/archive/140822.aspx</wfw:comment><comments>http://blog.fwwwd.com/tony/archive/140822.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss /><trackback:ping>http://blog.fwwwd.com/tony/Trackback.aspx?postID=140822</trackback:ping><description>&lt;p style="TEXT-INDENT: 2em"&gt;1、创建安装项目&amp;ldquo;Setup1&amp;rdquo;安装项目&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在&amp;ldquo;文件&amp;rdquo;菜单上指向&amp;ldquo;添加项目&amp;rdquo;，然后选择&amp;ldquo;新建项目&amp;rdquo;。&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在&amp;ldquo;添加新项目&amp;rdquo;对话框中，选择&amp;ldquo;项目类型&amp;rdquo;窗格中的&amp;ldquo;安装和部署项目&amp;rdquo;，然后选择&amp;ldquo;模板&amp;rdquo;窗格中的&amp;ldquo;安装项目&amp;rdquo;。在&amp;ldquo;名称&amp;rdquo;框中键入&amp;nbsp;&amp;ldquo;setup1&amp;rdquo;。&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;单击&amp;ldquo;确定&amp;rdquo;关闭对话框。&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;项目被添加到解决方案资源管理器中，并且文件系统编辑器打开。&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在&amp;ldquo;属性&amp;rdquo;窗口中，选择&amp;nbsp;ProductName&amp;nbsp;属性，并键入&amp;rdquo;亿万电器成套报价系统&amp;rdquo;。&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;2、在安装项目中创建安装程序类（install.cs）。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;添加创建数据库（InstallDatabase.txt）、删除数据库（DropDatabase.txt）、初始化数据基本数据(InitializeData.txt)脚本文件，将属性&amp;ldquo;生成操作&amp;rdquo;设为&amp;ldquo;嵌入的资源&amp;rdquo;。代码如下：&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System.Collections;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System.ComponentModel;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System.Configuration.Install;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System.Data;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System.Data.SqlClient;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System.IO;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System.Reflection;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System.Text.RegularExpressions;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System.Windows.Forms;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;System.Text;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;using&amp;nbsp;Microsoft.Win32;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;namespace&amp;nbsp;install&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;Installer&amp;nbsp;的摘要说明。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[RunInstaller(true)]&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;class&amp;nbsp;Installer&amp;nbsp;:&amp;nbsp;System.Configuration.Install.Installer&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;必需的设计器变量。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;conStr=&amp;quot;packet&amp;nbsp;size=4096;integrated&amp;nbsp;security=SSPI;&amp;quot;+&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;data&amp;nbsp;source=\&amp;quot;(local)\&amp;quot;;persist&amp;nbsp;security&amp;nbsp;info=False;&amp;quot;+&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;initial&amp;nbsp;catalog=master;connect&amp;nbsp;timeout=300&amp;quot;;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RijndaelCryptography&amp;nbsp;rijndael&amp;nbsp;=&amp;nbsp;new&amp;nbsp;RijndaelCryptography();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;System.ComponentModel.Container&amp;nbsp;components&amp;nbsp;=&amp;nbsp;null;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;Installer()&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;该调用是设计器所必需的。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InitializeComponent();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;TODO:&amp;nbsp;在&amp;nbsp;InitializeComponent&amp;nbsp;调用后添加任何初始化&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;清理所有正在使用的资源。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;override&amp;nbsp;void&amp;nbsp;Dispose(&amp;nbsp;bool&amp;nbsp;disposing&amp;nbsp;)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(&amp;nbsp;disposing&amp;nbsp;)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(components&amp;nbsp;!=&amp;nbsp;null)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;components.Dispose();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.Dispose(&amp;nbsp;disposing&amp;nbsp;);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#region&amp;nbsp;组件设计器生成的代码&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;设计器支持所需的方法&amp;nbsp;-&amp;nbsp;不要使用代码编辑器修改&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;此方法的内容。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;///&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;void&amp;nbsp;InitializeComponent()&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;components&amp;nbsp;=&amp;nbsp;new&amp;nbsp;System.ComponentModel.Container();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endregion&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#region&amp;nbsp;重载自定义安装方法&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;override&amp;nbsp;void&amp;nbsp;OnBeforeInstall(IDictionary&amp;nbsp;savedState)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.OnBeforeInstall&amp;nbsp;(savedState);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;override&amp;nbsp;void&amp;nbsp;Install(IDictionary&amp;nbsp;stateSaver)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.Install&amp;nbsp;(stateSaver);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;databaseServer&amp;nbsp;=&amp;nbsp;Context.Parameters[&amp;quot;server&amp;quot;].ToString();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;userName&amp;nbsp;=&amp;nbsp;Context.Parameters[&amp;quot;user&amp;quot;].ToString();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;userPass&amp;nbsp;=&amp;nbsp;Context.Parameters[&amp;quot;pwd&amp;quot;].ToString();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;targetdir&amp;nbsp;=&amp;nbsp;this.Context.Parameters[&amp;quot;targetdir&amp;quot;].ToString();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;conStr&amp;nbsp;=&amp;nbsp;GetLogin(databaseServer,userName,userPass,&amp;quot;master&amp;quot;);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlConnection&amp;nbsp;&amp;nbsp;sqlCon&amp;nbsp;=&amp;nbsp;new&amp;nbsp;SqlConnection();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sqlCon.ConnectionString&amp;nbsp;=&amp;nbsp;conStr;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sqlCon.Open();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rijndael.GenKey();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rijndael.Encrypt(conStr);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stateSaver.Add(&amp;quot;key&amp;quot;,rijndael.Key);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stateSaver.Add(&amp;quot;IV&amp;quot;,rijndael.IV);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stateSaver.Add(&amp;quot;conStr&amp;quot;,rijndael.Encrypted);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExecuteSql(sqlCon,&amp;quot;InstallDatabase.txt&amp;quot;);&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExecuteSql(sqlCon,&amp;quot;InitializeData.txt&amp;quot;);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(sqlCon.State!=ConnectionState.Closed)sqlCon.Close();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch(SqlException)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MessageBox.Show(&amp;quot;安装失败!\n数据库配置有误,请正确配置信息!&amp;quot;,&amp;quot;错误&amp;quot;,MessageBoxButtons.OK,MessageBoxIcon.Error);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(sqlCon.State!=ConnectionState.Closed)&amp;nbsp;sqlCon.Close();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.Rollback(stateSaver);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;override&amp;nbsp;void&amp;nbsp;OnAfterInstall(IDictionary&amp;nbsp;savedState)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.OnAfterInstall(savedState);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;override&amp;nbsp;void&amp;nbsp;Rollback(IDictionary&amp;nbsp;savedState)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.Rollback&amp;nbsp;(savedState);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;override&amp;nbsp;void&amp;nbsp;Uninstall(IDictionary&amp;nbsp;savedState)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.Uninstall&amp;nbsp;(savedState);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(savedState.Contains(&amp;quot;conStr&amp;quot;))&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;targetdir&amp;nbsp;=&amp;nbsp;this.Context.Parameters[&amp;quot;targetdir&amp;quot;].ToString();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RijndaelCryptography&amp;nbsp;rijndael&amp;nbsp;=&amp;nbsp;new&amp;nbsp;RijndaelCryptography();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rijndael.Key&amp;nbsp;=&amp;nbsp;(byte[])savedState[&amp;quot;key&amp;quot;];&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;rijndael.IV&amp;nbsp;=&amp;nbsp;(byte[])savedState[&amp;quot;IV&amp;quot;];&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;conStr&amp;nbsp;=&amp;nbsp;rijndael.Decrypt((byte[])savedState[&amp;quot;conStr&amp;quot;]);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlConnection&amp;nbsp;sqlCon&amp;nbsp;=&amp;nbsp;new&amp;nbsp;SqlConnection(conStr);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExecuteDrop(sqlCon);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endregion&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#region&amp;nbsp;数据操作方法&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//从资源文件获取中数据执行脚本&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;private&amp;nbsp;static&amp;nbsp;string&amp;nbsp;GetScript(string&amp;nbsp;name)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Assembly&amp;nbsp;asm&amp;nbsp;=&amp;nbsp;Assembly.GetExecutingAssembly();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stream&amp;nbsp;str&amp;nbsp;=&amp;nbsp;asm.GetManifestResourceStream(asm.GetName().Name+&amp;nbsp;&amp;quot;.&amp;quot;&amp;nbsp;+&amp;nbsp;name);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;StreamReader&amp;nbsp;reader&amp;nbsp;=&amp;nbsp;new&amp;nbsp;StreamReader(str,System.Text.Encoding.Default);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Text.StringBuilder&amp;nbsp;output&amp;nbsp;=&amp;nbsp;new&amp;nbsp;System.Text.StringBuilder();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;line&amp;nbsp;=&amp;nbsp;&amp;quot;&amp;quot;;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while((line&amp;nbsp;=&amp;nbsp;reader.ReadLine())!=null)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;output.Append(line&amp;nbsp;+&amp;nbsp;&amp;quot;\n&amp;quot;);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;output.ToString();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//获取数据库登录连接字符串&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;static&amp;nbsp;string&amp;nbsp;GetLogin(string&amp;nbsp;databaseServer,string&amp;nbsp;userName,string&amp;nbsp;userPass,string&amp;nbsp;database)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;&amp;quot;server=&amp;quot;&amp;nbsp;+&amp;nbsp;databaseServer&amp;nbsp;+&amp;nbsp;&amp;quot;;database=&amp;quot;+database+&amp;quot;;User&amp;nbsp;ID=&amp;quot;&amp;nbsp;+&amp;nbsp;userName&amp;nbsp;+&amp;nbsp;&amp;quot;;Password=&amp;quot;&amp;nbsp;+&amp;nbsp;userPass&amp;nbsp;+&amp;quot;;connect&amp;nbsp;timeout=300;&amp;quot;;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//执行数据库脚本方法&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;static&amp;nbsp;void&amp;nbsp;ExecuteSql(SqlConnection&amp;nbsp;sqlCon,string&amp;nbsp;sqlfile)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string[]&amp;nbsp;SqlLine;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Regex&amp;nbsp;regex&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Regex(&amp;quot;^GO&amp;quot;,RegexOptions.IgnoreCase&amp;nbsp;|&amp;nbsp;RegexOptions.Multiline);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;txtSQL&amp;nbsp;=&amp;nbsp;GetScript(sqlfile);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlLine&amp;nbsp;=&amp;nbsp;regex.Split(txtSQL);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(sqlCon.State!=ConnectionState.Closed)sqlCon.Close();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sqlCon.Open();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlCommand&amp;nbsp;cmd&amp;nbsp;=&amp;nbsp;sqlCon.CreateCommand();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.Connection&amp;nbsp;=&amp;nbsp;sqlCon;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;foreach(string&amp;nbsp;line&amp;nbsp;in&amp;nbsp;SqlLine)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(line.Length&amp;gt;0)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText&amp;nbsp;=&amp;nbsp;line;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandType&amp;nbsp;=&amp;nbsp;CommandType.Text;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.ExecuteNonQuery();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch(SqlException&amp;nbsp;ex)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//rollback&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string&amp;nbsp;ss&amp;nbsp;=&amp;nbsp;ex.Message;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ExecuteDrop(sqlCon);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//删除数据库&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;static&amp;nbsp;void&amp;nbsp;ExecuteDrop(SqlConnection&amp;nbsp;sqlCon)&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(sqlCon.State!=ConnectionState.Closed)sqlCon.Close();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sqlCon.Open();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SqlCommand&amp;nbsp;cmd&amp;nbsp;=&amp;nbsp;sqlCon.CreateCommand();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.Connection&amp;nbsp;=&amp;nbsp;sqlCon;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandText&amp;nbsp;=&amp;nbsp;GetScript(&amp;quot;DropDatabase.txt&amp;quot;);&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.CommandType&amp;nbsp;=&amp;nbsp;CommandType.Text;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cmd.ExecuteNonQuery();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sqlCon.Close();&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#endregion&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;}&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;单击&amp;ldquo;生成&amp;rdquo;菜单下&amp;ldquo;生成解决方案&amp;rdquo;，生成install.dll安装类文件。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;3、将&amp;ldquo;主程序&amp;rdquo;项目的输出添加到部署项目中&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在&amp;ldquo;文件系统编辑器&amp;rdquo;中，选择&amp;ldquo;应用程序文件夹&amp;rdquo;，单击右键指向&amp;ldquo;添加&amp;rdquo;，添加&amp;ldquo;项目输出&amp;rdquo;。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在&amp;ldquo;添加项目输出组&amp;rdquo;对话框中，选择&amp;ldquo;项目&amp;rdquo;下拉表框中选择你的主安装程序类，如上面的&amp;ldquo;install&amp;rdquo;。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;从列表框中选择&amp;ldquo;主输出&amp;rdquo;组，然后单击&amp;ldquo;确定&amp;rdquo;关闭。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;4、创建自定义安装对话框&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在解决方案资源管理器中选择安装项目&amp;ldquo;Setup1&amp;rdquo;项目，在&amp;ldquo;视图&amp;rdquo;菜单上指向&amp;ldquo;编辑器&amp;rdquo;，然后选择&amp;ldquo;用户界面&amp;rdquo;。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在用户界面编辑器具中，选择&amp;ldquo;安装&amp;rdquo;下的&amp;ldquo;启动&amp;rdquo;节点。在&amp;ldquo;操作&amp;rdquo;菜单上，选择&amp;ldquo;添加对话框&amp;rdquo;。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在&amp;ldquo;添加对话框&amp;rdquo;中选择&amp;ldquo;文本框（A）&amp;rdquo;对话框，然后单击&amp;ldquo;确定&amp;rdquo;关闭对话框。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在&amp;ldquo;操作&amp;rdquo;菜单上，选择&amp;ldquo;上移&amp;rdquo;，重复此步骤，移到&amp;ldquo;安装文件夹&amp;rdquo;上。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;在&amp;ldquo;文本框（A）&amp;rdquo;上单击&amp;ldquo;属性窗口&amp;rdquo;，设置如下图所示：&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;img alt="" border="0" src="http://www.cnblogs.com/images/cnblogs_com/feiweiwei/ww.gif" /&gt;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;5、建自定义操作&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在解决方案资源管理器中选择安装项目&amp;ldquo;Setup1&amp;rdquo;项目，在&amp;ldquo;视图&amp;rdquo;菜单上指向&amp;ldquo;编辑器&amp;rdquo;，然后选择&amp;ldquo;自定义操作&amp;rdquo;。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在&amp;ldquo;自定义操作编辑器&amp;rdquo;中选择&amp;ldquo;安装&amp;rdquo;节点。单击右键&amp;ldquo;添加自定义操作&amp;rdquo;，在选择项目中的项中选择&amp;ldquo;应用程序文件夹&amp;rdquo;，选择&amp;ldquo;主输出来自install(活动)&amp;rdquo;。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;在&amp;ldquo;属性窗口&amp;rdquo;中选择&amp;ldquo;CustomActionData&amp;rdquo;属性并键入&amp;ldquo;/server=[EDITA1]&amp;nbsp;/user=[EDITA2]&amp;nbsp;/pwd=[EDITA3]&amp;nbsp;&amp;nbsp;/targetdir=&amp;quot;[TARGETDIR]\&amp;quot;&amp;rdquo;。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;附:/targetdir=&amp;quot;[TARGETDIR]\&amp;quot;是安装后的目标路径，为了在install类中获得安装后的路径，我们设置此参数。&lt;/p&gt;
&lt;p style="TEXT-INDENT: 2em"&gt;单击&amp;ldquo;生成&amp;rdquo;菜单下的&amp;ldquo;生成解决方案&amp;rdquo;，编译安装项目。&lt;/p&gt; </description></item></channel></rss>