<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">.NET新手区_博客园|网站分类</title><subtitle type="text">代码改变世界</subtitle><id>http://feed.cnblogs.com/blog/sitecateogry/beginner/rss</id><updated>2012-02-23T21:09:09Z</updated><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/cate/beginner/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/sitecateogry/beginner/rss"/><entry><id>http://www.cnblogs.com/Jaryleely/archive/2012/02/23/2365846.html</id><title type="text">AjaxPro使用中遇到的问题之一</title><summary type="text"/><published>2012-02-23T14:54:00Z</published><updated>2012-02-23T14:54:00Z</updated><author><name>Jaryleely</name><uri>http://www.cnblogs.com/Jaryleely/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Jaryleely/archive/2012/02/23/2365846.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Jaryleely/archive/2012/02/23/2365846.html"/><content type="html">&lt;p&gt;今天将系统发布到服务器上，发现AjaxPro注册的方法老是提示类似“……”未定义。在开发机本地倒是正常的，传到服务器就不行了。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;网上搜了很多资料也没找到解答，是这个帖子给了我一点灵感：&lt;a href="http://topic.csdn.net/u/20100416/14/0fa8dfd9-fe11-44bd-9347-77c02118ebcc.html"&gt;http://topic.csdn.net/u/20100416/14/0fa8dfd9-fe11-44bd-9347-77c02118ebcc.html&lt;/a&gt;。&lt;/p&gt;  &lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;   &lt;p&gt;根据5#的提示，我检查了服务器上的IIS运行环境和本地的IIS运行环境，发现在“处理程序映射”这个环节上的确有所不同。重点是在处理“*.ashx“这个映射有所不同，服务器上只有Framework2.0的ISAPI映射。而没有4.0的映射（网站是发布版本是基于4.0框架的）。最后添加了4.0的isapi映射，就解决了 未定义的这个问题。&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;调用AjaxPro的页面输出：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jaryleely/201202/201202232253308263.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="3ajax" border="0" alt="3ajax" src="http://images.cnblogs.com/cnblogs_com/Jaryleely/201202/201202232253341214.jpg" width="587" height="93" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;服务器上配置后如下：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jaryleely/201202/201202232253372770.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="1ajax" border="0" alt="1ajax" src="http://images.cnblogs.com/cnblogs_com/Jaryleely/201202/201202232253406061.jpg" width="706" height="65" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;脚本映射路径：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/Jaryleely/201202/201202232253453090.jpg"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2ajax" border="0" alt="2ajax" src="http://images.cnblogs.com/cnblogs_com/Jaryleely/201202/201202232253485235.jpg" width="408" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;经过一番配置，总算解决了这个该死的”未定义“。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Jaryleely/aggbug/2365846.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Jaryleely/archive/2012/02/23/2365846.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/Steven-Love-Arlene/archive/2012/02/23/2365330.html</id><title type="text">子页面应用母版页图片无法显示</title><summary type="text"/><published>2012-02-23T10:56:00Z</published><updated>2012-02-23T10:56:00Z</updated><author><name>Steven-Love-Arlene</name><uri>http://www.cnblogs.com/Steven-Love-Arlene/</uri></author><link rel="alternate" href="http://www.cnblogs.com/Steven-Love-Arlene/archive/2012/02/23/2365330.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/Steven-Love-Arlene/archive/2012/02/23/2365330.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 16px;"&gt;　　今天在做.Net页面时，应用到了母版页，我的母版页在项目的根目录下面，但是我要应用母版页的子页面和母版页不在同一个目录下面。这样导致我在子文件夹里面引用概母版页的时候，原来位于母版页的图片无法显示。首先我在考虑的情况时可能是图片的连接路径不对，导致图片无法显示，我就想这里可能要用虚拟路径，我就在图片路径前面加了&amp;ldquo;/&amp;rdquo;,这样以后发现还是达不到预期的效果。这时仔细的观察母版页发现在母版页的布局中没有表单存在，于是乎我就在&amp;lt;body&amp;gt;.......&amp;lt;/body&amp;gt;中果断加上了&amp;lt;form&amp;gt;......&amp;lt;/form&amp;gt;。当然图片也就顺利的显示出来了，问题解决。其实后来查阅资料知道：&amp;ldquo;表单是Web中实现交互的重要方法，用于收集用户信息并提交给服务器。表单用&amp;lt;form&amp;gt;标签来表示。&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp; 格式：&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;form action="" method=""&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp; &amp;hellip;&amp;hellip;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/form&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp; 注意：一个页面最多一个表单&amp;rdquo;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;这就是问题的关键所在。那么该问题的解决方法：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;1.在母版页中加上&amp;nbsp;&amp;lt;form action="" method=""&amp;gt;&amp;hellip;&amp;hellip;&amp;lt;/form&amp;gt;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 16px;"&gt;2.在母版页的图片链接路径前加上&amp;ldquo;/&amp;rdquo;。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/Steven-Love-Arlene/aggbug/2365330.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/Steven-Love-Arlene/archive/2012/02/23/2365330.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dzj007/archive/2012/02/22/2363797.html</id><title type="text">电子商务网站必备-前台页面特效--产品图片展示效果图</title><summary type="text"/><published>2012-02-22T13:02:00Z</published><updated>2012-02-22T13:02:00Z</updated><author><name>阿杜008</name><uri>http://www.cnblogs.com/dzj007/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dzj007/archive/2012/02/22/2363797.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dzj007/archive/2012/02/22/2363797.html"/><content type="html">&lt;p&gt;每个电子商务网站必须具备的产品展示图。源代码由网络搜集而来。&lt;/p&gt;&#xD;
&lt;p&gt;不多说了，下面是效果图。&lt;/p&gt;&#xD;
&lt;p&gt;-------------效果图----------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/347510/2012022220442764.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;源代码下载链接&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://files.cnblogs.com/dzj007/%E4%BA%A7%E5%93%81%E5%9B%BE%E7%89%87%E5%B1%95%E7%A4%BA%E6%95%88%E6%9E%9C.rar"&gt;http://files.cnblogs.com/dzj007/%E4%BA%A7%E5%93%81%E5%9B%BE%E7%89%87%E5%B1%95%E7%A4%BA%E6%95%88%E6%9E%9C.rar&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/dzj007/aggbug/2363797.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dzj007/archive/2012/02/22/2363797.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/shunyao8210/archive/2012/02/22/2363256.html</id><title type="text">删除SVN遗留的无用文件</title><summary type="text"/><published>2012-02-22T07:44:00Z</published><updated>2012-02-22T07:44:00Z</updated><author><name>IT爱好者</name><uri>http://www.cnblogs.com/shunyao8210/</uri></author><link rel="alternate" href="http://www.cnblogs.com/shunyao8210/archive/2012/02/22/2363256.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/shunyao8210/archive/2012/02/22/2363256.html"/><content type="html">&lt;span  style="word-spacing: 0px; font: 14px/26px Arial; text-transform: none; color: rgb(51,51,51); text-indent: 0px; white-space: normal; letter-spacing: normal; background-color: rgb(255,255,255); text-align: left; orphans: 2; widows: 2; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"&gt;要删除SVN工作目录下的.svn目录，而SVN Clinet 本身是不带清除.svn文件的命令的。所以只能自己写脚本来递归删除.svn文件夹：&lt;br /&gt;1、windows 平台下&lt;br /&gt;常用的作法是用系统（Windows）自带的搜索功能，搜索出所有.svn目录（需要在&amp;#8220;其他高级选项&amp;#8221;中选中&amp;#8220;搜索隐藏的文件和文件夹&amp;#8221;），然后全选删除。这当然不是高效的作法，谁能忍受一遍又一遍重复这种纯体力的劳动？&lt;br /&gt;Jon Galloway提供了一段注册表代码，可以将&amp;#8221;Delete SVN Folders&amp;#8221;命名增加到资源管理器的右键上，这样，鼠标点两下就能把选中目录下的所有.svn目录干掉了。Works just great!&lt;br /&gt;&lt;br /&gt;代码为： &#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;Windows&amp;nbsp;Registry&amp;nbsp;Editor&amp;nbsp;Version&amp;nbsp;&lt;span style="color: #800080"&gt;5.00&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]&lt;br /&gt;@=&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Delete&amp;nbsp;SVN&amp;nbsp;Folders&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]&lt;br /&gt;@=&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;cmd.exe&amp;nbsp;/c&amp;nbsp;\"TITLE&amp;nbsp;Removing&amp;nbsp;SVN&amp;nbsp;Folders&amp;nbsp;in&amp;nbsp;%1&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;COLOR&amp;nbsp;9A&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;FOR&amp;nbsp;/r&amp;nbsp;\"%1\"&amp;nbsp;%%f&amp;nbsp;IN&amp;nbsp;(.svn)&amp;nbsp;DO&amp;nbsp;RD&amp;nbsp;/s&amp;nbsp;/q&amp;nbsp;\"%%f\"&amp;nbsp;\"&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;将这段代码保存为一个.reg文件，双击确认导入注册表即可。&lt;/p&gt;&#xD;
&lt;p&gt;为方便下载，我已经做好了这个reg文件，大家可以下载后直接使用。&lt;a href="http://files.cnblogs.com/shunyao8210/Delete_SVN_Folders.rar" target="_blank"&gt;点此下载&lt;/a&gt;&lt;br /&gt;2、Linux平台下： &lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;find&amp;nbsp;.&amp;nbsp;-type&amp;nbsp;d&amp;nbsp;-name&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;.svn&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;|xargs&amp;nbsp;rm&amp;nbsp;-rf&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;img src="http://www.cnblogs.com/shunyao8210/aggbug/2363256.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/shunyao8210/archive/2012/02/22/2363256.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zyhblogs/archive/2012/02/22/2363147.html</id><title type="text">C# 激活正在运行的程序</title><summary type="text"/><published>2012-02-22T06:49:00Z</published><updated>2012-02-22T06:49:00Z</updated><author><name>水月无痕</name><uri>http://www.cnblogs.com/zyhblogs/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zyhblogs/archive/2012/02/22/2363147.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zyhblogs/archive/2012/02/22/2363147.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Program&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;给这个程序主窗体起个名字&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; strProcessName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Form1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; strAppName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;WindowsFormsApplication1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; hWnd = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;随便个数字，用来做判断&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;const&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; SW_SHOW = &lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;指定是那个DLL，或者进程&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        [DllImport(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;user32.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, EntryPoint = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ShowWindow&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)]&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; ShowWindow(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; hwnd, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; nCmdShow);&lt;br /&gt;&lt;br /&gt;        [DllImport(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;user32&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)]&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; GetWindowText(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; hWnd, StringBuilder lpString, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; nMaxCount);&lt;br /&gt;&lt;br /&gt;        [DllImport(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;user32&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)]&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;extern&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; EnumWindows(CallBack x, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; y);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; CallBack(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; hWnd, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; lParam);&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 应用程序的主入口点。&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        [STAThread]&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Main()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;进程数组&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Process[] ps = Process.GetProcessesByName(strAppName);&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;声明个委托&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            CallBack myCallBack = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; CallBack(FineAppWindow);&lt;br /&gt;            EnumWindows(myCallBack, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;);&lt;br /&gt;            &lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ps.Length &amp;gt; &lt;span style="color: #800080;"&gt;1&lt;/span&gt;)&lt;br /&gt;            {&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;如果进程里面有这个&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                ShowWindow(hWnd, SW_SHOW);&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                Application.EnableVisualStyles();&lt;br /&gt;                Application.SetCompatibleTextRenderingDefault(&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;br /&gt;                Application.Run(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Form1());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; FineAppWindow(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; hwnd, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; lParam)&lt;br /&gt;        {&lt;br /&gt;            StringBuilder sb = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StringBuilder(&lt;span style="color: #800080;"&gt;200&lt;/span&gt;);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; n = GetWindowText(hwnd, sb, &lt;span style="color: #800080;"&gt;200&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (sb.ToString() == strProcessName)&lt;br /&gt;            {&lt;br /&gt;                hWnd = hwnd;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;调用的是系统的一个类库，代码也是在网上找到 就直接贴上去了 收藏，希望作者见了勿怪！非原创&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zyhblogs/aggbug/2363147.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zyhblogs/archive/2012/02/22/2363147.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zlblog/archive/2012/02/22/2362925.html</id><title type="text">客户端存在潜在危险request.from</title><summary type="text"/><published>2012-02-22T04:44:00Z</published><updated>2012-02-22T04:44:00Z</updated><author><name>tanker</name><uri>http://www.cnblogs.com/zlblog/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zlblog/archive/2012/02/22/2362925.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zlblog/archive/2012/02/22/2362925.html"/><content type="html">&lt;div id="cnblogs_post_body"&gt;&#xD;
&lt;p&gt;&lt;font color="#1a8bc8"&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;解决方案：在WEB.CONFIG文件中添加配置文件&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;system.web&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;pages validateRequest="false"/&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;/system.web&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/zlblog/aggbug/2362925.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zlblog/archive/2012/02/22/2362925.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/babycool/archive/2012/02/22/2362725.html</id><title type="text">关于一道.NET程序员面试题的遐想</title><summary type="text"/><published>2012-02-22T02:48:00Z</published><updated>2012-02-22T02:48:00Z</updated><author><name>酷小孩</name><uri>http://www.cnblogs.com/babycool/</uri></author><link rel="alternate" href="http://www.cnblogs.com/babycool/archive/2012/02/22/2362725.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/babycool/archive/2012/02/22/2362725.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 12pt"&gt; 前几天，同学问了我一道程序员的面试题，题目是 &amp;#8220;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt"&gt;统计用户输入的一串数字中每个数字出现的次数&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;&amp;#8221;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;当时看到这个题目，我的第一想法就是：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;1.先判断用户输入的是否是数字，用if-else语句来判断；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;2.将用户输入的数字字符串转换成char数组；&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;3.用for循环遍历每个字符，根据switch-case语句来逐一判断。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;4.再建立一个int数组来接收判断后的结果，最后for循环输出。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;该方法的解题代码如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('d44b2392-2f90-4054-93be-8afa6e4d5e73')"&gt;&lt;img style="display: none" id="code_img_opened_d44b2392-2f90-4054-93be-8afa6e4d5e73"  onclick="cnblogs_code_hide('d44b2392-2f90-4054-93be-8afa6e4d5e73',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&#xD;
&lt;div id="cnblogs_code_open_d44b2392-2f90-4054-93be-8afa6e4d5e73" &gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&amp;nbsp;Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;Main(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[]&amp;nbsp;args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;计算用户输入的一串数字中每个数字出现的次数&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&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;Console.WriteLine(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;请输入一串数字&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;str&amp;nbsp;=&amp;nbsp;Console.ReadLine();&lt;/div&gt;&#xD;
&lt;div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;将字符串转换为字符数组&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;[]&amp;nbsp;chnum&amp;nbsp;=&amp;nbsp;str.ToCharArray();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;#region&lt;/span&gt;&amp;nbsp;判断用户输入的是否是数字&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;chnum.Length;&amp;nbsp;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;判断每一个字符是否是数字&amp;nbsp;&amp;nbsp;通过char的方法来判断&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&amp;nbsp;(!&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;.IsNumber(chnum[i]))&lt;br /&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;{&lt;br /&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;Console.WriteLine(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;您的输入有误，请输入数字&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.ReadKey();&lt;br /&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;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;br /&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;}&lt;br /&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;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;定义一个新的数组来保存计数&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;[]&amp;nbsp;count=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;[&lt;span style="color: #800080"&gt;9&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;#region&lt;/span&gt;&amp;nbsp;for循环遍历&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;for循环遍历&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;chnum.Length;&amp;nbsp;i++)&lt;br /&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;br /&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;&lt;span style="color: #0000ff"&gt;switch&lt;/span&gt;&amp;nbsp;(chnum[i])&lt;br /&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;{&lt;br /&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;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;1&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;:&lt;br /&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;count[&lt;span style="color: #800080"&gt;0&lt;/span&gt;]++;&lt;br /&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;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br /&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;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;2&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;:&lt;br /&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;count[&lt;span style="color: #800080"&gt;1&lt;/span&gt;]++;&lt;br /&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;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br /&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;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;3&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;:&lt;br /&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;count[&lt;span style="color: #800080"&gt;2&lt;/span&gt;]++;&lt;br /&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;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br /&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;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;4&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;:&lt;br /&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;count[&lt;span style="color: #800080"&gt;3&lt;/span&gt;]++;&lt;br /&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;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br /&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;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;5&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;:&lt;br /&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;count[&lt;span style="color: #800080"&gt;4&lt;/span&gt;]++;&lt;br /&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;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br /&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;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;6&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;:&lt;br /&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;count[&lt;span style="color: #800080"&gt;5&lt;/span&gt;]++;&lt;br /&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;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br /&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;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;7&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;:&lt;br /&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;count[&lt;span style="color: #800080"&gt;6&lt;/span&gt;]++;&lt;br /&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;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br /&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;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;8&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;:&lt;br /&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;count[&lt;span style="color: #800080"&gt;7&lt;/span&gt;]++;&lt;br /&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;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br /&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;&lt;span style="color: #0000ff"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;9&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;:&lt;br /&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;count[&lt;span style="color: #800080"&gt;8&lt;/span&gt;]++;&lt;br /&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;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;br /&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;}&lt;br /&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;#region&lt;/span&gt;&amp;nbsp;循环输出&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;count.Length;&amp;nbsp;i++)&lt;br /&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;br /&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;Console.WriteLine(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;含有的数字&amp;nbsp;{0}&amp;nbsp;的个数是：{1}&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;i&amp;nbsp;+&amp;nbsp;&lt;span style="color: #800080"&gt;1&lt;/span&gt;,&amp;nbsp;count[i]);&lt;br /&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;#endregion&lt;/span&gt;&lt;br /&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;Console.ReadKey();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;运行效果如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/babycool/统计数字个数/12.jpg" width="204" height="95" /&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/babycool/统计数字个数/13.jpg" width="308" height="213" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;不过，这种方法有&lt;/span&gt;&lt;span style="color: red; font-size: 12pt"&gt;两个缺点&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;就是，如果用户输入的不是数字（如字母或符号等），程序会提示错误，并退出；再者，也会统计出用户没有输入过的数字的个数为0个，如果某些时候不想知道没有输入的数字的个数，这种解法很不合适，而且代码修改起来也很复杂。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;新解法：&amp;nbsp; &lt;/span&gt;&lt;span style="color: red; font-size: 12pt"&gt;泛型集合&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;碰巧这几天接触了泛型集合，没想到用Dictionary来解这道题是那么的简单。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;代码如下：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('c4b94759-57ba-404e-87da-f64acbb9cbe6')"&gt;&lt;img style="display: none" id="code_img_opened_c4b94759-57ba-404e-87da-f64acbb9cbe6"  onclick="cnblogs_code_hide('c4b94759-57ba-404e-87da-f64acbb9cbe6',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&#xD;
&lt;div id="cnblogs_code_open_c4b94759-57ba-404e-87da-f64acbb9cbe6" &gt;&#xD;
&lt;div&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&amp;nbsp;Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;Main(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[]&amp;nbsp;args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&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;Console.WriteLine(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;请输入数字&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;numbers&amp;nbsp;=&amp;nbsp;Console.ReadLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;创建集合&amp;nbsp;&amp;nbsp;键&amp;nbsp;为数字&amp;nbsp;char类型&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;值为每个数字出现的次数&amp;nbsp;int类型&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dictionary&amp;lt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;&amp;nbsp;dict&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&amp;nbsp;Dictionary&amp;lt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;将数字字符串转换为单个字符数组&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;[]&amp;nbsp;chs&amp;nbsp;=&amp;nbsp;numbers.ToCharArray();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;chs.Length;&amp;nbsp;i++)&lt;br /&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;br /&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;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;判断是否是数字&amp;nbsp;用到char的isnumber方法&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;.IsNumber(chs[i]))&lt;br /&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;{&lt;br /&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;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;如果键中已含有该数字,则将其对应的值+1，否则不存在，加入键中&amp;nbsp;值为1&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&amp;nbsp;(!dict.ContainsKey(chs[i]))&lt;br /&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;{&lt;br /&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;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;将每个数字字符作为键&amp;nbsp;存入&amp;nbsp;键值对中，&amp;nbsp;值初始为1&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dict.Add(chs[i],&amp;nbsp;&lt;span style="color: #800080"&gt;1&lt;/span&gt;);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&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;}&lt;br /&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;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;br /&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;{&lt;br /&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;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;值+1&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dict[chs[i]]++;&lt;br /&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;}&lt;br /&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;}&lt;br /&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;循环遍历键值对输出&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&amp;nbsp;(KeyValuePair&amp;lt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;,&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;&amp;nbsp;item&amp;nbsp;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&amp;nbsp;dict)&lt;br /&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;br /&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;Console.WriteLine(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;数字：{0}出现了{1}次。&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,item.Key,item.Value);&lt;br /&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;br /&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;Console.ReadKey();&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;可见，简单的几行代码就解决了。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/babycool/统计数字个数/14.jpg" width="247" longdesc="" height="175" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;而且，这种解法完全解决了上面遇到的两个问题。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;我觉得这个应该就是面试官想要的效果吧。（汗。。。不知道我那位同学的面试情况怎么样。。。）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;写到这里，我又想到了见过的另一道面试题：&amp;#8220;&lt;/span&gt;&lt;span style="color: red; font-size: 12pt"&gt;计算字符串中每种字符出现的次数&lt;/span&gt;&lt;span style="font-size: 12pt"&gt;&amp;#8221;。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;这要用我开始想到的那种思路来解得话，我岂不是要写26个case语句来判断吗，汗。。。。不知道面试官要是看到这么多代码岂不是会当场走人。。。显然这不是最好的解题办法。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;还是用泛型集合来解：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('a08a0dce-d6c6-45ad-8544-3b07ec69b8dd')"&gt;&lt;img style="display: none" id="code_img_opened_a08a0dce-d6c6-45ad-8544-3b07ec69b8dd"  onclick="cnblogs_code_hide('a08a0dce-d6c6-45ad-8544-3b07ec69b8dd',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&#xD;
&lt;div id="cnblogs_code_open_a08a0dce-d6c6-45ad-8544-3b07ec69b8dd" &gt;&#xD;
&lt;div&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&amp;nbsp;Program&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;Main(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[]&amp;nbsp;args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;计算字符串中每种字符出现的次数（面试题）。&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;#8220;Welcome&amp;nbsp;to&amp;nbsp;China&amp;nbsp;,&amp;nbsp;beijing&amp;#8221;，&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;不区分大小写，打印&amp;#8220;W2&amp;#8221;&amp;#8220;e&amp;nbsp;2&amp;#8221;&amp;#8220;o&amp;nbsp;3&amp;#8221;&amp;#8230;&amp;#8230;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;/*&lt;/span&gt;&lt;span style="color: #008000"&gt;思路：1&amp;nbsp;将字符串都转换为小写形式，否则&amp;nbsp;大小写会算各一个&lt;br /&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;2&amp;nbsp;以字符为键&amp;nbsp;每个字符出现的次数为值&amp;nbsp;&amp;nbsp;建立&amp;nbsp;&amp;nbsp;Dictionary&amp;lt;char,int&amp;gt;泛型集合&lt;br /&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;3&amp;nbsp;将字符串转换为字符数组&lt;br /&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;4&amp;nbsp;循环遍历每个字符，加入集合中作为键，其对应的值初始为1&lt;br /&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;5&amp;nbsp;在加入键之前做一个判断，由于集合中的键不能重复，所以判断如果键中已经还有该字符&lt;br /&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;则不再加入该键，只把他的值+1&lt;br /&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;6&amp;nbsp;去除字符串中的空格&amp;nbsp;&amp;nbsp;&amp;nbsp;char.isLetter()&amp;nbsp;&amp;nbsp;如果是字母，进行操作5&amp;nbsp;&lt;br /&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;7&amp;nbsp;总结：主要是泛型集合的应用&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;例句：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;string&amp;nbsp;sentences="Welcome&amp;nbsp;to&amp;nbsp;China&amp;nbsp;,&amp;nbsp;beijing";&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;请输入一段字母&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&amp;nbsp;sentences&amp;nbsp;=&amp;nbsp;Console.ReadLine();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;将字符串都转换为小写形式&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sentences&amp;nbsp;=&amp;nbsp;sentences.ToLower();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;建立泛型集合&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dictionary&amp;lt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;,&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;&amp;nbsp;dict=&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&amp;nbsp;Dictionary&amp;lt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;,&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;将字符串变成字符数组&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;[]&amp;nbsp;chs=sentences.ToCharArray();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;遍历每一个字符&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;0&lt;/span&gt;;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;chs.Length;&amp;nbsp;i++)&lt;br /&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;br /&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;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;通过char的方法判断是否为字母，如果为字母，则进行下面的操作，&lt;br /&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;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;否则不操作&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;.IsLetter(chs[i]))&lt;br /&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;{&lt;br /&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;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;如果不包含该键，则加入集合中&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&amp;nbsp;(!dict.ContainsKey(chs[i]))&lt;br /&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;{&lt;br /&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;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;将每个字符加入集合中对应键，其值初始为1&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dict.Add(chs[i],&amp;nbsp;&lt;span style="color: #800080"&gt;1&lt;/span&gt;);&lt;br /&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;}&lt;br /&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;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;br /&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;{&lt;br /&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;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;否则，包含该键，只将其对应的值+1即可&amp;nbsp;&amp;nbsp;&amp;nbsp;值的类型为int&lt;br /&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;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;dict[chs[i]]&amp;nbsp;=&amp;nbsp;dict[chs[i]]&amp;nbsp;+&amp;nbsp;1;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dict[chs[i]]++;&lt;br /&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;}&lt;br /&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;}&lt;br /&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;br /&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;br /&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;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;循环遍历输出集合中的键&amp;nbsp;值&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&amp;nbsp;(KeyValuePair&amp;lt;&lt;span style="color: #0000ff"&gt;char&lt;/span&gt;,&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&amp;gt;&amp;nbsp;kv&amp;nbsp;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&amp;nbsp;dict)&lt;br /&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;br /&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;Console.WriteLine(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;字母：{0}出现了{1}次。&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,kv.Key,kv.Value);&lt;br /&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;br /&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;Console.ReadKey();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;同样，代码很简单：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/babycool/统计数字个数/15.jpg" width="320" longdesc="" height="205" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;这时，我又突发奇想想到了另一种情况：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 用户输入一串字母和数字的混合字符串如&amp;#8220;ddeieiei4954jjfjdji383ddjeuut3003k&amp;#8221;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 统计出每个数字或字母出现的次数，且数字在前，字母在后 ，数字和字母内没有顺序要求&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 12pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如 数字 4&amp;nbsp;&amp;nbsp; 出现了 2次&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 12pt"&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; 数字 3&amp;nbsp;&amp;nbsp; 出现了 4次&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 12pt"&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; .......&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 12pt"&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; ........&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 12pt"&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;字母 d&amp;nbsp;&amp;nbsp; 出现了 5次&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 12pt"&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;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;当然，最简单的还是用泛型集合来解了。。。。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;最后来个总结吧：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;个人认为，遇到一个新的问题的时候，关键是思路，把思路一步一步理顺了，就像我们老师说的那样，知道你要干什么，想好怎样去做，最后再去写代码。不要一上来就敲代码，思路都没搞清楚呢，最后肯定是问题多多。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;希望这篇文章可以给像我这样正在找工作的应届生一些小小的帮助吧！&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;（突然觉得在大学里学的那些知识都太简单了，而且太深了也不讲。找工作时真的很无奈啊！！！）&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 12pt"&gt;如有写的不好的地方还请各位多多指教啊！&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/babycool/aggbug/2362725.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/babycool/archive/2012/02/22/2362725.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dzj007/archive/2012/02/21/2362040.html</id><title type="text">页面前台-用DIV+CSS让footer始终在底部</title><summary type="text"/><published>2012-02-21T14:17:00Z</published><updated>2012-02-21T14:17:00Z</updated><author><name>阿杜008</name><uri>http://www.cnblogs.com/dzj007/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dzj007/archive/2012/02/21/2362040.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dzj007/archive/2012/02/21/2362040.html"/><content type="html">&lt;p&gt;css如何定位网站的footer（用DIV+CSS让footer始终在底部）&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 平时拿CSS布局都是一些内容比较多的网站,前两天用CSS+DIV弄了个内容少的页面,发现了一个小问题,可能大家都会遇到,那就是网站FOOTER的定位,如果内容比较少的话,页面的FOOTER就会随着内容的减少跑到上面去,不是乖乖的在下面呆着,害得我研究了半天。&lt;/p&gt;&#xD;
&lt;p&gt;对于变量的内容，使得footer始终存在底部。并且整合了列表选项。使得页面排版更加工整。&lt;/p&gt;&#xD;
&lt;p&gt;一个典型的固定宽度的布局，该布局由顶部的一个标题，一个三列内容的区域（主内容列，每侧有一个工具条），和页面底部的一个页脚所组成。&lt;/p&gt;&#xD;
&lt;p&gt;--------------最后效果如下---------------------------------------&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/347510/2012022122123216.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;-----------以下是XHTML代码------------&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; &amp;lt;body&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; &amp;lt;div id=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;content&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; &amp;lt;div id=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;head&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; &amp;lt;h1&amp;gt;hello&amp;lt;/h1&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; &amp;lt;div id=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;side1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt;   &amp;lt;h3&amp;gt;side1&amp;lt;/h3&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt;         &amp;lt;ul&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt;             &amp;lt;li&amp;gt;Let me not to the marriage of &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt; minds&amp;lt;/li&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;             &amp;lt;li&amp;gt;Admit impediments; love &lt;span style="color: #0000ff;"&gt;is&lt;/span&gt; not love&amp;lt;/li&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;             &amp;lt;li&amp;gt;Which alters when it alteration finds&amp;lt;/li&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;             &amp;lt;li&amp;gt;Or bends with the remover to remove&amp;lt;/li&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;             &amp;lt;li&amp;gt;Oh, no, it &lt;span style="color: #0000ff;"&gt;is&lt;/span&gt; an ever &lt;span style="color: #0000ff;"&gt;fixed&lt;/span&gt; mark&amp;lt;/li&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;         &amp;lt;/ul&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; &amp;lt;div id=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;main&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;                       &amp;lt;h1&amp;gt;main&amp;lt;/h1&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;   &amp;lt;p&amp;gt;你可以改变浏览器窗口的高度，来观察footer效果。&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;      &amp;lt;p&amp;gt;文字文字文字文字文字文字文字文字文字文字&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;      &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;      &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;      &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;      &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;      &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;      &amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;                      &lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt;   &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;   &amp;lt;div id=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;side2&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;         &amp;lt;h3&amp;gt;side2&amp;lt;/h3&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt;         &amp;lt;ul&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt;             &amp;lt;li&amp;gt;Let me not to the marriage of &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt; minds&amp;lt;/li&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;33&lt;/span&gt;             &amp;lt;li&amp;gt;Admit impediments; love &lt;span style="color: #0000ff;"&gt;is&lt;/span&gt; not love&amp;lt;/li&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;34&lt;/span&gt;             &amp;lt;li&amp;gt;Which alters when it alteration finds&amp;lt;/li&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;35&lt;/span&gt;         &amp;lt;/ul&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;36&lt;/span&gt;     &amp;lt;/div&amp;gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;37&lt;/span&gt; &amp;lt;div id=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;footer&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;38&lt;/span&gt; &amp;lt;h1&amp;gt;Footer&amp;lt;/h1&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;39&lt;/span&gt; &amp;lt;div&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;40&lt;/span&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;41&lt;/span&gt; &amp;lt;/body&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;-----------以下是CSS代码---------------------------&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008080;"&gt; 1&lt;/span&gt; body,html {&lt;br /&gt;&lt;span style="color: #008080;"&gt; 2&lt;/span&gt; margin: &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt; 3&lt;/span&gt; padding: &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt; 4&lt;/span&gt; font: 12px/&lt;span style="color: #800080;"&gt;1.5&lt;/span&gt; arial;&lt;br /&gt;&lt;span style="color: #008080;"&gt; 5&lt;/span&gt; height:&lt;span style="color: #800080;"&gt;100&lt;/span&gt;%;&lt;br /&gt;&lt;span style="color: #008080;"&gt; 6&lt;/span&gt; }&lt;br /&gt;&lt;span style="color: #008080;"&gt; 7&lt;/span&gt; h1,h2,h3 { &lt;br /&gt;&lt;span style="color: #008080;"&gt; 8&lt;/span&gt;     margin-top: 0px; &lt;br /&gt;&lt;span style="color: #008080;"&gt; 9&lt;/span&gt;     padding-top: 0px; &lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt; } &lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt; #content {&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt; min-height:&lt;span style="color: #800080;"&gt;100&lt;/span&gt;%;&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt; height:auto;&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt; position: relative;&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt; }&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt; #head&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt; {&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;     position: absolute;&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;     left: 0px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;     top: 0px;    &lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;     width:750px; &lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;     height:100px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;     background-color:#FF0 &lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt; }&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt; div#side1 { &lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;     position:absolute; &lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt;     width:150px; &lt;br /&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;     top: 100px; &lt;br /&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;     left:0px; &lt;br /&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt;     background-color: #FF6666; &lt;br /&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt; } &lt;br /&gt;&lt;span style="color: #008080;"&gt;33&lt;/span&gt; #main {&lt;br /&gt;&lt;span style="color: #008080;"&gt;34&lt;/span&gt;     padding-bottom: 60px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;35&lt;/span&gt;     position: relative;&lt;br /&gt;&lt;span style="color: #008080;"&gt;36&lt;/span&gt;     left: 150px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;37&lt;/span&gt;     top: 100px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;38&lt;/span&gt;     width: 450px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;39&lt;/span&gt;     margin: 0px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;40&lt;/span&gt;     background-color: #&lt;span style="color: #800080;"&gt;999999&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;41&lt;/span&gt; }&lt;br /&gt;&lt;span style="color: #008080;"&gt;42&lt;/span&gt; div#side2 {&lt;br /&gt;&lt;span style="color: #008080;"&gt;43&lt;/span&gt;     position:absolute;&lt;br /&gt;&lt;span style="color: #008080;"&gt;44&lt;/span&gt;     width:150px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;45&lt;/span&gt;     top: 100px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;46&lt;/span&gt;     left: 600px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;47&lt;/span&gt;     background-color: #00FF66;&lt;br /&gt;&lt;span style="color: #008080;"&gt;48&lt;/span&gt; } &lt;br /&gt;&lt;span style="color: #008080;"&gt;49&lt;/span&gt; #footer {&lt;br /&gt;&lt;span style="color: #008080;"&gt;50&lt;/span&gt; position: absolute;&lt;br /&gt;&lt;span style="color: #008080;"&gt;51&lt;/span&gt; bottom: &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;52&lt;/span&gt; padding: 10px &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;53&lt;/span&gt; background-color: #AAA;&lt;br /&gt;&lt;span style="color: #008080;"&gt;54&lt;/span&gt; width: &lt;span style="color: #800080;"&gt;100&lt;/span&gt;%;&lt;br /&gt;&lt;span style="color: #008080;"&gt;55&lt;/span&gt; }&lt;br /&gt;&lt;span style="color: #008080;"&gt;56&lt;/span&gt; #footer h1 {&lt;br /&gt;&lt;span style="color: #008080;"&gt;57&lt;/span&gt; font: 20px/&lt;span style="color: #800080;"&gt;2&lt;/span&gt; Arial;&lt;br /&gt;&lt;span style="color: #008080;"&gt;58&lt;/span&gt; margin:&lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;59&lt;/span&gt; padding:&lt;span style="color: #800080;"&gt;0&lt;/span&gt; 10px;&lt;br /&gt;&lt;span style="color: #008080;"&gt;60&lt;/span&gt; }&lt;br /&gt;&lt;span style="color: #008080;"&gt;61&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080;"&gt;62&lt;/span&gt; &amp;lt;/style&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/dzj007/aggbug/2362040.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dzj007/archive/2012/02/21/2362040.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chendeshen/archive/2012/02/21/2361854.html</id><title type="text">我的VS.NET学习之旅</title><summary type="text"/><published>2012-02-21T12:43:00Z</published><updated>2012-02-21T12:43:00Z</updated><author><name>陳德深</name><uri>http://www.cnblogs.com/chendeshen/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chendeshen/archive/2012/02/21/2361854.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chendeshen/archive/2012/02/21/2361854.html"/><content type="html">&lt;p style="text-align: left;"&gt;&lt;strong&gt;&lt;strong&gt;&lt;span id=""&gt;[精选转载]VS.NET 学习方法论&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: right;"&gt;&lt;strong&gt;&lt;strong&gt;&lt;span id=""&gt;&amp;mdash;&amp;mdash;我的VS.NET学习之旅&lt;/span&gt;&lt;/strong&gt;&lt;strong&gt;&lt;span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;　　　　　　 　　　&lt;/span&gt;&lt;span&gt;&lt;span id=""&gt;屠恩海（&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span&gt;&lt;span&gt;&lt;em&gt;SunHai&lt;/em&gt;&lt;/span&gt;&lt;strong&gt;）&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;开发工具：Microsoft Visual Studio .NET 2003&lt;br /&gt;　　 操作系统：Windows XP&lt;/p&gt;&#xD;
&lt;p id=""&gt;&lt;strong&gt;&lt;span&gt;&lt;em&gt;题记&lt;/em&gt;&lt;/span&gt;&lt;em&gt;&lt;span&gt;：&lt;/span&gt;&lt;/em&gt;&lt;span id=""&gt;即使你没有一点编程经验，只要你愿意，并理解本文介绍的学习方法，你也可以象作者一样轻松、愉快地步入程序设计之门。让我们一起开始激动人心的VS.NET之旅。&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;　　&lt;/p&gt;&#xD;
&lt;p id=""&gt;&lt;span&gt;&lt;strong&gt;在&lt;/strong&gt;&lt;/span&gt;26岁的时候，给自己定下目标，35岁之前必须掌英语和程序设计。至今刚过而立，程序和英语都学得不怎么样，对学习方法倒是有所体悟，愿与大家分享。&lt;br /&gt;　　　&lt;br /&gt;　 　在此先介绍一下我的情况。26岁前主要从事语文教学，对计算机及英语可以说一窍不通。说出来可能让您笑话：计算机不会上网；英语不认识音标。我这人水平 虽然不怎样，志向却比天高，下决心改变自己，说干就干，花7000大洋购来电脑，开始自学计算机。26岁，人生翻开新篇章。&lt;br /&gt;　　首先把自家电脑来 个开膛破肚，把硬件拆了装，装了拆（可怜我的主板，修了几次，还是报废；显卡由于带电插拔烧断了&amp;ldquo;脚&amp;rdquo;，还是手机店的朋友帮忙焊接上的）。为了从网上快速 查找到需要的教程文章，忍痛每月花100大洋窄带包月，想当时Down个X片足足用了两天两夜，结果下集只有声音没有图像，还把他听完，呜乎！&lt;br /&gt;　 　我一向提倡在工作中学习，学的东西要和工作相关，工作和学习互相促进。做语文教师虽也可以自学计算机，但我觉得进程太慢了（那时我所在学校还未设计算机 课程）。于是，刚学计算机不到半年的人&amp;ldquo;一不小心&amp;rdquo;就成了电脑教师。还好基本是入门级培训，不过也逼着我学得更快。本来我是用拼音加加输入法的，因为工作 关系，只好改用五笔。全国计算机等级考试要考DOS，于是又学了DOS。本来用FrontPage做网页，现在改用Dreamweaver MX,还有FireWorks MX,Flash MX也懂一点。对着主板随机手册和英文词典尝试几次，开机CMOS也可以进出自如。什么系统优化，GHOST系统备份都不在话下。做的网页虽然界面不怎么 样，IP日访问量却是每天300以上。直到29岁，对Windows应用编程却还是一点不懂，VB6删了装，装了删，反复几次，觉得很难，始终未跨过编程 第一道门槛。&lt;/p&gt;&#xD;
&lt;p&gt;前日跟在嵊州信息港工作的MM交流，言及在自学Visual Studio .NET编程，MM问：你在闭关学习吗？我回答:你&amp;ldquo;赞助&amp;rdquo;学费的话我也许会考虑考虑。是的，&lt;strong&gt;网络是所大学，最大的大学，网络可以改变世界，终将改变世界。网络更可以改变人生，可以让我们的学习生活无比精采，只要你懂得利用，善于利用&lt;/strong&gt;。现在已是网络时代，网络交流基本弥补了自学的不足，网络交流更有学校教育无可替代的优点。&lt;br /&gt;　　你看到这里，如果你没有接触过程序语言，想了解一下Visual Studio .NET是个什么&amp;ldquo;东东&amp;rdquo;，你会如何做？&lt;br /&gt;　　第一，查手头书籍，个人开个计算机图书馆是不现实的，要查找的知识往往在手头书籍中找不到；&lt;br /&gt;　　第二，打电话问朋友，朋友懂不懂是个问题，即使懂，他有没有空？他有空，他不清楚你这边的实际情况，他说的并不一定是你想要的，或者你不一定听得懂；&lt;br /&gt;　　第三，上图书馆查资料；&lt;br /&gt;　　第四，上书店；&lt;br /&gt;　　第五，跑去问老师；&lt;br /&gt;　　第六，&amp;hellip;&amp;hellip;&amp;nbsp;&lt;br /&gt;　 　是的，传统是这么做的。但现在是网络时代了。你完全可能在不到一分钟之内找到你想要的答案。现在开启你的电脑（前提是你不认为购买电脑是极大的浪费）， 拨号上网（前提是你认为有必要给电脑配置Modem并接入网络），打开Internet Explorer，在地址栏输入&lt;a href="http://www.google.com/"&gt;&lt;span&gt;&lt;span&gt;http://www.google.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;,然后回车，在打开的页面中间输入框中敲入&lt;span&gt;&lt;strong&gt;Visual Studio .NET 编程&lt;/strong&gt;&lt;/span&gt;，注意中、英文中间有个空格。然后再回车，页面显示：&lt;strong&gt;共有 12,800 项查询结果，这是第 1 - 10 项。 搜索用时 0.28 秒&lt;/strong&gt;，怎么样，还用我给你介绍&lt;span&gt;&lt;strong&gt;Visual Studio .NET&lt;/strong&gt;&lt;/span&gt;是什么东东吗。你就尽情地点击标题，查看您需要的知识吧。&lt;/p&gt;&#xD;
&lt;p&gt;&amp;ldquo;软件是一个过去的时代，Web Service将要来临。&amp;rdquo;微软高级副总裁李开复说，&amp;ldquo;Web Service本身可以说是一个赌博，一个风险;因为你可以相信，也可以不相信这件事情的发生。我只能说微软把整个公司都赌下去了，我们赌的未来就是 Web Service。&amp;rdquo; 你可不要告诉我你比盖茨厉害多了。我们追求超越盖茨不一定现实，但我们可以早一步接触网络，利用网络。&lt;br /&gt;&lt;br /&gt;　　&lt;span&gt;&lt;strong&gt;第一点体会：掌握计算机的基础知识，学会利用网络来进行学习，特别是利用搜索引擎（如&lt;a href="http://www.google.com/"&gt;&lt;span&gt;&lt;span&gt;http://www.google.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;)来查找你所需要的答案。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;29岁，开始从事企业管理工作。由于工作的关系，要用到MicroSoft Office办公软件，Office办公软件中有个 Visual Basic For Application （VBA）语言，是VB的一个子集，具备VB的所有优点，内置于Office中，只能在Office中创建、编程和运行，可以录制宏并自动转换为代码。由 于初次接触编程语言，感到自学VBA有难度。每逢在学习中遇到难题、困惑的时候，我就到会到网上寻找学习资源，寻找答案。很快就找到关于 MicroSoft Office的极好社区，如&lt;a href="http://www.officefans.net/"&gt;&lt;span&gt;&lt;span&gt;OfficeFans(http://www.officefans.net)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;,&amp;nbsp;&lt;a href="http://club.excelhome.net/"&gt;&lt;span&gt;&lt;span&gt;ExcelHome(http://club.excelhome.net/)&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;,于是立即在社区注册名字，学习VBA时中碰到疑问就到社区去问，每次都有网友热心解答。&lt;br /&gt;　　比如我的工作需要经常在Excel工作表第十行前插入空白行,要先选取工作表，鼠标指针定位到指定行，然后单击右键，选&amp;ldquo;插入&amp;rdquo;。重复操作，不胜其烦。于是在&lt;span&gt;&lt;span&gt;OfficeFans&lt;/span&gt;&lt;/span&gt;提问，经版主kengzeng指点，得到如下VBA代码：&lt;/p&gt;&#xD;
&lt;table bgcolor="#cccccc"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;　　Sub insert()&lt;br /&gt;　　　 Sheets("sheet2").Rows("10:10").Insert&lt;br /&gt;　　End Sub&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;原来要四步操作，现在一按快捷键就完成了。我原来并不懂VBA,对&amp;ldquo;集合&amp;rdquo;、&amp;ldquo;对象&amp;rdquo;、&amp;ldquo;方法&amp;rdquo;、&amp;ldquo;属性&amp;rdquo;、&amp;ldquo;事件&amp;rdquo;、&amp;ldquo;枚举&amp;rdquo;等编程概念也不 甚了了，但由于有网上高手的指点、帮助，我仍旧可以在工作中应用VBA,多次应用下来，用到的一些VBA代码不去死记也差不多会背了，对VBA的一些概 念、理论开始有所了解。&lt;br /&gt;&lt;br /&gt;　　万事开头难。学习一开始碰到难题，如果解决不掉，就可能从此放弃学习了，如果这时有热心人解答他的疑问，然后 在实际中立即可以应用新知识，新知识得到了即时巩固，学习的兴趣得到激发和增强，学习就得以继续和深化。当然，对于有&amp;ldquo;悬梁刺股&amp;rdquo;精神的朋友，自己看书刻 苦钻研也可能会解决所有疑难问题，但那毕竟是极少数，我想多数人是象我这样的普通人。&lt;br /&gt;&lt;br /&gt;　　来而不往非礼也。在网上得到诸多大侠的指点，总 感到好像欠了谁什么似的，就想到编一本电子书，把常见的Excel VBA学习教程集中到一起，可以帮助初学者快速入门。 2003年6月较空闲，刚好自己对Html语法也懂一点，就花了二周的时间，搜集整理了一本电子书，叫《Excel 应用宝典》，其中重点内容是Excel VBA。把电子书放到&lt;span&gt;&lt;span&gt;OfficeFans&lt;/span&gt;&lt;/span&gt;上供网友下载，极受欢迎。我为什么编这本电子书呢？真的是比较空闲的缘故？有空去泡MM不是很好，何必去做枯燥的文字整理工作，其实我是存有&amp;ldquo;私心&amp;rdquo;的？&lt;br /&gt;&lt;br /&gt;　　什么&amp;ldquo;私心&amp;rdquo;？这叫帮人即帮己，助人即助己。&amp;ldquo;佛&amp;rdquo;渡人其实也是为了渡己啊。我为了领悟这个道理，诸子百家，佛道儒易医，无所不涉，并在生活中曲折浮沉，这样还是用了&amp;ldquo;30年&amp;rdquo;时间（太夸张了，一出生就&amp;hellip;&amp;hellip;？呵呵），各位比我聪明，应该早就明白此理。&lt;br /&gt;&lt;br /&gt;　　为什么助人即助己？&lt;br /&gt;　　 在学术上帮助别人，指点别人，就要站在别人的角度考虑，思考别人的思考，打破了小我的思维局限。&lt;br /&gt;　　 从信息角度讲，个人自修，知识的附加信息量较小，而在帮助别人过程中，存在人与人的信息交流，在信息交流中，知识信息得到强化。&lt;br /&gt;　　举一个例子，小孩子生活在英语环境中，3岁即口语流利，而我们的学校教育，大学毕业，英语学了十多年，还是哑巴英语的大有人在，为什么？&lt;br /&gt;　 　小孩子记一个单词或句子，是在和外界信息交流中记忆的，确切地说，小孩子记住了当时信息交流的情境，通过情境的自然记忆实现单词或句子的自然记忆。学习 口语如此，学习编程何尝不如此呢？你在某个问题上指点过别人，你的记忆印象可能就特别深，如果是个人看书自学，对于某个问题当时虽然理解，但附助记忆的情 境信息量很小，时间长了就容易遗忘。&lt;br /&gt;　　所以，在学习编程的过程中，多和别人交流，多向高手虚心求教，多指点初学者，是在人为创造学习情境，在情境中强化记忆，强化理解。&lt;br /&gt;　　李阳提倡&amp;ldquo;疯狂英语&amp;rdquo;学习法，我则提倡&amp;ldquo;疯狂编程&amp;rdquo;学习法，也就是创造一切机会和别人交流编程经验，从交流中进行强化训练和学习。也要注意，交流是手段不是目的。&lt;br /&gt;　　交流编程经验的途径有很多：如论坛交流，媒体投稿，QQ、icq等通讯软件交流。个人觉得CSDN为我们提供的&amp;ldquo;个人专栏&amp;rdquo;非常好，您可以一边学习编程，一边记下心得，通过个人专栏和大家交流。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　VBA是VB的应用分支，我在工作中应用VBA,并自然地对VBA的概念、理论有了初步了解，这时再去看VB的教程，就感到分外亲切。因为VBA和VB在本质上是没有区别的。我终于可以跨入VB编程之门了。&lt;br /&gt;&lt;br /&gt;　　&lt;span&gt;&lt;strong&gt;第二点体会：学习编程的过程中，既要善于向高手寻求帮助，更要乐于指导初学者。在交流中学习编程，这决不是宗教式道德说教，而是极其重要的学习方法和学习手段。&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　 程序语言种类很多，&lt;a href="http://www.pconline.com.cn/"&gt;&lt;span&gt;&lt;span&gt;&lt;em&gt;Pconli&lt;/em&gt;ne&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;的&lt;a href="http://www.pconline.com.cn/pcedu/empolder/"&gt;&lt;span&gt;&lt;span&gt;工具平台&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;就列有VB/VB.NET、VC/C#、Delphi、Java、C++Builder等。到底学什么语言好呢？在Google输入&lt;span&gt;&lt;strong&gt;语言 比较&lt;/strong&gt;&lt;/span&gt;,查到一篇文章《编程语言的宗教狂热和十字军东征》&lt;span&gt;，&lt;/span&gt;第一段就是：&lt;span&gt;&lt;strong&gt;&lt;br /&gt;　　&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;业 余程序员最喜欢做的一件事就是对不同的语言进行比较。Java是否比C＋＋好？C＃是否会成为终极语言？凡此种种。从专业程序员的角度看来，这是最低级无 趣的游戏。其一，在项目诸元确定之后，通常并没有选择语言的余地；其二，语言的生存本身就是一个达尔文主义的问题：设若两种语言有明确的可比较性，其中较 劣的那一种必定早已被淘汰出局，又何来比较的必要？&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;strong&gt;&lt;br /&gt;　　&amp;nbsp;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;　　我基于两个原则选择编程语言：&lt;br /&gt;　　&amp;nbsp;&lt;span&gt;其一，适用自己的就是最好的。&lt;br /&gt;　　 其二，如果不知道什么适用自己（业余程序员开发软件基于个人爱好，往往有此困惑），那么优先选择MicroSoft的开发语言。&lt;/span&gt;&lt;br /&gt;　　我选的是VB（每个人的具体情况不，我的选择不一定适合你），我目前只考虑开发普通Windows应用软件，并希望Windows应有软件的开发和MicroSoft VBA的应用互相促进，说穿了，是精力有限，最好是一种语言，到处应用。&lt;br /&gt;　　于是在网上Down了N多的电子书，收藏夹里VB网站一大堆。常去的VB网站有&lt;a href="http://www.1000vb.net/"&gt;&lt;span&gt;1000VB&lt;/span&gt;&lt;/a&gt;&amp;nbsp;,&lt;a href="http://www.applevb.com/"&gt;&lt;span&gt;AppleVB&lt;/span&gt;&lt;/a&gt;&amp;nbsp;,&amp;nbsp;&lt;a href="http://www.cndevx.com/"&gt;&lt;span&gt;cnDevx&lt;/span&gt;&lt;/a&gt;&amp;nbsp;，&lt;span&gt;&lt;a href="http://www.51dotnet.com/"&gt;51DoNET&lt;/a&gt;&lt;/span&gt;等，但我发现，除了&lt;span&gt;&lt;a href="http://www.csdn.net/"&gt;&lt;span&gt;CSDN&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;,VB社区论坛的人气大多不旺。&lt;br /&gt;　　&lt;br /&gt;　　 第一次接触VB,没有基础，业余自学，如何快速掌握VB编程？&lt;br /&gt;　 　 如果我有足够的时间（业余自学，时间显然不足），有足够的耐心（恰恰我是耐心不那么足的人），可以按照教程一个一个控件学习、练习，这个过程无疑是有益 的，但对我来说显然是过于枯燥的。或许如此下去,半年以后，我的VB基础比较好了，但可能不到半年，早就被我放弃。这就要另辟蹊径。我的设想是，&lt;span&gt;&lt;span&gt;一开始就定下一个软件项目，带着目的去学，以一个控件为核心，在完成项目的过程中，逐步掌握VB控件的使用和编程基本理论&lt;/span&gt;&lt;/span&gt;。项目基本完成的时候，VB编程也就入门了。由于是带着项目去学，目的明确，学习过程就不会枯燥。如果你做共享软件，你的项目创意又比较好，你VB编程入之门之日，也许你的软件也就可以为你带来Money了，呵呵！&lt;br /&gt;　 　开发一个什么样的软件呢？ SUN提出了激动人心的口号:&amp;ldquo;网络就是计算机&amp;rdquo;。计算机的应用主要在于网络，于是定位于开发网络软件。我经常到网络社区论坛交流，注册时要一项项填写信 息，发言时也要一项项填写信息，感觉很费时间，打算自己编软件来实现自动注册，自动发言。　　&amp;nbsp;&lt;br /&gt;　　&amp;nbsp;&lt;br /&gt;　　 2003年5月学VBA时想用VBA实现在论坛自动注册和发言，实现起来有难度，就在网上找替代软件,找到了&lt;span&gt;&amp;ldquo;&lt;/span&gt;&lt;a href="http://www.vrbrothers.com/cn/qmacro"&gt;&lt;span&gt;&lt;span&gt;按键精灵&amp;rdquo;（http://www.vrbrothers.com/cn/qmacro）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;， 按键精灵是一个模拟鼠标键盘动作的软件。通过制作脚本，可以让按键精灵代替您的双手，自动执行一系列鼠标键盘的动作。 觉得很不错，就编写了一个脚本，用按键精灵自动实现如下功能：打开Internet Explorer，输入并打开网址，移动鼠标到指定座标，输入字符，然后按回车完成注册发言。比起手工输入，用按键精灵省力不少，但是不同网站，输入框的 座标不同，要手动抓取，有没有更方便的软件呢？&lt;a href="http://bbs.boxbbs.com/"&gt;&lt;span&gt;&lt;span&gt;按键精灵社区&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;里有人讲到&lt;span&gt;&lt;a href="http://ezscript.seed.cx/"&gt;&lt;span&gt;EzScript（http://ezscript.seed.cx/）&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;功能更多，试用后发现在WindowsXP里反应不灵敏，再在&lt;a href="http://www.google.com/"&gt;&lt;span&gt;Google&lt;/span&gt;&lt;/a&gt;狂搜，找到了比按键精灵更好的软件&lt;a href="http://www.pcworker.net/"&gt;&lt;span&gt;&lt;span&gt;PCWorker（http://www.pcworker.net）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;。PCWorker配合网络填表软件&lt;a href="http://www.totemnet.net/"&gt;&lt;span&gt;FORMGHOST&lt;/span&gt;&lt;/a&gt;&amp;nbsp;，再加上&lt;a href="http://www.myie2.com/"&gt;&lt;span&gt;MyIE&lt;/span&gt;&lt;/a&gt;,可实现双击注册或发言，需要的话，还可在标题加上随机数，而且在PCWorker中代码的可读性较强，且作者能及时听取网友意见对软件加以改进。&lt;br /&gt;　　PCWorker虽然好用，但要读取识别码图片上的数字，这是PCWorker类软件不能胜任的。于是决心用VB6来实现所有自己想要实现的功能。2003年10月开始学习VB6,到11月半，项目基本完成。我是怎么做的呢？&lt;span&gt;&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;/strong&gt;&lt;/span&gt;首先浏览各VB网站有关文章，发现用WebBrowser控件能实现我所欲求的功能。&lt;br /&gt;　　其次，大量搜集WebBrowser控件相关文章和代码。&lt;br /&gt;　　　　&lt;span&gt;&amp;nbsp;用&lt;span&gt;&lt;a href="http://www.google.com/"&gt;&lt;span&gt;Google&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;搜寻。如用&amp;ldquo;WebBrowser&amp;rdquo;为关键词搜索，共有&amp;nbsp;&lt;strong&gt;216,000&amp;nbsp;&lt;/strong&gt;项查询结果 。&lt;br /&gt;　　　　&amp;nbsp;&lt;a href="http://expert.csdn.net/Expert/Forum.asp"&gt;&lt;span&gt;&lt;span&gt;CSDN论坛&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;搜索。导航到&lt;span&gt;&lt;a href="http://expert.csdn.net/Expert/Forum.asp"&gt;&lt;span&gt;http://expert.csdn.net/Expert/Forum.asp&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;，登陆论坛，点击&amp;ldquo;搜索&amp;rdquo;，选&amp;ldquo;全部论坛&amp;rdquo;，点选&amp;ldquo;最新数据搜索&amp;rdquo;，用&amp;ldquo;WebBrowser&amp;rdquo;为关键词，然后点击&amp;ldquo;对选择的大类进行搜索&amp;rdquo;，哇，有好几百篇有关&amp;ldquo;WebBrowser&amp;rdquo;的问答。&lt;br /&gt;　　　　　在&lt;a href="http://expert.csdn.net/Expert/Forum.asp"&gt;&lt;span&gt;&lt;span&gt;CSDN论坛&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;作全文检索，寻找更多有检值的内容。&lt;br /&gt;　　　　&amp;nbsp;&lt;a href="http://www.aspx8.cn/webbrowser"&gt;&lt;span&gt;&lt;span&gt;CSDN文档&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;搜索，导航到&lt;a href="http://www.csdn.net/develop/"&gt;&lt;span&gt;&lt;span&gt;http://www.csdn.net/develop&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;，在右上角搜索输入框输入"WebBrowser",选择&amp;ldquo;文档标题&amp;rdquo;，再单击&amp;ldquo;搜索&amp;rdquo;，我得到30篇有关&amp;ldquo;WebBrowser"相关文档。&lt;/span&gt;&lt;br /&gt;　　 　在实际编程中遇到困难，还可以到&lt;span&gt;&lt;a href="http://expert.csdn.net/Expert/Forum.asp"&gt;CSDN论坛&lt;/a&gt;&lt;/span&gt;提问，寻求帮助。我就曾在&lt;span&gt;&lt;a href="http://expert.csdn.net/Expert/Forum.asp"&gt;CSDN论坛&lt;/a&gt;&lt;/span&gt;问了不下十个有关Webbrowser有关问题，并都得到了解答。&lt;br /&gt;　　&amp;nbsp;&lt;br /&gt;　　由于善于运用以上三步，1个半月时间，我的软件基本出炉，VB编程也已基本入门。软件实现原理是，用WebBrowser控件，先Navigate到指定网址，然后填写表单。主要代码如下：&lt;/p&gt;&#xD;
&lt;table border="0" bgcolor="#cccccc"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;Private Sub cmdfill_click()　　'点击按钮开始发言&lt;br /&gt;On Error Resume Next&lt;br /&gt;　　Dim vdoc As IHTMLDocument2&lt;br /&gt;　　Dim vTag&lt;br /&gt;&lt;br /&gt;　　Dim i As Integer&lt;br /&gt;　　If Not brow.Busy Then '如果下载完成，就执行下面程序&lt;br /&gt;　　　　Set vdoc = brow.Document　　&lt;br /&gt;　　　　For i = 0 To vdoc.All.Length - 1 '检测所有标签&lt;br /&gt;　　　　　　If UCase(vdoc.All(i).tagName) = "INPUT" Or UCase(vdoc.All(i).tagName) = "TEXTAREA" Then&lt;br /&gt;　　　　　　 '找到input标签&lt;br /&gt;　　　　　　　　Set vTag = vdoc.All(i)&lt;br /&gt;　　　　　　　　　　If vTag.Type = "text" Or vTag.Type = "password" Then '看看是不是我们需要的&lt;br /&gt;　　　　　　　　　　　　Select Case vTag.Name&lt;br /&gt;　　　　　　　　　　　　　　Case "name"&lt;br /&gt;　　　　　　　　　　　　　　　　vTag.Value = "sunHai"&amp;nbsp;&lt;br /&gt;　　　　　　　　　　　　　　Case "passwd"&lt;br /&gt;　　　　　　　　　　　　　　　　vTag.Value = "sunHaiGood"&lt;br /&gt;　　　　　　　　　　　　　　Case "subject" '写标题，不同的网页表单，vTage.name的值不同，要查看网页源码修改&lt;br /&gt;　　　　　　　　　　　　　　　　vTag.Value = "Hello,sunHai!"&amp;nbsp;&lt;br /&gt;　　　　　　　　　　　　End Select&lt;br /&gt;&lt;br /&gt;　　　　　　　　　　'ElseIf vTag.Type = "submit" And vTag.Value = "发表" Then '找到发表按钮。&lt;br /&gt;　　　　　　　　　　　　' vTag.Click&lt;br /&gt;　　　　　　　　　　End If&lt;br /&gt;　　　　　　End If&lt;br /&gt;　　　　Next i&lt;br /&gt;&lt;br /&gt;　　　　vdoc.Forms(0).submit　'也可以用这句来提交表单&lt;br /&gt;　　End If&lt;br /&gt;End Sub&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span&gt;&lt;strong&gt;第三点体会：从应用入手，从解决实际问题出发，在完成项目的过程中，逐步掌握控件的使用技巧和编程基本理论。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在学习VB6的同时自然接触到 Microsoft Visual Studio .NET（简称VS.NET）。在十年之前，Visual Basic 1.0 成为数以百万计的开发人员的革命性的应用程序开发语言。现在，Visual Studio .NET 为未来的十年做好了准备（有点象为MicroSoft打广告，你说呢），VS.NE是用于创建下一代应用程序的理想而又现实的开发工具，是一个&lt;span&gt;&lt;span&gt;从一开始就是为 XML Web 服务创建的开发环境。通过允许应用程序通过 Internet 沟通和共享数据，XML Web 服务使业务能够从 Internet 转换为用于集成和传送它们的核心商业价值的真正平台&lt;/span&gt;&lt;/span&gt;。Visual Studio .NET 和 XML Web 服务提供简单、灵活、基于标准的模型，允许开发人员从新的和现有的代码汇编应用程序，而与平台、编程语言或对象模型无关。&amp;nbsp;&lt;br /&gt;　　VS.NET　2003中主要有包含以下几种开发工具：&lt;br /&gt;　 　 Visual Basic .NET 2003&amp;nbsp;&lt;br /&gt;　　　Visual C# .NET 2003&amp;nbsp;&lt;br /&gt;　　　Visual C++ .NET 2003&amp;nbsp;&lt;br /&gt;　　　Visual J# .NET 2003&lt;br /&gt;　　核心是 Visual Basic .NET 2003和Visual C# .NET 2003。我主要用VB.NET。在VS.NET中的不同开发工具的差别主要表现为语法的差异，因此，用VB.NET的人，一般也可以看懂C#.NET的代码，反之亦然。&lt;/p&gt;&#xD;
&lt;p&gt;有人说，&amp;ldquo;学习要面向未来&amp;rdquo;，2003年12月，我的主要开发工具从VB6转为VB.NET，2004年1月1日，把我新开发的软件从VB6语言转写为VB.NET语言,并正式命名为&lt;strong&gt;&lt;span&gt;&lt;span&gt;网络广告王(AdKing)&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;。&lt;/p&gt;&#xD;
&lt;p&gt;在转向VB.NET的时候，我考虑：&lt;br /&gt;　　第一、VS.NET的本质是什么？&lt;br /&gt;　　&lt;span&gt;VS.NET是从一开始就是为 XML Web 服务创建的开发环境。通过允许应用程序通过 Internet 沟通和共享数据，XML Web 服务使业务能够从 Internet 转换为用于集成和传送它们的核心商业价值的真正平台。&lt;/span&gt;&lt;br /&gt;　　 学习要面向未来，就要学习最新的技术，现在的学习为将来的应用作铺垫。我的软件要突出两点，一是基于Internet的应用，二是要应用XML技术。这样，我就可以在应用中尽快掌握新技术，否则，只是为学习而学习，无疑会是比较枯燥，也容易遗忘。&lt;br /&gt;　　第二、原来用VB6写的&lt;span&gt;&lt;span&gt;AdKing&lt;/span&gt;&lt;/span&gt;，主要用到WebBrowser控件，网页加载速度慢，会下载图片，Flash等许多不需要的东西，在VS.NET中必须用其他方法实现同样功能。&lt;br /&gt;　　在CSDN诸位朋友的帮助下，并参考许多资料，我的&lt;span&gt;&lt;span&gt;AdKing&lt;/span&gt;&lt;/span&gt;已基本具备.NET特征。&lt;br /&gt;　　&lt;br /&gt;　　&lt;span&gt;&lt;strong&gt;1.应用了XML技术&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;　 　VB6中，INI文件通常用来保存系统信息、配置信息，读写INI文件要用到API函数，使用起来不是很方便。在VS.NET中，已经没有必要用INI 文件来保存和读取一些信息了，可以改用VS.NET中的读写XML文件的类。而且，在VS.NET　2003的后续版本中，处理XML有关功能将得到进一 步增强。&lt;br /&gt;　　&lt;strong&gt;读取XML到DataGrid代码：&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table border="0" bgcolor="#cccccc"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;　Public MyXMLDataSet As New DataSet("XMLDataSet")&lt;br /&gt;'&amp;nbsp;&lt;strong&gt;DataSet&amp;nbsp;&lt;/strong&gt;是数据的一种内存驻留表示形式，无论它包含的数据'来自什么数据源，它都会提供一致的关系编程模型。一个&amp;nbsp;&lt;strong&gt;'DataSet&amp;nbsp;&lt;/strong&gt;表示整个数据集，其中包含对数据进行包含、排序和约束的'表以及表间的关系。&amp;nbsp;&lt;br /&gt;　MyXMLDataSet.ReadXml("regid.xml") 　　'读入XML文件&amp;nbsp;&lt;br /&gt;　form1.DefInstance.DataGrid1.DataSource = MyXMLDataSet　　　'DefInstance是form1的共享属性， 我们不用创建实'例就可以直接用&amp;lsquo;类名 .共享成员'的方法进行调用 ，&amp;nbsp;&lt;a href="http://www.csdn.net/develop/read_article.asp?id=22123"&gt;&lt;span&gt;&lt;span&gt;《Henry 的 VB.NET 之旅 ( 三 )&amp;mdash; 共享成员》&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;中有论述。&lt;br /&gt;　strName = MyXMLDataSet.Tables(0).Rows(0).Item("name").ToString '　　　从DataGrid中读取用户名信息。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;　　&lt;br /&gt;　　&lt;strong&gt;从DataGrid1更新信息到XML文件代码：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table border="0" bgcolor="#cccccc"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;　Dim MyXmlDataSet As DataSet&lt;br /&gt;　MyXmlDataSet = CType(DataGrid1.DataSource, DataSet)　'类型转换&lt;br /&gt;　MyXmlDataSet.WriteXml("regid.xml") 　　　　　　　　　　'把信息写入XML文件&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;br /&gt;　　&amp;nbsp;&lt;br /&gt;　　&lt;strong&gt;如果不用DataGrid控件，读写XML文件中特定信息可以更简单：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table border="0" bgcolor="#cccccc"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;　　Dim xmlInfo As New XmlDocument 　　　　　&amp;nbsp;&lt;br /&gt;　　xmlInfo.Load("info.xml")　　　　'载入XML文件&lt;br /&gt;　　Dim str As string=xmlInfo.Item("RegInfo").Item("name").InnerText　　'用&amp;ldquo;Item&amp;rdquo;可以逐级往下读数据&lt;br /&gt;　　xmlInfo.Item("RegInfo").Item("pass").InnerText="MyPass"&lt;br /&gt;　　xmlInfo.Save("info.xml") 　　　'保存信息到xml文件&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;br /&gt;　　我原来打算用INI格式来保存&lt;span&gt;&lt;span&gt;AdKing&lt;/span&gt;&lt;/span&gt;的注册信息和发言信息，但是，一则读写INI不是很方便，二则XML在软件开发中越趋重要，于是一开始就用XML文件来保存有关信息。在刚接触VS.NET时本不知XML为何物，现在可自如读写XML，是否有点&amp;ldquo;高手&amp;rdquo;的感觉呢？（自我陶醉一下先）&lt;br /&gt;&lt;br /&gt;　　&lt;strong&gt;&lt;span&gt;2.用HttpWebResponse相关类GET和POST信息&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;　　&lt;strong&gt;用GET方式读取网页源代码：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table border="0" bgcolor="#cccccc"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;　　Dim httpReq As System.Net.HttpWebRequest　　'&lt;strong&gt;HttpWebRequest&amp;nbsp;&lt;/strong&gt;类对 WebRequest 中定义的属性和方法提供支持'，也对使用户能够直接与使用 HTTP 的服务器交互的附加属性和方法提供支持。&amp;nbsp;&lt;br /&gt;　　Dim httpResp As System.Net.HttpWebResponse 　'&amp;nbsp;&lt;strong&gt;HttpWebResponse&amp;nbsp;&lt;/strong&gt;类用于生成发送 HTTP 请求和接收 HTTP 响'应的 HTTP 独立客户端应用程序。&lt;br /&gt;　　Dim url as String="http://sunhai.tianyablog.com" 　　'这是我的小站，有空来坐坐&lt;br /&gt;　　Dim httpURL As New System.Uri(url)&lt;br /&gt;　　httpReq = CType(WebRequest.Create(httpURL), HttpWebRequest)&lt;br /&gt;　　httpReq.Method = "GET"&lt;br /&gt;　　httpResp = CType(httpReq.GetResponse(), HttpWebResponse)　 　　&lt;br /&gt;　　Dim reader As StreamReader = _&lt;br /&gt;　　New StreamReader(httpResp.GetResponseStream, System.Text.Encoding.GetEncoding("GB2312")) '如是中文，要设置编码格式为&amp;ldquo;GB2312&amp;rdquo;。&lt;br /&gt;　　Dim respHTML As String = reader.ReadToEnd()　　'respHTML就是网页源代码&lt;br /&gt;　　httpResp.Close()&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;strong&gt;向服务器POST信息：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;table border="0" bgcolor="#cccccc"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p&gt;Dim httpUrl2 As New System.Uri("http://sunhai.tianyablog.com？" &amp;amp; "name=1&amp;amp;pass=6") ' &amp;ldquo;&amp;amp;&amp;rdquo;号后面是'注册信息,改成你自己的&lt;br /&gt;　　Dim req As HttpWebRequest&lt;br /&gt;　　req = CType(WebRequest.Create(httpUrl2), HttpWebRequest)&lt;br /&gt;　　req.Method = "POST"&lt;br /&gt;　　req.ContentType = "application/x-www-form-urlencoded"&lt;br /&gt;　　Dim bytesData() As Byte = System.Text.Encoding.ASCII.GetBytes("name=1&amp;amp;pass=6")&lt;br /&gt;　　req.ContentLength = bytesData.Length&lt;br /&gt;　　Dim postStream As Stream = req.GetRequestStream()&lt;br /&gt;　　postStream.Write(bytesData, 0, bytesData.Length)　　　'以上为向网络服务器POST信息&lt;/p&gt;&#xD;
&lt;p&gt;Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse)&lt;br /&gt;　　Dim reader As StreamReader = _&lt;br /&gt;　　New StreamReader(res.GetResponseStream, System.Text.Encoding.GetEncoding("GB2312"))&lt;br /&gt;　　Dim respHTML As String = reader.ReadToEnd()　　'respHTML为POST后网络服务器返回的信息&lt;br /&gt;　　　　MsgBox(respHTML)　　　　　　　　　　　　　　　'可用MsgBox查看返回的信息&lt;br /&gt;　　res.Close()&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;span&gt;&lt;strong&gt;3.用正则表达式从网页源代码中提取网址&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;　　得到网页源代后，我们可以对源代码进行处理，比如提取其中的链接，Email地址，图片地址，Flash等等。&lt;/p&gt;&#xD;
&lt;table border="0" bgcolor="#cccccc"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;&#xD;
&lt;p&gt;Dim r As System.Text.RegularExpressions.Regex&lt;br /&gt;　　Dim m As System.Text.RegularExpressions.MatchCollection&lt;br /&gt;　　Dim respHtml As String = "http://www.NETsh.Net/subdomains/f_s_o.php?leibie=shangmao"　'以这个地址举例&lt;br /&gt;　 　strRegex = "http://([\w]+\.)+[\w]+(/[\w.?]+)+leibie[=]{1}[\w]+" 　'用这个正则表达式可以提取上面地址。通用'的提取链接正则表达式为&amp;ldquo;http://([\w-]+\.)+[\w-]+(/[\w- ./?%&amp;amp;=]*)?&amp;rdquo;。　　&lt;br /&gt;　　r = New System.Text.RegularExpressions.Regex(strRegex, 　　　System.Text.RegularExpressions.RegexOptions.IgnoreCase)&lt;br /&gt;　　m = r.Matches(respHTML)　　　&lt;br /&gt;　　Dim i As Integer　&lt;br /&gt;　　For i = 0 To m.Count - 1&lt;br /&gt;　　　　MsgBox(m(i).Value)&lt;br /&gt;　　Next i　&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;span&gt;&lt;strong&gt;&lt;span&gt;第四点体会：要学习新技术，尽量在你的项目中应用新技术，在应用中学习，进步最快。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;　&lt;/span&gt;&lt;/strong&gt;现在我的&lt;span&gt;&lt;span&gt;AdKing&lt;/span&gt;&lt;/span&gt;已经用.NET全面改写，并用上继承，重载，多线程等，所有这些在VB6中能否实现，从VB6转到.NET是否明智？&lt;br /&gt;&lt;br /&gt;　　从2003年10月开始学习VB6编程，11月半用VB6完成第1个软件&amp;mdash;&amp;mdash;&lt;span&gt;&lt;span&gt;AdKing&lt;/span&gt;&lt;/span&gt;，到现在(20040117）用VB.NET技术改写&lt;span&gt;&lt;span&gt;AdKing&lt;/span&gt;&lt;/span&gt;。可算基本入门。全部用的业余时间，没有当面请教一个老师。原来没有一点编程基础。如果学得还算顺利的话，很大部分要归功于掌握并利用大量网络资源。下面列出我所掌握的VS.NET网络学习资源，有什么遗漏希望大家能指出。&lt;br /&gt;　　&lt;strong&gt;1.微软支持&lt;/strong&gt;&lt;br /&gt;　　在你学习VS.NET的过程中，有疑问首先要向MicroSoft求助。如果你不懂得利用MicroSoft提供的庞大的学习资源，我要告诉你，你很不幸，你舍近求远了。&lt;br /&gt;　　（1）&lt;strong&gt;首先，你要安装MSDN&lt;/strong&gt;, 他比所有VS.NET书籍详细。我为了装MSDN，可是牺牺了我的98和XP双启动，改成WindowsXP单系统。装了MSDN后，你要学习正则表达 式，VS.NET 2003中点击&amp;ldquo;帮助&amp;rdquo;，再点击&amp;ldquo;搜索&amp;rdquo;，然后输入&amp;ldquo;正则&amp;rdquo;，一回车，哇，找到470个主题，这下你慢慢研究吧。实在研究不透，也不用急，还有&lt;a href="http://www.google.com/"&gt;&lt;span&gt;Google&lt;/span&gt;&lt;/a&gt;和&lt;a href="http://www.csdn.net/"&gt;&lt;span&gt;CSDN&lt;/span&gt;&lt;/a&gt;呢。　　　&amp;nbsp;&lt;br /&gt;　　（2）&lt;strong&gt;在线&lt;a href="http://chs.gotdotnet.com/QuickStart"&gt;&lt;span&gt;&lt;span&gt;Microsoft .NET 框架 SDK 快速入门教程（http://chs.gotdotnet.com/QuickStart）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;，可配合MSDN使用。分三块内容，&lt;strong&gt;&lt;a href="http://chs.gotdotnet.com/quickstart/aspplus/default.aspx"&gt;ASP.NET&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;|&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;&lt;a href="http://chs.gotdotnet.com/quickstart/winforms/default.aspx"&gt;Windows 窗体&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;&lt;strong&gt;|&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;&lt;a href="http://chs.gotdotnet.com/quickstart/howto/default.aspx"&gt;如何...?常见任务&amp;nbsp;&lt;/a&gt;&lt;/strong&gt;。 &amp;ldquo;常见任务快速入门&amp;rdquo;旨在帮助您快速找到常见编程问题的答案。&lt;br /&gt;　　（3）&lt;a href="http://www.mscommunity.com/Profile/"&gt;&lt;span&gt;&lt;span&gt;微软中国社区（http://www.mscommunity.com/Profile/）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;。在社区注册，有问题就到社区去提问吧。&lt;br /&gt;　 （4）在线&lt;a href="http://www.microsoft.com/china/MSDN/default.asp"&gt;&lt;span&gt;&lt;span&gt;中文MSDN&lt;/span&gt;&lt;/span&gt;（http://www.microsoft.com/china/MSDN/default.asp）&lt;/a&gt;；在线英文&lt;a href="http://msdn.microsoft.com/"&gt;&lt;span&gt;&lt;span&gt;MSDN（http://msdn.microsoft.com/）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;,考考你的E文，不过有金山词霸在，我都不怕，你还用怕什么呢！&lt;br /&gt;　　（5）&lt;a href="http://www.microsoft.com/china/net/"&gt;&lt;span&gt;&lt;span&gt;.NET主页（&lt;/span&gt;&lt;/span&gt;http://www.microsoft.com/china/net）&lt;/a&gt;&lt;br /&gt;　 （6）&lt;a href="http://www.microsoft.com/china/msdn/vstudio/prodinfo/overview.asp"&gt;&lt;span&gt;&lt;span&gt;Visual Studio .NET主页&lt;/span&gt;&lt;/span&gt;&lt;span&gt;（http://www.microsoft.com/china/msdn/vstudio/prodinfo/overview.asp)&lt;/span&gt;&lt;/a&gt;。&lt;br /&gt;　　 为什么选择VS.NET，为什么看好VS.NET,看看MicroSoft的Help文档有多详尽就知道了。如果你不去利用MicroSoft提供的庞大的Help资源，是不是有点对不起盖茨呢！　　&amp;nbsp;&lt;br /&gt;&lt;br /&gt;　　&lt;strong&gt;2.&lt;a href="http://www.csdn.net/"&gt;&lt;span&gt;&lt;span&gt;CSDN&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;　&lt;a href="http://www.csdn.net/"&gt;&lt;span&gt;http://www.csdn.net/&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;br /&gt;　　CSDN号称中国最大的开发者网络，确实不假。我最常去的是CSDN的&lt;a href="http://www.csdn.net/develop/"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;　　&lt;/span&gt;&lt;a href="http://www.csdn.net/develop"&gt;&lt;span&gt;文档（http://www.csdn.net/develop/）&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;　　&lt;span&gt;&lt;a href="http://expert.csdn.net/expert/forum.asp"&gt;论坛（http://expert.csdn.net/expert/forum.asp)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;　　只要你善于利用搜索功能，你在开发中遇到的多数问题可在&lt;a href="http://www.csdn.net/develop/"&gt;&lt;span&gt;文档&lt;/span&gt;&lt;/a&gt;和&lt;a href="http://expert.csdn.net/expert/forum.asp"&gt;&lt;span&gt;论坛&lt;/span&gt;&lt;/a&gt;中找到答案。如果你在开发过程中遇到疑难，而你又认为 BillGates帮不上你的忙，那么，你就上&lt;strong&gt;&lt;a href="http://www.csdn.net/"&gt;&lt;span&gt;&lt;span&gt;CSDN&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;吧，一定会让你满意的。&lt;br /&gt;　　 教你两个绝招，第一招，是&amp;ldquo;搜索大法&amp;rdquo;。遇到问题，首先是在CSDN的&lt;a href="http://www.csdn.net/develop/"&gt;&lt;span&gt;文档&lt;/span&gt;&lt;/a&gt;和&lt;a href="http://expert.csdn.net/expert/forum.asp"&gt;&lt;span&gt;论坛&lt;/span&gt;&lt;/a&gt;进行搜索，看有无类似答案。如不行，再下一招。&lt;br /&gt;　　 第二招，&amp;ldquo;提问大法&amp;rdquo;，只要有礼貌有诚意地在论坛提问，一定有许多人乐于回答你的问题。&lt;br /&gt;&lt;br /&gt;　　&lt;strong&gt;3.其他相关网站&lt;/strong&gt;&lt;br /&gt;　　 有不少网站开辟VS.NET专栏，常去看看，必有收获。&lt;br /&gt;　　&lt;a href="http://www.pconline.com.cn/pcedu/empolder/net/"&gt;&lt;span&gt;&lt;span&gt;pconline跟我学NET专栏&lt;/span&gt;（http://www.pconline.com.cn/pcedu/empolder/net/）&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;　&amp;nbsp;&lt;span&gt;&lt;a href="http://www.yesky.com/SoftChannel/72342380467978240/index.shtml"&gt;&lt;span&gt;yesky的Visual Studio.NET专栏&lt;/span&gt;（http://www.yesky.com/SoftChannel/72342380467978240/index.shtml）&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;　&amp;nbsp;&lt;a href="http://tech.ccidnet.com/pub/column/c340.html"&gt;&lt;span&gt;&lt;span&gt;ccidnet的NET专区&lt;/span&gt;&lt;/span&gt;&lt;span&gt;（http://tech.ccidnet.com/pub/column/c340.html）&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;strong&gt;4.资料下载&lt;/strong&gt;&lt;br /&gt;　　如果不是包月上网，那么下载大量资源，再断线慢慢研究就很有必要了。&lt;a href="http://www.91asp.cn/"&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;　&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;a href="ftp://qydn.vicp.net/"&gt;&lt;span&gt;&lt;span&gt;网友提供的大量VS.NET资源下载（ftp://qydn.vicp.net）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;　&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p id="aeaoofnhgocdbnbeljkmbjdmhbcokfdb-mousedown"&gt;&lt;span&gt;&lt;a href="http://www.b-xr.com/bbs.htm"&gt;&lt;span&gt;&lt;span&gt;北京希望电子出版社图书素材资料下载(http://www.b-xr.com/bbs.htm&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;　&lt;br /&gt;　　&lt;a href="http://www.wenyuan.com.cn/xiazai.htm"&gt;&lt;span&gt;&lt;span&gt;清华大学出版社VS.NET源码下载(http://www.wenyuan.com.cn/xiazai.htm&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;strong&gt;5.国外资源&lt;/strong&gt;&lt;br /&gt;　　 如果你的E文不错，不妨上E文网站去取经。&lt;br /&gt;　　&lt;a href="http://www.codestudy.com/"&gt;&lt;span&gt;&lt;span&gt;http://www.codestudy.com&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://www.codeproject.com/"&gt;&lt;span&gt;&lt;span&gt;http://www.codeproject.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://www.only4gurus.com/v2/index.asp"&gt;&lt;span&gt;&lt;span&gt;http://www.only4gurus.com/v2&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;span&gt;&lt;a href="http://www.gotdotnet.com/"&gt;&lt;span&gt;http://www.gotdotnet.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://www.aspnetpro.com/Default.asp"&gt;&lt;span&gt;&lt;span&gt;http://www.aspnetpro.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://www.dotnetgenius.com/"&gt;http://www.dotnetgenius.com/&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://www.devx.com/dotnet"&gt;http://www.devx.com/dotnet&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://www.c-sharpcorner.com/"&gt;http://www.c-sharpcorner.com/&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://www.csharphelp.com/"&gt;http://www.csharphelp.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://searchvb.techtarget.com/"&gt;http://searchvb.techtarget.com/&amp;nbsp;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://www.dotnet247.com/"&gt;http://www.dotnet247.com&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://www.datagridgirl.com/"&gt;http://www.datagridgirl.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;　　&lt;strong&gt;6.其他特色网站、专栏&lt;/strong&gt;&lt;br /&gt;　　&lt;span&gt;&lt;a href="http://www.csdn.net/develop/author/netauthor/Latitude/"&gt;&lt;span&gt;CSDN上Latitude的VS.NET专栏&lt;/span&gt;（http://www.csdn.net/develop/author/netauthor/Latitude/）&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.aspx8.cn/checkout.asp?webid=281"&gt;&lt;br /&gt;&lt;/a&gt;　&amp;nbsp;&lt;a href="http://xml.sz.luohuedu.net/xml/"&gt;&lt;span&gt;&lt;span&gt;【孟宪会之精彩世界】（http://xml.sz.luohuedu.net/xml/）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;　&lt;br /&gt;&lt;br /&gt;　　&lt;span&gt;&lt;a href="http://www.aspxcn.com/"&gt;&lt;span&gt;DotNet中华网&lt;/span&gt;（http://www.aspxcn.com/）&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;　　&amp;nbsp;&lt;a href="http://www.aspcool.com/"&gt;&lt;span&gt;&lt;span&gt;ASP酷（http://www.aspcool.com/）&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://www.chinaaspx.com/"&gt;&lt;span&gt;&lt;span&gt;http://www.chinaaspx.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;　　&lt;a href="http://218.56.11.178:8009/"&gt;http://218.56.11.178:8009/&lt;/a&gt;&amp;nbsp;　 海波.NET的水晶报表专栏&lt;br /&gt;&lt;br /&gt;　　　　asp.net资源吧&lt;br /&gt;&lt;br /&gt;　　&amp;nbsp;&lt;strong&gt;当然，还有一个地球人都知道的，全球最大的知识仓库，我不说，你也早就应该知道的，那不是&lt;a href="http://www.google.com/"&gt;&lt;span&gt;&lt;span&gt;http://www.google.com&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;又是什么！&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　&lt;strong&gt;&lt;span&gt;　&lt;span&gt;第五点体会：掌握并利用大量网络资源来辅助VS.NET的学习，你将事半功倍。&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p style="text-align: left;"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chendeshen/aggbug/2361854.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chendeshen/archive/2012/02/21/2361854.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/koeltp/archive/2012/02/21/2361143.html</id><title type="text">gridview分頁：第一頁 下一頁 1 2 3 4 上一頁 最末頁</title><summary type="text"/><published>2012-02-21T05:03:00Z</published><updated>2012-02-21T05:03:00Z</updated><author><name>追夢</name><uri>http://www.cnblogs.com/koeltp/</uri></author><link rel="alternate" href="http://www.cnblogs.com/koeltp/archive/2012/02/21/2361143.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/koeltp/archive/2012/02/21/2361143.html"/><content type="html">&lt;p&gt;效果圖：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/130654/2012022112532753.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;功能簡介：可使用上下鍵選中行，選中後點擊修改，textbox獲得gridview中的代碼的數據。對你有幫助的話，請記得要點擊&amp;ldquo;好文要頂&amp;rdquo;哦！！！不懂的，請留言。廢話不多說了，貼碼如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('1dc0fcb9-e83b-4ea6-9085-01be26a93a3a')"&gt;&#xD;
&lt;div id="cnblogs_code_open_1dc0fcb9-e83b-4ea6-9085-01be26a93a3a" &gt;&#xD;
&lt;pre&gt;&amp;lt;head runat=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;GridView分頁&amp;lt;/title&amp;gt;&lt;br /&gt;    &amp;lt;script type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;text/javascript&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; currentRowId = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; styleName = &lt;span style="color: #800000;"&gt;""&lt;/span&gt;;&lt;br /&gt;        function SelectRow(ev, strGvName) {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; e = window.&lt;span style="color: #0000ff;"&gt;event&lt;/span&gt; || ev;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; keyCode = -&lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (e.which == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;                keyCode = e.keyCode;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; IE   &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (e.which &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;br /&gt;                keyCode = e.which;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; All others   &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (keyCode == &lt;span style="color: #800080;"&gt;40&lt;/span&gt;)&lt;br /&gt;                MarkRow(currentRowId + &lt;span style="color: #800080;"&gt;1&lt;/span&gt;, strGvName);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (keyCode == &lt;span style="color: #800080;"&gt;38&lt;/span&gt;) {&lt;br /&gt;                MarkRow(currentRowId - &lt;span style="color: #800080;"&gt;1&lt;/span&gt;, strGvName);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            document.getElementById(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;NUM&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;).value = currentRowId;&lt;br /&gt;        }&lt;br /&gt;        function MarkRow(rowId, strGvName) {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; Grid = document.getElementById(strGvName);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; rowCount = Grid.rows.length;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (document.getElementById(strGvName + rowId) == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (rowId == rowCount) {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (document.getElementById(strGvName + currentRowId) != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;                document.getElementById(strGvName + currentRowId).style.backgroundColor = styleName;&lt;br /&gt;            currentRowId = rowId;&lt;br /&gt;            styleName = document.getElementById(strGvName + rowId).style.backgroundColor;&lt;br /&gt;            document.getElementById(strGvName + rowId).style.backgroundColor = &lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;red&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; obj = document.getElementById(strGvName);&lt;br /&gt;            obj.rows[rowId].cells[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].focus();&lt;br /&gt;            document.getElementById(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;NUM&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;).value = currentRowId;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    &amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;style type=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;text/css&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;        .hidden&lt;br /&gt;        {&lt;br /&gt;            display: none;&lt;br /&gt;        }&lt;br /&gt;    &amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('48220f2f-612d-436e-afd8-ab8e2fe39067')"&gt;&#xD;
&lt;div id="cnblogs_code_open_48220f2f-612d-436e-afd8-ab8e2fe39067" &gt;&#xD;
&lt;pre&gt;&amp;lt;form id=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;form1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; runat=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;    &amp;lt;div&amp;gt;&lt;br /&gt;        &amp;lt;br /&amp;gt;&lt;br /&gt;       &amp;lt;asp:Button ID=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnUpd&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; runat=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; TabIndex=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;3&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;修改&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;59px&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Font-Size=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;14px&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; OnClick=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnUpd_Click&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;        &amp;lt;asp:TextBox ID=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;NUM&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; runat=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; CssClass=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;hidden&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/asp:TextBox&amp;gt;&lt;br /&gt;        &amp;lt;asp:TextBox ID=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;tbValue&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; runat=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/asp:TextBox&amp;gt;&lt;br /&gt;        &amp;lt;asp:GridView ID=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;gvData&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; runat=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; AutoGenerateColumns=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;false&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;100%&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;            AllowPaging=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; PageIndex=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; PageSize=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;15&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; OnPageIndexChanging=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;gvData_PageIndexChanging&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;            OnRowCreated=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;gvData_RowCreated&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; OnRowDataBound=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;gvData_RowDataBound&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;            &amp;lt;PagerSettings FirstPageText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;首頁&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; NextPageText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;下一頁&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; PreviousPageText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;上一頁&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; LastPageText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;末頁&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                Mode=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;NumericFirstLast&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;            &amp;lt;Columns&amp;gt;&lt;br /&gt;                &amp;lt;asp:CommandField ShowSelectButton=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;True&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Visible=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;False&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;asp:BoundField DataField=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;STOCK_NO&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HeaderText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;代號&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;asp:BoundField DataField=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;STOCK_NAME&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HeaderText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;字段二&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;asp:BoundField DataField=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;FACT_NO&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HeaderText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;字段三&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;asp:BoundField DataField=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ADDRESS&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HeaderText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;字段四&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;asp:BoundField DataField=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MEMO_DESC&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HeaderText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;字段五&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;asp:BoundField DataField=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CARRYDOWN_YM&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HeaderText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;字段六&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;asp:BoundField DataField=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CLOSEDOWN_YM&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HeaderText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;字段七&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;asp:BoundField DataField=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CUST_FLAG&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HeaderText=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;字段八&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;            &amp;lt;/Columns&amp;gt;&lt;br /&gt;            &amp;lt;PagerStyle HorizontalAlign=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;            &amp;lt;AlternatingRowStyle BackColor=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LightBlue&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Wrap=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;        &amp;lt;/asp:GridView&amp;gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;/form&amp;gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web.UI;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web.UI.WebControls;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data.SqlClient;&lt;span style="background-color: #ff0000; color: #000000;"&gt;//請添加以下命名空間&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Drawing;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; _Default : System.Web.UI.Page&lt;br /&gt;{&lt;br /&gt;    SqlConnection con = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnection(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Server=SERVER\\xxx;Database=xxxx;User ID=xx;Pwd=xx;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; _i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;定義變量 ，查詢 Grid設定樣式有用到&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!Page.IsPostBack)&lt;br /&gt;        {&lt;br /&gt;            getBind();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; getBind()&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; str = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;select * from im01&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;        DataSet ds = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; DataSet();&lt;br /&gt;        SqlDataAdapter da = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlDataAdapter(str, con);&lt;br /&gt;        da.Fill(ds);&lt;br /&gt;        DataTable dt = ds.Tables[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;];&lt;br /&gt;        gvData.DataSource = dt;&lt;br /&gt;        gvData.DataBind();&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; gvData_PageIndexChanging(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, GridViewPageEventArgs e)&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; gvData_RowCreated(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, GridViewRowEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (e.Row.RowType == DataControlRowType.Pager)&lt;br /&gt;        {&lt;br /&gt;            Label label_Index = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Label();&lt;br /&gt;            LinkButton Button_IndexFirst = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; LinkButton();&lt;br /&gt;            LinkButton Button_IndexLast = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; LinkButton();&lt;br /&gt;            LinkButton Button_IndexNext = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; LinkButton();&lt;br /&gt;            LinkButton Button_IndexPrevious = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; LinkButton();&lt;br /&gt;&lt;br /&gt;            Button_IndexFirst.Text = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;第一頁 &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            Button_IndexFirst.CommandName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;first&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            Button_IndexFirst.ForeColor = Color.Blue;&lt;br /&gt;            Button_IndexFirst.Click += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; EventHandler(PageButtonClick);&lt;br /&gt;&lt;br /&gt;            Button_IndexNext.Text = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;   下一頁 &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            Button_IndexNext.CommandName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;next&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            Button_IndexNext.ForeColor = Color.Blue;&lt;br /&gt;&lt;br /&gt;            Button_IndexNext.Click += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; EventHandler(PageButtonClick);&lt;br /&gt;&lt;br /&gt;            Button_IndexPrevious.Text = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;前一頁 &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            Button_IndexPrevious.CommandName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;previous&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            Button_IndexPrevious.ForeColor = Color.Blue;&lt;br /&gt;            Button_IndexPrevious.Click += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; EventHandler(PageButtonClick);&lt;br /&gt;&lt;br /&gt;            Button_IndexLast.Text = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;最末頁 &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            Button_IndexLast.CommandName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;last&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            Button_IndexLast.ForeColor = Color.Blue;&lt;br /&gt;            Button_IndexLast.Click += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; EventHandler(PageButtonClick);&lt;br /&gt;&lt;br /&gt;            e.Row.Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls.AddAt(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, (Button_IndexFirst));&lt;br /&gt;            e.Row.Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls.AddAt(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;, (Button_IndexPrevious));&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; controlTmp = e.Row.Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls.Count - &lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;            e.Row.Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[controlTmp].Controls.Add(Button_IndexNext);&lt;br /&gt;            e.Row.Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;].Controls[controlTmp].Controls.Add(Button_IndexLast);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; gvData_RowDataBound(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, GridViewRowEventArgs e)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (e.Row.RowType == DataControlRowType.DataRow)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置悬浮鼠标指针形状为"小手"   &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            e.Row.Attributes[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;style&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;] = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Cursor:hand&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; strGvName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;gvData&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;        e.Row.Attributes.Add(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;id&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, strGvName + _i.ToString());&lt;br /&gt;        e.Row.Attributes.Add(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;onKeyDown&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SelectRow(event,'&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + strGvName + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;');&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;        e.Row.Attributes.Add(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;onClick&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MarkRow(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + _i.ToString() + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;,'&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + strGvName + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;');&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;        e.Row.Attributes.Add(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;tabindex&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;        _i++;&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; PageButtonClick(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        LinkButton clickedButton = ((LinkButton)sender);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (clickedButton.CommandName == &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;first&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            gvData.PageIndex = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (clickedButton.CommandName == &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;next&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (gvData.PageIndex &amp;lt; gvData.PageCount - &lt;span style="color: #800080;"&gt;1&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                gvData.PageIndex += &lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (clickedButton.CommandName == &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;previous&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (gvData.PageIndex &amp;gt;= &lt;span style="color: #800080;"&gt;1&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                gvData.PageIndex -= &lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (clickedButton.CommandName == &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;last&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            gvData.PageIndex = gvData.PageCount - &lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;        getBind();&lt;br /&gt;    } &lt;br /&gt;    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;修改&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; btnUpd_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; intNum = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.NUM.Text == &lt;span style="color: #800000;"&gt;""&lt;/span&gt; || &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.NUM.Text == &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;        {&lt;br /&gt;            Response.Write(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;lt;script type=\"text/javascript\"&amp;gt;alert('請先查詢並選擇一筆資料!')&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            intNum = Convert.ToInt16(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.NUM.Text) - &lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;            tbValue.Text = &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.gvData.Rows[intNum].Cells[&lt;span style="color: #800080;"&gt;1&lt;/span&gt;].Text.ToString();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/koeltp/aggbug/2361143.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/koeltp/archive/2012/02/21/2361143.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zgaspnet/archive/2012/02/21/2360841.html</id><title type="text">客户端存在潜在危险request.from</title><summary type="text"/><published>2012-02-21T01:30:00Z</published><updated>2012-02-21T01:30:00Z</updated><author><name>张扬个性，敢为天下先</name><uri>http://www.cnblogs.com/zgaspnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zgaspnet/archive/2012/02/21/2360841.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zgaspnet/archive/2012/02/21/2360841.html"/><content type="html">&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/280515/2012022109274692.png" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;文本框中输入&amp;lt;br&amp;gt;等一些字符串会出现如上图的错误；&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;解决方案：在WEB.CONFIG文件中添加配置文件&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;system.web&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;pages validateRequest="false"/&amp;gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;lt;/system.web&amp;gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zgaspnet/aggbug/2360841.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zgaspnet/archive/2012/02/21/2360841.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wavegui/archive/2012/02/20/2360508.html</id><title type="text">使用Memcached提高.NET应用程序的性能</title><summary type="text"/><published>2012-02-20T13:20:00Z</published><updated>2012-02-20T13:20:00Z</updated><author><name>wavegui</name><uri>http://www.cnblogs.com/wavegui/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wavegui/archive/2012/02/20/2360508.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wavegui/archive/2012/02/20/2360508.html"/><content type="html">&lt;div &gt;&#xD;
&lt;p&gt;在应用程序运行的过程中总会有一些经常需要访问并且变化不频繁的数据，如果每次获取这些数据都需要从数据库或者外部文件系统中去读取，性能肯定会受到影响，所以通常的做法就是将这部分数据缓存起来，只要数据没有发生变化每次获取这些数据的时候直接从内存中区获取性能肯定会大大地提高。在.NET中提供了一个Cache类可以实现这些功能。在ASP.NET中可以通过HttpContext 对象的 Cache 属性或 Page 对象的 Cache 属性来获取这个类的实例。 在大部分情况下我们都可以使用Cache类来提高ASP.NET的性能，但是使用Cache类也有一些不足，比如我们不能指定Cache类所占用的内存的大小，此外在Cache中缓存的数据没有办法被另一台机器上的应用程序直接访问，因此在本文中提出另一种数据缓存方案，那就是使用分布式缓存。分布式缓存的特点是缓存的数据不必和应用程序在同一台机器上，从而大大增强了缓存数据的复用性。在本文介绍如何在.NET应用中使用Memcache作为分布式缓存。&lt;br /&gt;&lt;strong&gt;Memcached介绍&lt;br /&gt;&lt;/strong&gt;Memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。在通常的应用中我们都会将数据保存到数据库中，每次需要的时候都会从数据库去查询这些数据，如果应用程序的用户很多就会出现大量并发访问数据库的情况，这样就会增加应用程序的响应时间，使用Memcached就可以有效解决这个问题。memcached是高性能的分布式内存缓存服务器。一般的使用目的是，通过缓存数据库查询结果，减少数据库访问次数，以提高动态Web应用的速度、提高可扩展性。像大名鼎鼎的Facebook网站就使用了Memcached。周公稍后会提供Windows平台上32位和64位的Memcached程序。&lt;br /&gt;为了提高性能，Memcached中的数据都保存在Memcached内置的存储空间中。因为当Memcached重启会导致其中的数据全部丢失，所以一般的方案是将数据保存在数据库中，每次请求数据的时候先查看在Memcached有没有缓存，如果有就直接从缓存中取出数据；如果没有，就从数据库中取出数据返回给应用程序并将请求的数据缓存到Memcached中，这样一来下次请求相同的数据就可以直接从Memcached中读取而不用再去查数据库了；一旦对数据有更新，同时更新数据库和Memcached。&lt;br /&gt;Memcached是一个命令行窗口程序，可以在命令行窗口中启动也可以封装在系统服务中启动。在启动Memcached时需要提供一些必须的参数，指定Memcached运行时监听的端口和最大使用的内存大小等。如果缓存的数据大小超过指定内存，那么Memcached就会按照LRU(Least Recently Used)算法自动&amp;ldquo;删除&amp;rdquo;不使用的缓存（标记为失效），新增的缓存数据就可以使用这些标记为失效的数据所占用的内存，这样就不用担心Memcached超出所指定内存的问题。此外，为了提高性能，在缓存数据过期后Memcached并不是从物理内存中删除缓存的数据，仅仅在取出改数据的时候检查它是否已经过了有效期。&lt;br /&gt;目前有多种平台的Memcached版本，比如Linux、FreeBSD、Solaris (memcached 1.2.5以上版本)、Mac OS X及Windows平台，在Windows平台上还有32位和64位版本。&lt;br /&gt;Memcached有一套协议，利用这套协议可以对Memcached进行数据存取和查看Memcached的状态，很多程序语言都依据这套协议来操作Memcached，比如PHP、Java、C、C++及C#等。&lt;br /&gt;获取了对应平台的Memcached版本就可以运行Memcached了。在这里仅以Windows平台上的32位Memcached为例。&lt;br /&gt;运行Memcached：&lt;br /&gt;memcached.exe -p 11121 -m 64&lt;br /&gt;上面的命令是运行Memcached，指定它的监听端口是11121（这是它的默认端口，可以指定为其它大于1024的端口，因为小于1024的端口已经有了默认指定），最大使用内存为64m，如果启用了Windows防火墙，切记要在防火墙上打开这个端口。&lt;br /&gt;在调试程序时可以使用下面的命令行来运行：&lt;br /&gt;memcached.exe -p 11121 -m 64 -vv&lt;br /&gt;这样就会看到如下的结果：&lt;br /&gt;slab class&amp;nbsp;&amp;nbsp; 1: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 88 perslab 11915&lt;br /&gt;slab class&amp;nbsp;&amp;nbsp; 2: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp; 112 perslab&amp;nbsp; 9362&lt;br /&gt;slab class&amp;nbsp;&amp;nbsp; 3: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp; 144 perslab&amp;nbsp; 7281&lt;br /&gt;slab class&amp;nbsp;&amp;nbsp; 4: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp; 184 perslab&amp;nbsp; 5698&lt;br /&gt;slab class&amp;nbsp;&amp;nbsp; 5: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp; 232 perslab&amp;nbsp; 4519&lt;br /&gt;slab class&amp;nbsp;&amp;nbsp; 6: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp; 296 perslab&amp;nbsp; 3542&lt;br /&gt;slab class&amp;nbsp;&amp;nbsp; 7: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp; 376 perslab&amp;nbsp; 2788&lt;br /&gt;slab class&amp;nbsp;&amp;nbsp; 8: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp; 472 perslab&amp;nbsp; 2221&lt;br /&gt;slab class&amp;nbsp;&amp;nbsp; 9: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp; 592 perslab&amp;nbsp; 1771&lt;br /&gt;slab class&amp;nbsp; 10: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp; 744 perslab&amp;nbsp; 1409&lt;br /&gt;slab class&amp;nbsp; 11: chunk size&amp;nbsp;&amp;nbsp;&amp;nbsp; 936 perslab&amp;nbsp; 1120&lt;br /&gt;slab class&amp;nbsp; 12: chunk size&amp;nbsp;&amp;nbsp; 1176 perslab&amp;nbsp;&amp;nbsp; 891&lt;br /&gt;slab class&amp;nbsp; 13: chunk size&amp;nbsp;&amp;nbsp; 1472 perslab&amp;nbsp;&amp;nbsp; 712&lt;br /&gt;slab class&amp;nbsp; 14: chunk size&amp;nbsp;&amp;nbsp; 1840 perslab&amp;nbsp;&amp;nbsp; 569&lt;br /&gt;slab class&amp;nbsp; 15: chunk size&amp;nbsp;&amp;nbsp; 2304 perslab&amp;nbsp;&amp;nbsp; 455&lt;br /&gt;slab class&amp;nbsp; 16: chunk size&amp;nbsp;&amp;nbsp; 2880 perslab&amp;nbsp;&amp;nbsp; 364&lt;br /&gt;slab class&amp;nbsp; 17: chunk size&amp;nbsp;&amp;nbsp; 3600 perslab&amp;nbsp;&amp;nbsp; 291&lt;br /&gt;slab class&amp;nbsp; 18: chunk size&amp;nbsp;&amp;nbsp; 4504 perslab&amp;nbsp;&amp;nbsp; 232&lt;br /&gt;slab class&amp;nbsp; 19: chunk size&amp;nbsp;&amp;nbsp; 5632 perslab&amp;nbsp;&amp;nbsp; 186&lt;br /&gt;slab class&amp;nbsp; 20: chunk size&amp;nbsp;&amp;nbsp; 7040 perslab&amp;nbsp;&amp;nbsp; 148&lt;br /&gt;slab class&amp;nbsp; 21: chunk size&amp;nbsp;&amp;nbsp; 8800 perslab&amp;nbsp;&amp;nbsp; 119&lt;br /&gt;slab class&amp;nbsp; 22: chunk size&amp;nbsp; 11000 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 95&lt;br /&gt;slab class&amp;nbsp; 23: chunk size&amp;nbsp; 13752 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 76&lt;br /&gt;slab class&amp;nbsp; 24: chunk size&amp;nbsp; 17192 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 60&lt;br /&gt;slab class&amp;nbsp; 25: chunk size&amp;nbsp; 21496 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 48&lt;br /&gt;slab class&amp;nbsp; 26: chunk size&amp;nbsp; 26872 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 39&lt;br /&gt;slab class&amp;nbsp; 27: chunk size&amp;nbsp; 33592 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 31&lt;br /&gt;slab class&amp;nbsp; 28: chunk size&amp;nbsp; 41992 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 24&lt;br /&gt;slab class&amp;nbsp; 29: chunk size&amp;nbsp; 52496 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 19&lt;br /&gt;slab class&amp;nbsp; 30: chunk size&amp;nbsp; 65624 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 15&lt;br /&gt;slab class&amp;nbsp; 31: chunk size&amp;nbsp; 82032 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&lt;br /&gt;slab class&amp;nbsp; 32: chunk size 102544 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&lt;br /&gt;slab class&amp;nbsp; 33: chunk size 128184 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;br /&gt;slab class&amp;nbsp; 34: chunk size 160232 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;br /&gt;slab class&amp;nbsp; 35: chunk size 200296 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;br /&gt;slab class&amp;nbsp; 36: chunk size 250376 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;br /&gt;slab class&amp;nbsp; 37: chunk size 312976 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;slab class&amp;nbsp; 38: chunk size 391224 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;slab class&amp;nbsp; 39: chunk size 489032 perslab&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;&amp;lt;96 server listening&lt;br /&gt;&amp;lt;112 server listening&lt;br /&gt;&amp;lt;116 send buffer was 8192, now 268435456&lt;br /&gt;&amp;lt;116 server listening (udp)&lt;br /&gt;在客户端还可以通过telnet来查看和操作Memcached，前提是服务器端和客户端都支持Telnet协议，在Windows7和Windows2008中默认都不支持，需要在控制面板中安装和启用。&lt;br /&gt;首先打开控制面板，然后点击&amp;ldquo;打开或关闭Windows功能&amp;rdquo;，如下图所示：&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://img1.51cto.com/attachment/201103/202832946.jpg" target="_blank"&gt;&lt;img src="http://img1.51cto.com/attachment/201103/202832946.jpg" alt="" width="650" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;点击&amp;ldquo;打开或关闭Windows功能&amp;rdquo;之后会看到当前系统启用的功能的状态，根据当前机器选择打开Telnet服务器端或者客户端功能，如下图所示：&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://img1.51cto.com/attachment/201103/202850159.jpg" target="_blank"&gt;&lt;img src="http://img1.51cto.com/attachment/201103/202850159.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;经过上面的操作之后就可以在客服端远程查看Memcached的状态或者操作Memcached了。下面的命令就是连接到Memcached：&lt;br /&gt;telnet localhost 11121&lt;br /&gt;连接之后会出现一个命令行窗口，在这个命令行窗口中输入"stats"就可以看到当前Memcached的状态，如下就是刚刚启动的Memcached的状态数据：&lt;br /&gt;STAT pid 852&lt;br /&gt;STAT uptime 1399&lt;br /&gt;STAT time 1300979378&lt;br /&gt;STAT version 1.2.5&lt;br /&gt;STAT pointer_size 32&lt;br /&gt;STAT curr_items 0&lt;br /&gt;STAT total_items 0&lt;br /&gt;STAT bytes 0&lt;br /&gt;STAT curr_connections 3&lt;br /&gt;STAT total_connections 5&lt;br /&gt;STAT connection_structures 4&lt;br /&gt;STAT cmd_get 0&lt;br /&gt;STAT cmd_set 0&lt;br /&gt;STAT get_hits 0&lt;br /&gt;STAT get_misses 0&lt;br /&gt;STAT evictions 0&lt;br /&gt;STAT bytes_read 23&lt;br /&gt;STAT bytes_written 415&lt;br /&gt;STAT limit_maxbytes 67108864&lt;br /&gt;STAT threads 1&lt;br /&gt;END&lt;br /&gt;通过这个数据我们就可以了解Memcached的状态了。&lt;br /&gt;这些数据所代表的意义如下：&lt;br /&gt;pid：32u，服务器进程ID。 &lt;br /&gt;uptime：32u， 服务器运行时间，单位秒。 &lt;br /&gt;time ：32u， 服务器当前的UNIX时间。&lt;br /&gt;version ：string， 服务器的版本号。 &lt;br /&gt;curr_items ：32u， 服务器当前存储的内容数量 Current number of items stored by the server &lt;br /&gt;total_items ：32u， 服务器启动以来存储过的内容总数。&lt;br /&gt;bytes ：64u， 服务器当前存储内容所占用的字节数。&lt;br /&gt;curr_connections ：32u， 连接数量。 &lt;br /&gt;total_connections ：32u， 服务器运行以来接受的连接总数。&lt;br /&gt;connection_structures：32u， 服务器分配的连接结构的数量。 &lt;br /&gt;cmd_get ：32u， 取回请求总数。 &lt;br /&gt;cmd_set ：32u， 存储请求总数。 &lt;br /&gt;get_hits ：32u， 请求成功的总次数。&lt;br /&gt;get_misses ：32u， 请求失败的总次数。&lt;br /&gt;bytes_read ：64u， 服务器从网络读取到的总字节数。&lt;br /&gt;bytes_written ：64u， 服务器向网络发送的总字节数。&lt;br /&gt;limit_maxbytes ：32u， 服务器在存储时被允许使用的字节总数。&lt;br /&gt;上面的描述中32u和64u表示32位和64位无符号整数，string表示是string类型数据。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;strong&gt;在.NET中应用Memcached&lt;br /&gt;&lt;/strong&gt;有很多.NET版本的Memcached客户端程序，在这里周公使用的Enyim Memcached，可以到&lt;a href="https://github.com/enyim/EnyimMemcached/"&gt;https://github.com/enyim/EnyimMemcached/&lt;/a&gt;下载最新的版本。&lt;br /&gt;要想在项目中使用Memcached，需要添加对Enyim.Caching.dll的应用。除此之外，我们可能还需要在config文件中配置Memcached的信息（也可以在程序代码中指定，但那样不灵活），如下就是一个config文件配置的例子：&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;ol &gt;&#xD;
&lt;li &gt;&lt;span&gt;&lt;span &gt;&amp;lt;?&lt;/span&gt;&lt;span &gt;xml&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;version&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"1.0"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;encoding&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"utf-8"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;?&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;configuration&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;configSections&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;sectionGroup&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"enyim.com"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;section&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"memcached"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;type&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"Enyim.Caching.Configuration.MemcachedClientSection,&amp;nbsp;Enyim.Caching"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;sectionGroup&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;configSections&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;enyim.com&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;protocol&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"Binary"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;memcached&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;servers&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;add&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;address&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"localhost"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;port&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"11121"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;add&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;address&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"localhost"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;port&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"11131"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;add&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;address&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"localhost"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;port&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"11141"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;add&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;address&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"localhost"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;port&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"11151"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;--&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;servers&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;socketPool&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;minPoolSize&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"10"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;maxPoolSize&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"100"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;connectionTimeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"00:00:10"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;deadTimeout&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span &gt;"00:02:00"&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;memcached&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;enyim.com&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;configuration&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;br /&gt;如果我们配置了多个Memcached的实例，可以想上面的注释部分那样在&amp;lt;servers&amp;gt;节点下添加多个Memcached的实例配置。&lt;br /&gt;这里需要说明的是如果我们需要向Memcached中添加自定义数据类型时，我们需要将该数据类型添加上[Serializable]标记。&lt;br /&gt;下面是一个Enyim Memcached的例子：&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;ol &gt;&#xD;
&lt;li &gt;&lt;span&gt;&lt;span &gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;System; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span &gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;System.Collections.Generic; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span &gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;System.Linq; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span &gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;System.Text; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span &gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;Enyim.Caching; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span &gt;using&lt;/span&gt;&lt;span&gt;&amp;nbsp;Enyim.Caching.Memcached; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span &gt;/* &lt;/span&gt;&amp;nbsp;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;span &gt;&amp;nbsp;*&amp;nbsp;作者：周公(zhoufoxcn) &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&lt;span &gt;&amp;nbsp;*&amp;nbsp;日期：2011-03-24 &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;span &gt;&amp;nbsp;*&amp;nbsp;原文出处：http://blog.csdn.net/zhoufoxcn&amp;nbsp;或http://zhoufoxcn.blog.51cto.com &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&lt;span &gt;&amp;nbsp;*&amp;nbsp;版权说明：本文可以在保留原文出处的情况下使用于非商业用途，周公对此不作任何担保或承诺。 &lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&lt;span &gt;&amp;nbsp;*&amp;nbsp;*/&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span &gt;namespace&lt;/span&gt;&lt;span&gt;&amp;nbsp;MemcachedMonitor &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;[Serializable] &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;Person &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;UserId&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span &gt;get&lt;/span&gt;&lt;span&gt;;&amp;nbsp;&lt;/span&gt;&lt;span &gt;set&lt;/span&gt;&lt;span&gt;;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;string&lt;/span&gt;&lt;span&gt;&amp;nbsp;UserName&amp;nbsp;{&amp;nbsp;&lt;/span&gt;&lt;span &gt;get&lt;/span&gt;&lt;span&gt;;&amp;nbsp;&lt;/span&gt;&lt;span &gt;set&lt;/span&gt;&lt;span&gt;;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;class&lt;/span&gt;&lt;span&gt;&amp;nbsp;MemcachedDemo &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;private&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;static&lt;/span&gt;&lt;span&gt;&amp;nbsp;MemcachedClient&amp;nbsp;client&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span &gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;MemcachedClient(&lt;/span&gt;&lt;span &gt;"enyim.com/memcached"&lt;/span&gt;&lt;span&gt;); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;SetDemo() &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Person&amp;nbsp;person&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span &gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;Person&amp;nbsp;{&amp;nbsp;UserId&amp;nbsp;=&amp;nbsp;1,&amp;nbsp;UserName&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span &gt;"李刚"&lt;/span&gt;&lt;span&gt;&amp;nbsp;}; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;//不带过期时间的存储，Memcached将根据LRU来决定过期策略 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;bool&lt;/span&gt;&lt;span&gt;&amp;nbsp;success=client.Store(StoreMode.Add,&amp;nbsp;person.UserName,&amp;nbsp;person); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;//带过期时间的缓存 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;//bool&amp;nbsp;success&amp;nbsp;=&amp;nbsp;client.Store(StoreMode.Add,&amp;nbsp;person.UserName,&amp;nbsp;person,&amp;nbsp;DateTime.Now.AddMinutes(10)); &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span &gt;"存储[{0}]的结果：{1}"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;person.UserName,&amp;nbsp;success); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;GetDemo() &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Person&amp;nbsp;person&amp;nbsp;=&amp;nbsp;client.Get&amp;lt;Person&amp;gt;(&lt;/span&gt;&lt;span &gt;"李刚"&lt;/span&gt;&lt;span&gt;); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(person&amp;nbsp;!=&amp;nbsp;&lt;/span&gt;&lt;span &gt;null&lt;/span&gt;&lt;span&gt;) &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span &gt;"取回[{0}]的结果&amp;mdash;&amp;mdash;UserId:{1},UserName:{2}"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span &gt;"李刚"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;person.UserId,&amp;nbsp;person.UserName); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;else&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span &gt;"取回[{0}]失败!"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span &gt;"李刚"&lt;/span&gt;&lt;span&gt;); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;public&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span &gt;void&lt;/span&gt;&lt;span&gt;&amp;nbsp;MultiGetDemo() &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;&lt;/span&gt;&lt;span &gt;string&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;nbsp;personNameList&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;span &gt;new&lt;/span&gt;&lt;span&gt;&amp;nbsp;List&amp;lt;&lt;/span&gt;&lt;span &gt;string&lt;/span&gt;&lt;span&gt;&amp;gt;(); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;for&lt;/span&gt;&lt;span&gt;&amp;nbsp;(&lt;/span&gt;&lt;span &gt;int&lt;/span&gt;&lt;span&gt;&amp;nbsp;i&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;i&amp;nbsp;&amp;lt;&amp;nbsp;10;&amp;nbsp;i++) &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;personNameList.Add(&lt;/span&gt;&lt;span &gt;"李刚00"&lt;/span&gt;&lt;span&gt;&amp;nbsp;+&amp;nbsp;i); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;//批量获取，只通过一次网络通讯就取回所有personNameList中的指定的所有数据 &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IDictionary&amp;lt;&lt;/span&gt;&lt;span &gt;string&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span &gt;object&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;nbsp;resultList&amp;nbsp;=&amp;nbsp;client.Get(personNameList); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Person&amp;nbsp;person; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;foreach&lt;/span&gt;&lt;span&gt;&amp;nbsp;(KeyValuePair&amp;lt;&lt;/span&gt;&lt;span &gt;string&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span &gt;object&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;nbsp;item&amp;nbsp;&lt;/span&gt;&lt;span &gt;in&lt;/span&gt;&lt;span&gt;&amp;nbsp;resultList) &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;person&amp;nbsp;=&amp;nbsp;item.Value&amp;nbsp;&lt;/span&gt;&lt;span &gt;as&lt;/span&gt;&lt;span&gt;&amp;nbsp;Person; &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;if&lt;/span&gt;&lt;span&gt;&amp;nbsp;(person&amp;nbsp;!=&amp;nbsp;&lt;/span&gt;&lt;span &gt;null&lt;/span&gt;&lt;span&gt;) &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span &gt;"取回[{0}]的结果&amp;mdash;&amp;mdash;UserId:{1},UserName:{2}"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span &gt;"李刚"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;person.UserId,&amp;nbsp;person.UserName); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span &gt;else&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine(&lt;/span&gt;&lt;span &gt;"取回[{0}]失败!"&lt;/span&gt;&lt;span&gt;,&amp;nbsp;&lt;/span&gt;&lt;span &gt;"李刚"&lt;/span&gt;&lt;span&gt;); &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li &gt;&lt;span&gt;} &amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span&gt;}&amp;nbsp;&lt;/span&gt;&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;br /&gt;说明：如果需要一次从Memcached中取回多个缓存的数据，可以参考MultiGetDemo()方法，这样一来只需要一次网络通讯就可以取回全部数据，减少网络连接时间。此外，在Memcached客户端可以使用Text或者Binary协议，经过周公千万次测试比较，使用Binary协议性能略高于使用Text协议。在上面的config文件中周公就配置使用了Binary协议。&lt;br /&gt;总结，使用Memcached这样的分布式缓存可以大大提高应用程序的性能，经过周公测试，正确使用Memcached可以将单台服务器的并发访问数从20提高到1000左右，也就是提高了50倍，这是一个相当客观的提升！限于篇幅，关于Memcached的更深更详细的用法没有在本篇介绍，此文算作抛砖引玉，读者可以自行参考其它相关资料。&lt;/p&gt;&#xD;
&lt;p&gt;周公&lt;br /&gt;2011-03-25&lt;/p&gt;&#xD;
&lt;p&gt;本文出自 &amp;ldquo;&lt;a href="http://zhoufoxcn.blog.51cto.com/"&gt;周公的专栏&lt;/a&gt;&amp;rdquo; 博客，请务必保留此出处&lt;a href="http://zhoufoxcn.blog.51cto.com/792419/528212"&gt;http://zhoufoxcn.blog.51cto.com/792419/528212&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/wavegui/aggbug/2360508.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wavegui/archive/2012/02/20/2360508.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/sitemanager/archive/2012/02/20/2360259.html</id><title type="text">『C#基础』XML文件的读与写</title><summary type="text"/><published>2012-02-20T09:35:00Z</published><updated>2012-02-20T09:35:00Z</updated><author><name>丛峻峰</name><uri>http://www.cnblogs.com/sitemanager/</uri></author><link rel="alternate" href="http://www.cnblogs.com/sitemanager/archive/2012/02/20/2360259.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/sitemanager/archive/2012/02/20/2360259.html"/><content type="html">&lt;p&gt;几点说明&lt;/p&gt; &lt;ol&gt; &lt;li&gt;由于手头正好有一个程序上有现成的读写XML的代码，所以就近研究一下~&lt;/li&gt; &lt;li&gt;代码的版本是.NET 1.1 的~&lt;/li&gt; &lt;li&gt;使用到的命名空间：&lt;/li&gt; &lt;ol&gt; &lt;li&gt;System.Xml&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;&lt;strong&gt;读取XML步骤&lt;/strong&gt;&lt;/li&gt; &lt;ol&gt; &lt;li&gt;实例化一个XmlDocument对象&lt;/li&gt; &lt;li&gt;使用XmlDocument.Load(文件目录+文件名称)方法将XML文件读到内存中&lt;/li&gt; &lt;li&gt;使用foreach迭代与XmlElement对象来遍历已经读到内存中的XmlDocument.DocumentElement&lt;/li&gt; &lt;li&gt;使用XmlElement[Key].InnerText来读取对应Key元素的值&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;&lt;strong&gt;写入XML步骤&lt;/strong&gt;&lt;/li&gt; &lt;ol&gt; &lt;li&gt;将要写入的XML文件读入内存&lt;/li&gt; &lt;li&gt;使用迭代来检查一下XML中是否有想要写入的节点&lt;/li&gt; &lt;li&gt;如果有，则使用XmlElement[Key].InnerText = Value&lt;/li&gt; &lt;li&gt;如果没有，则使用XmlElement Key = XmlDocument.CreateElement("Key")来创建一个Xml节点&lt;/li&gt; &lt;ol&gt; &lt;li&gt;使用XmlElement Child_Key = XmlDocument.CreateElement("Child_Key")再创建一个Xml节点&lt;/li&gt; &lt;li&gt;使用Child_Key.InnerText = "Value";来赋节点值&lt;/li&gt; &lt;li&gt;使用Key.AppendChild(Child_Key)来给对应的Key添加一个子节点&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;使用System.IO.FileInfo info = new System.IO.FileInfo(路径+Xml文件名)来获取文件信息&lt;/li&gt; &lt;ol&gt; &lt;li&gt;使用info.Attributes来获取文件的属性&lt;/li&gt; &lt;li&gt;使用info.Attributes == System.IO.FileAttributes.ReadOnly来确定文件是否是只读&lt;/li&gt; &lt;li&gt;如果是只读，则可以会用System.IO.FileAttributes.Normal来恢复文件初始属性，以解掉Xml文件的只读属性&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;使用XmlDocument.Save(路径+Xml文件名);来将之前写入数据的XML保存&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;样例界面&lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sitemanager/201202/201202201735038807.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/sitemanager/201202/201202201735038284.png" width="385" height="179"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sitemanager/201202/201202201735041348.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/sitemanager/201202/201202201735048873.png" width="385" height="179"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/sitemanager/201202/201202201735048350.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/sitemanager/201202/201202201735041971.png" width="382" height="179"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;参考代码&lt;/p&gt; &lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;pre&gt;&lt;img id="Code_Closed_Image_32209" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_32209').style.display='none'; document.getElementById('Code_Open_Image_32209').style.display='inline'; document.getElementById('Code_Open_Text_32209').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" height="16"&gt;&lt;img style="display: none" id="Code_Open_Image_32209" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_32209').style.display='none'; getElementById('Code_Closed_Image_32209').style.display='inline'; getElementById('Code_Closed_Text_32209').style.display='inline';" align="top" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" height="16"&gt;&lt;span id="Code_Closed_Text_32209" &gt;Data Binding Example - CS&lt;/span&gt;&lt;span style="display: none" id="Code_Open_Text_32209"&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Collections.Generic;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Linq;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Text;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Controls;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Data;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Documents;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Input;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Media;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Media.Imaging;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Shapes;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Xml;&#xD;
&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.IO;&#xD;
&#xD;
&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; csdemo2008.Wpf_Spring.XmlWindow&#xD;
{&#xD;
    &lt;span style="color: #808080"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #808080"&gt;/// XmlWindow.xaml 的交互逻辑&lt;/span&gt;&#xD;
    &lt;span style="color: #808080"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&#xD;
    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; partial &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; XmlWindow : Window&#xD;
    {&#xD;
        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; XmlWindow()&#xD;
        {&#xD;
            InitializeComponent();&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; btnClose_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&#xD;
        {&#xD;
            &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.Close();&#xD;
        }&#xD;
&#xD;
        XmlDocument doc = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; XmlDocument();&#xD;
        &lt;span style="color: #008000"&gt;// 写入XML文件&lt;/span&gt;&#xD;
        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; btnWrite_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&#xD;
        {&#xD;
            &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; nodeText = tbNode.Text.Trim();&#xD;
            &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&#xD;
            {&#xD;
                doc.Load("&lt;span style="color: #8b0000"&gt;God.xml&lt;/span&gt;");&#xD;
            }&#xD;
            &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;&#xD;
            {&#xD;
                XmlTextWriter writer = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; XmlTextWriter("&lt;span style="color: #8b0000"&gt;God.xml&lt;/span&gt;", Encoding.UTF8);&#xD;
                writer.WriteStartElement("&lt;span style="color: #8b0000"&gt;rootNode&lt;/span&gt;");&#xD;
                writer.WriteStartElement("&lt;span style="color: #8b0000"&gt;innerNode&lt;/span&gt;");&#xD;
                writer.WriteAttributeString("&lt;span style="color: #8b0000"&gt;name&lt;/span&gt;", "&lt;span style="color: #8b0000"&gt;InnerNode&lt;/span&gt;");&#xD;
                writer.WriteStartElement("&lt;span style="color: #8b0000"&gt;childNode&lt;/span&gt;");&#xD;
                writer.WriteEndElement();&#xD;
                writer.WriteEndElement();&#xD;
                writer.WriteEndElement();&#xD;
                writer.Close();&#xD;
&#xD;
                doc.Load("&lt;span style="color: #8b0000"&gt;God.xml&lt;/span&gt;");&#xD;
            }&#xD;
&#xD;
            &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isExist = &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&#xD;
            &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (XmlElement element &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; doc.DocumentElement)&#xD;
            {&#xD;
                &lt;span style="color: #008000"&gt;// 这里读入的element是doc的第一级子节点，也就是innerNode&lt;/span&gt;&#xD;
                &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (element.Name == "&lt;span style="color: #8b0000"&gt;innerNode&lt;/span&gt;" &amp;amp;&amp;amp; element.HasChildNodes)&#xD;
                {&#xD;
                    &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (XmlNode node &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; element.ChildNodes)&#xD;
                    {&#xD;
                        &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (node.Name == "&lt;span style="color: #8b0000"&gt;childNode&lt;/span&gt;" &amp;amp;&amp;amp; node.InnerText != nodeText)&#xD;
                        {&#xD;
                            node.InnerText = nodeText;&#xD;
                        }&#xD;
                        isExist = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&#xD;
                    }&#xD;
                }&#xD;
                &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
                {&#xD;
                    doc.RemoveChild(element);&#xD;
                }&#xD;
            }&#xD;
&#xD;
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (isExist == &lt;span style="color: #0000ff"&gt;false&lt;/span&gt;)&#xD;
            {&#xD;
                XmlElement elementRoot = doc.CreateElement("&lt;span style="color: #8b0000"&gt;innerNode&lt;/span&gt;");&#xD;
                XmlElement elementInner = doc.CreateElement("&lt;span style="color: #8b0000"&gt;childNode&lt;/span&gt;");&#xD;
&#xD;
                elementInner.InnerText = "&lt;span style="color: #8b0000"&gt;『峻之岭峰』- http://www.cnblogs.com/sitemanager/&lt;/span&gt;";&#xD;
                elementRoot.AppendChild(elementInner);&#xD;
&#xD;
                &lt;span style="color: #008000"&gt;// 注意，这里是加在RootElement之内的！&lt;/span&gt;&#xD;
                doc.DocumentElement.AppendChild(elementRoot);&#xD;
            }&#xD;
&#xD;
            FileInfo info = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileInfo("&lt;span style="color: #8b0000"&gt;God.xml&lt;/span&gt;");&#xD;
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (info.Attributes == FileAttributes.ReadOnly)&#xD;
            {&#xD;
                info.Attributes = FileAttributes.Normal;&#xD;
            }&#xD;
            doc.Save("&lt;span style="color: #8b0000"&gt;God.xml&lt;/span&gt;");&#xD;
            info.Attributes = FileAttributes.ReadOnly;&#xD;
&#xD;
            tbNode.Text = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: #008000"&gt;// 读取XML文件&lt;/span&gt;&#xD;
        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; btnRead_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&#xD;
        {&#xD;
            &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&#xD;
            {&#xD;
                doc.Load("&lt;span style="color: #8b0000"&gt;God.xml&lt;/span&gt;");&#xD;
            }&#xD;
            &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;&#xD;
            {&#xD;
                MessageBox.Show("&lt;span style="color: #8b0000"&gt;没有这个XML文件！请先点击写入文件来创建它！&lt;/span&gt;");&#xD;
            }&#xD;
&#xD;
            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (tbNode.Text.Trim() == "&lt;span style="color: #8b0000"&gt;&lt;/span&gt;")&#xD;
            {&#xD;
                tblDisplay.Text += doc.InnerXml + "&lt;span style="color: #8b0000"&gt;\n&lt;/span&gt;";&#xD;
            }&#xD;
            &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
            {&#xD;
                &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (XmlElement element &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; doc.DocumentElement)&#xD;
                {&#xD;
                    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (element.HasChildNodes)&#xD;
                    {&#xD;
                        &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (XmlNode node &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; element.ChildNodes)&#xD;
                        {&#xD;
                            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (node.InnerText == tbNode.Text.Trim())&#xD;
                            {&#xD;
                                tblDisplay.Text += node.InnerText + "&lt;span style="color: #8b0000"&gt;\n&lt;/span&gt;";&#xD;
                            }&#xD;
                            &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
                            {&#xD;
                                tblDisplay.Text += "&lt;span style="color: #8b0000"&gt;没有对应节点！\n&lt;/span&gt;";&#xD;
                            }&#xD;
                        }&#xD;
                    }&#xD;
                    &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&#xD;
                    {&#xD;
                        tblDisplay.Text += element.InnerXml + "&lt;span style="color: #8b0000"&gt;\n&lt;/span&gt;";&#xD;
                    }&#xD;
                }&#xD;
            }&#xD;
            tbNode.Text = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; button2_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&#xD;
        {&#xD;
            tbNode.Text = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&#xD;
            tblDisplay.Text = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&#xD;
        {&#xD;
            &lt;span style="color: #0000ff"&gt;try&lt;/span&gt;&#xD;
            {&#xD;
                FileInfo info = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; FileInfo("&lt;span style="color: #8b0000"&gt;God.xml&lt;/span&gt;");&#xD;
                info.Attributes = FileAttributes.Normal;&#xD;
                info.Delete();&#xD;
            }&#xD;
            &lt;span style="color: #0000ff"&gt;catch&lt;/span&gt;(Exception ee)&#xD;
            {&#xD;
                MessageBox.Show(ee.Message);&#xD;
            }&#xD;
        }&#xD;
    }&#xD;
}&#xD;
&lt;/pre&gt;&lt;/div&gt;&lt;br&gt;&lt;/span&gt;&lt;img src="http://www.cnblogs.com/sitemanager/aggbug/2360259.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/sitemanager/archive/2012/02/20/2360259.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/lening/archive/2012/02/20/2360168.html</id><title type="text">COM组件在实现VB.net 调用MATLAB中的应用</title><summary type="text"/><published>2012-02-20T08:55:00Z</published><updated>2012-02-20T08:55:00Z</updated><author><name>乐宁</name><uri>http://www.cnblogs.com/lening/</uri></author><link rel="alternate" href="http://www.cnblogs.com/lening/archive/2012/02/20/2360168.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/lening/archive/2012/02/20/2360168.html"/><content type="html">&lt;p&gt;&lt;strong&gt;第一篇博文，有空在放图！&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;&lt;strong&gt;通过&lt;/strong&gt;&lt;strong&gt;M&lt;/strong&gt;&lt;strong&gt;ATLAB&lt;/strong&gt;&lt;strong&gt;引擎&lt;/strong&gt;&lt;strong&gt;(Engine)&lt;/strong&gt;&lt;strong&gt;---&lt;/strong&gt;&lt;strong&gt;接口函数&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;提供了一组Mat lab API函数，用户不必关心MATLAB引擎是如何实现的，只要调用这些函数即可。正是通过这些API函数实现应用程序进程之间的传递函数，从而实现Mat lab与VC的混合编程。VC的C语言或C++语言向Mat lab引擎传递命令和数据信息，通过调用MATLAB引擎在后台与MATLAB服务器建立连接,实现动态通信。这种处理方法不要求链接整个Mat lab,只需嵌入必要的Mat lab引擎库，节省了大量的系统资源，使应用程序整体性能更好，处理效率更高，但这种混合编程的方法需要MATLAB在后台适时运行不能脱离Mat lab环境，否则影响了程序的通用性，因此这种方法在实际开发过程中很少采用。&lt;/p&gt;&#xD;
&lt;p&gt;例子：在vb.net 的Form1里设置3个Button和一个PictureBox，代码如下：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Public Class Form1&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Dim strmatlab As String&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load&lt;/p&gt;&#xD;
&lt;p align="left"&gt;PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;End Sub&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Dim matlab As Object&lt;/p&gt;&#xD;
&lt;p align="left"&gt;' 建立matlab应用()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab = CreateObject("matlab.application")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;' 最小化matlab命令窗口()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.minimizecommandwindow()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;'matlab语句()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;strmatlab = "t=2:0.2:4*pi;y=sin(t);plot(t,y)"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;'执行matlab算法()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.execute(strmatlab)&lt;/p&gt;&#xD;
&lt;p align="left"&gt;'生成一个jpg的图形c:＼test1.jpg&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.execute("print( gcf,'-djpeg','d:\test1.jpg')")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;' 退出matlab, 释放资源&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.quit()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab = Nothing&lt;/p&gt;&#xD;
&lt;p align="left"&gt;'显示在图片框()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;PictureBox1.Image = New Bitmap("d:\test1.jpg")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;End Sub&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;'显示饼图&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Dim matlab As Object&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab = CreateObject("matlab.application")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;strmatlab = "sale=[100 400 150 250 500];pie3(sale,[0 0 1 0 0],{'公司a','公司b','公司c','公司d','公司e'})"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.execute(strmatlab)&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.execute("print( gcf, '-djpeg', 'd:\test2.jpg')")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.quit()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab = Nothing&lt;/p&gt;&#xD;
&lt;p align="left"&gt;PictureBox1.Image = New Bitmap("d:\test2.jpg")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;End Sub&lt;/p&gt;&#xD;
&lt;p align="left"&gt;'显示三维螺线图&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Dim matlab As Object&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab = CreateObject("matlab.application")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;strmatlab = "t=0:0.2:4*pi;plot3(sin(t),cos(t),t)"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.execute(strmatlab)&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.execute("print( gcf, '-djpeg', 'd:\test3.jpg')")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.quit()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab = Nothing&lt;/p&gt;&#xD;
&lt;p align="left"&gt;PictureBox1.Image = New Bitmap("d:\test3.jpg")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;End Sub&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click&lt;/p&gt;&#xD;
&lt;p align="left"&gt;'显示立体波浪图()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Dim matlab As Object&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab = CreateObject("matlab.application")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;strmatlab = "[x,y,z] = peaks(20);surfc(x,y,z);colormap hsv;axis ([-2 4 -6 8 -10 6])"&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.execute(strmatlab)&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.execute("print( gcf, '-djpeg','d:\test4')")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab.quit()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;matlab = Nothing&lt;/p&gt;&#xD;
&lt;p align="left"&gt;PictureBox1.Image = New Bitmap("d:\test4.jpg")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;End Sub&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;End Class&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;缺点：&lt;strong&gt;需要安装&lt;/strong&gt;&lt;strong&gt;MATLAB&lt;/strong&gt;&lt;strong&gt;在后台运行！！缺乏独立性！&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2. &lt;/strong&gt;&lt;strong&gt;通过&lt;/strong&gt;&lt;strong&gt;组件对象模型&lt;/strong&gt;&lt;strong&gt;(com)&lt;/strong&gt;&lt;strong&gt;建立动态链接库&lt;/strong&gt;&lt;strong&gt;DLL&lt;/strong&gt;&lt;strong&gt;实现混合编程&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;DLL是动态链接库的英文缩写，是一个可执行的二进制文件。把很多通用的功能放在DLL 中，可供多个应用程序调用，而不是每个应用程序在连接时都要增加一个库中目标代码的拷贝。通过MATLAB自带的Compiler编译器，可以把由Mat lab编写的m 函数文件编译成动态链接库(dl1)。或者通过Mat lab提供的组件功能，运用VC+十向导自动生成m文件的动态链接库。在VS程序中调用封装的函数，实现数值算法的运用。这种方法只需在开发和发布中包含其生成的动态库就可以了，可以使程序脱离MATLAB可以整体减少文件外部存储空间的占有量，并实现了代码共享。&lt;/p&gt;&#xD;
&lt;p&gt;注：必须用MATLAB 2008b以后的版本，用MATLAB 2008a在创建对象时候会出现&amp;ldquo;System.TypeInitializationException&amp;rdquo;一类的异常，这应该是Mat lab 2008a创建的DLL的问题。&lt;/p&gt;&#xD;
&lt;p &gt;壹、 安装&lt;strong&gt;MATLAB Compiler Runtime v7.14 &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p &gt;在MATLAB 安装目录（D:\Program Files\MATLAB\R2010b）下找到toolbox\compiler\deploy\文件夹，在其win32（64位版本则是在win64）文件夹下面找到MCRInstaller.exe。它就是MATLAB Complier Runtime（MCR）安装程序，安装它。&lt;/p&gt;&#xD;
&lt;p&gt;安装后，在MCR安装目录（D:\Program Files\MATLAB\MATLAB Compiler Runtime\v714）下找到runtime\文件夹，win32（64位版本则是在win64）文件夹下面找到mwcomutil.dll，注册它。具体办法是在&amp;ldquo;开始菜单\程序\Microsoft Visual Studio 2005\Visual Studio Tools&amp;rdquo;中找到&amp;ldquo;Visual Studio 2005 命令提示&amp;rdquo;的快捷方式，运行它。在这个命令行环境下，可以运行注册COM件的命令行程序。用法是&lt;/p&gt;&#xD;
&lt;p &gt;&amp;gt;&amp;gt; "D:\Program Files\MATLAB \MATLAB Compiler Runtime\v714\runtime\win32"&lt;/p&gt;&#xD;
&lt;p &gt;&amp;gt;&amp;gt;D:&lt;/p&gt;&#xD;
&lt;p &gt;&amp;gt;&amp;gt; regsvr32 mwcomutil.dll&lt;/p&gt;&#xD;
&lt;p &gt;贰、 在&lt;strong&gt;MATLAB&lt;/strong&gt;中编写程序&lt;/p&gt;&#xD;
&lt;p align="left"&gt;一、 编写基本程序(.m 文件)&amp;mdash;写成函数形式&lt;/p&gt;&#xD;
&lt;p align="left"&gt;例子：picc函数&lt;/p&gt;&#xD;
&lt;p align="left"&gt;function picc()&lt;/p&gt;&#xD;
&lt;p align="left"&gt;y='d:\test1.jpg';&lt;/p&gt;&#xD;
&lt;p align="left"&gt;pic= imread(y);&lt;/p&gt;&#xD;
&lt;p align="left"&gt;picnew = imresize(pic, [240 360],'bicubic');&lt;/p&gt;&#xD;
&lt;p align="left"&gt;imwrite(picnew,'d:\picc1.jpg');&lt;/p&gt;&#xD;
&lt;p align="left"&gt;end&lt;/p&gt;&#xD;
&lt;p &gt;二、 配置&lt;strong&gt;MATLAB Builder NE &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;在MATLAB命令行窗口，运行mbuild设置MATLAB Builder编译程序：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p &gt;请替换成实际安装目录&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;注：如需进行mex 命令设置，方法同上。（在MATLAB的命令窗口中输入&amp;gt;&amp;gt; mex -setup）&lt;/p&gt;&#xD;
&lt;p align="left"&gt;叁、 通过&lt;strong&gt;COM&lt;/strong&gt;组件混合编程&lt;/p&gt;&#xD;
&lt;p align="left"&gt;一、 生成普通&lt;strong&gt;COM &lt;/strong&gt;组件&lt;/p&gt;&#xD;
&lt;p align="left"&gt;运行Deployment Tool后出现下面的窗口：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;gt;&amp;gt;deploytool&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;注：在matlab6.0版本之前是comtool&lt;/p&gt;&#xD;
&lt;p align="left"&gt;在新弹出的窗口（可能自动停靠到右边，可以单击Undock按钮分离）运行New Deployment Project。选择MATLAB Builder NE下的Generic COM Component。在Name处输入picc.prj，单击OK。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;先单击add class,在选择Add File，添加刚才新建立的文件。单击Settings按钮，可以选择工程属性，如组件名称和版本等等。运行菜单&amp;ldquo;Tools\Build&amp;rdquo;。MATLAB会自动编译这个工程。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;打开工程目录（D:\My Documents\MATLAB\picc\picc\），该目录下的src\保存了COM件的C++源代码，在distrib\文件夹下保存了可发布的DLL文件。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;打包组件及MCR&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/strong&gt;编译结束后产生的COM组件只能在当前计算机上使用，为了能够把它发布到其他计算机上使用，还需要其他一些支持文件。另外，COM组件不同于普通的DLL文件，COM组件必须注册后才能在计算机上使用。选择package命令，deploytool将会把发布该组件所需要的所有文件打包到一个和工程同名的可执行文件中。这里可以选择是否在打包文件中包含MCR。MATLAB产生的COM组件必须运行在MCR环境。如果目标计算机上没有安装MCR，那么在打包组件的时候最好选择包含MCR，这样在打包文件中就会包含MCR的安装文件。打包完成后将会在distrib中产生.exe的可执行文件，这是一个可以自解压的压缩文件。其中包含4个文件：_install.bat，dll文件，ctf文件，MCRInstaller.exe。把产生的.exe文件复制到需要发布的计算机上运行。结果将会把这四个文件解压，并执行_install.bat，这是一个DOS批处理文件，查看_install.bat的&lt;a href="http://abroad.studa.com/"&gt;内容&lt;/a&gt;后可以发现_install.bat将会运行MCRInstaller.exe来安装MCR，并且在系统中注册组件文件。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p &gt;二、 注册&lt;strong&gt;COM &lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;注册可发布的DLL文件（MyAdd_1_0.dll）。在Visual Studio 2005命令提示环境下，运行：&lt;/p&gt;&#xD;
&lt;p &gt;&amp;gt;&amp;gt; cd "D:\My Documents\MATLAB\picc\picc\distrib"&lt;/p&gt;&#xD;
&lt;p &gt;&amp;gt;&amp;gt;D:&lt;/p&gt;&#xD;
&lt;p &gt;&amp;gt;&amp;gt; regsvr32 picc_1_0.dll&lt;/p&gt;&#xD;
&lt;p &gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;注册成功将得到类似&amp;ldquo;MyAdd_1_0.dll 中的 DllRegisterServer 成功。&amp;rdquo;的信息。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;肆、 在&lt;strong&gt;VB.NET&lt;/strong&gt;中编写程序调用&lt;strong&gt;COM&lt;/strong&gt;组件&lt;/p&gt;&#xD;
&lt;p align="left"&gt;在VB.NET中创建一个项目，在&amp;ldquo;解决方案资源管理器&amp;rdquo;视图中添加引用。在COM标签中找到组件名称为MyAdd 1.0 Type Library的项，单击确定。则引用文件夹下就多了两项：MWComUtil和picc。&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;添加完以后就可以直接在程序中进行调用。&lt;/p&gt;&#xD;
&lt;p&gt;代码实例：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Public Class Form1&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Dim img2 As New picc.picc&lt;/p&gt;&#xD;
&lt;p align="left"&gt;'调用MATLAB COM&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;img2.picc()'调用MATLAB函数&lt;/p&gt;&#xD;
&lt;p align="left"&gt;'调用MATLAB函数有参数的话，是（NO,input,output1,oput2,&amp;hellip;）其中NO是输出参数的个数&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Dim x As Image = Image.FromFile("d:\picc1.jpg")&lt;/p&gt;&#xD;
&lt;p align="left"&gt;PictureBox1.Image = New Bitmap(x)&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;End Sub&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load&lt;/p&gt;&#xD;
&lt;p align="left"&gt;PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage&lt;/p&gt;&#xD;
&lt;p align="left"&gt;End Sub&lt;/p&gt;&#xD;
&lt;p&gt;End Class&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Result如下：&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注意事项以及相应问题解决&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;在编译dll时，需要机器安装有C或C++编译器，比如安装VC6.0&lt;/li&gt;&#xD;
&lt;li&gt;MATLAB启动Deplottool工具之前，还需要利用mbuild &amp;ndash;setup 命令对compiler设置，将compiler设置成C++或C语言对应的compiler,而不是MATLAB自带的compiler.&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;PS:前两条如果没有做到的话，在deploytool生成界面往往出错，无法生成dll等相应的文件。&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;如果出现其他一些小问题，尝试重启Visual Basic 或是MATLAB,在或者重启电脑。&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p align="left"&gt;4. 在使用COM组件时，出现80040154错误。当使用regsvr32 [dll名]时，出现LoadLibrary("&amp;hellip;") 失败 - 找不到指定的模块。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;原因：某次加载该模块之后，手动修改注册表，注册信息被破坏。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;解决方法：打开src文件夹下的idl文件，将uuid项的8-4-4-4-12位序列号记下来，打开注册表编辑器，查找所有刚才记下的uuid序列号，悉数删除。如不放心，则可以继续查找所有和工程有关的关键字，悉数删除，问题即得到解决。&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;在MATLAB编译时出现&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;Error: An error occurred while shelling out to mbuild (error code = 1).&lt;/p&gt;&#xD;
&lt;p&gt;Unable to build executable (specify the -v option for more information).&lt;/p&gt;&#xD;
&lt;p&gt;??? Error using ==&amp;gt; mcc&lt;/p&gt;&#xD;
&lt;p&gt;Error executing mcc, return status = 1.&lt;/p&gt;&#xD;
&lt;p&gt;解决方案：往系统环境变量path添加： matlabroot\bin;&lt;/p&gt;&#xD;
&lt;p&gt;--注，这里matlabroot指的是matlab根目录，再编译，还是不行，重启matlab，再编译，OK.具体方法如下:&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在桌面上右键单击&amp;ldquo;我的电脑&amp;rdquo;图标出现以下菜单&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;单击&amp;ldquo;属性&amp;rdquo;菜单项，出现&amp;ldquo;系统特性&amp;rdquo;对话框，单击&amp;ldquo;高级&amp;rdquo;选项卡，如下图所示在上图中，单击&amp;ldquo;环境变量&amp;rdquo;按钮，出现&amp;ldquo;环境变量&amp;rdquo;对话框， 添加系统变量 matlab 值为 matlab的安装路径，如下图所示&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在环境变量 path 中加入matlabroot\runtime\win32 ，如下图所示&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;按&amp;ldquo;确定&amp;rdquo;完成设置后， 重启计算机或注销当前用户 ，即可应用新设置。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;若之前将编译生成的文件打包发布到没有MATLAB的电脑上时,没将mex打包进去,也可用此种方法.&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;先在 $MATLAB\toolbox\compiler\deploy\win32下找MCRInstaller.exe（76M左右）文件&lt;/p&gt;&#xD;
&lt;p&gt;然后在没有装MATLAB的机子上安装MCRInstaller到D:\MATLAB Component Runtime&lt;/p&gt;&#xD;
&lt;p&gt;(目录中，最好不要有空格，如用 D:\MCR 就可以了)&lt;/p&gt;&#xD;
&lt;p&gt;设置环境变量，右键点击&amp;ldquo;我的电脑&amp;rdquo;-》属性-》高级-》环境变量-》新建&lt;/p&gt;&#xD;
&lt;p&gt;变量名：Path&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;变量值：D:\MCR\v70\runtime\win32&lt;/p&gt;&#xD;
&lt;p&gt;然后运行exe文件，每次都是出现DOS界面后，几秒钟就自动关闭了&lt;/p&gt;&#xD;
&lt;p&gt;GUI界面一次都运行不出来，也没有错误信息提示&lt;/p&gt;&#xD;
&lt;p&gt;解决办法：&lt;/p&gt;&#xD;
&lt;p&gt;{ 因为MATLAB需要用到处理器的数学运算部分(MATLAB默认用的是INTEL的数学处理单元),故需要设置一下BLAS(Basic Linear Algebra Subroutines,就是"基础线性几何子程序"的意思)环境变量.&amp;nbsp;&amp;nbsp;首先请确认你的MATLAB的文件夹中有如下文件:atlas_Athlon.dll(AMD系列的请用这个)，&amp;nbsp;&amp;nbsp; atlas_P4.dll(P4的用这个)，atlas_PIII.dll(P3的用这个)，atlas_PII.dll(P2的用这个)，这些是对应处理器的数值运算优化文件 }&lt;/p&gt;&#xD;
&lt;p&gt;先找到 $MATLAB7\bin\win32目录下的atlas_Athlon.dll（AMD系列CPU使用）和atlas_P4.dll（奔4用）文件，放到MCR目录中（随便），然后设置环境变量&lt;/p&gt;&#xD;
&lt;p&gt;变量名：BLAS_VERSION&lt;/p&gt;&#xD;
&lt;p&gt;变量值：D:\MCR\v70\atlas_Athlon.dll&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;REF:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://hi.baidu.com/pengjun/blog/item/33661f17653f99094b90a705.html"&gt;http://hi.baidu.com/pengjun/blog/item/33661f17653f99094b90a705.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://wenku.baidu.com/view/6da13dfd910ef12d2af9e722.html"&gt;http://wenku.baidu.com/view/6da13dfd910ef12d2af9e722.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://wenku.baidu.com/view/83f0c57f5acfa1c7aa00ccba.html"&gt;http://wenku.baidu.com/view/83f0c57f5acfa1c7aa00ccba.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://blog.sina.com.cn/s/blog_60abf0b60100ffhi.html"&gt;http://blog.sina.com.cn/s/blog_60abf0b60100ffhi.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;(&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://hi.baidu.com/%C2%E4%CB%AE%C9%F1/blog/item/ca6f766cf5455cd680cb4a2e.html"&gt;http://hi.baidu.com/%C2%E4%CB%AE%C9%F1/blog/item/ca6f766cf5455cd680cb4a2e.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.matlabsky.com/thread-10041-1-1.html"&gt;http://www.matlabsky.com/thread-10041-1-1.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.matlabsky.com/thread-11710-1-1.html"&gt;http://www.matlabsky.com/thread-11710-1-1.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://lingchuangsong.blog.163.com/blog/static/12693232201032122430285/"&gt;http://lingchuangsong.blog.163.com/blog/static/12693232201032122430285/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p align="left"&gt;&amp;lt;&amp;lt;在VB 开发环境中调用由MATLAB 函数转化的DLL&amp;gt;&amp;gt; 冯　旭&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/lening/aggbug/2360168.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/lening/archive/2012/02/20/2360168.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/ggtiger/archive/2012/02/19/2358589.html</id><title type="text">我的ORM问题？</title><summary type="text"/><published>2012-02-19T13:41:00Z</published><updated>2012-02-19T13:41:00Z</updated><author><name>乖乖小虎</name><uri>http://www.cnblogs.com/ggtiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/ggtiger/archive/2012/02/19/2358589.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/ggtiger/archive/2012/02/19/2358589.html"/><content type="html">&lt;p&gt;我心中的ORM&lt;/p&gt;&#xD;
&lt;p&gt;解决什么问题&lt;/p&gt;&#xD;
&lt;p&gt;1.NOSQL&lt;/p&gt;&#xD;
&lt;p&gt;2.数据库无关&lt;/p&gt;&#xD;
&lt;p&gt;3.对象关系映射&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;疑问&lt;/p&gt;&#xD;
&lt;p&gt;1.性能如何，影响ORM框架性能的主要原因？&lt;/p&gt;&#xD;
&lt;p&gt;2.表A和表B（表A的扩展属性表）映射的对象应该是如何定义？&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;声明：本人菜鸟，问题肤浅。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/ggtiger/aggbug/2358589.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/ggtiger/archive/2012/02/19/2358589.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jason009/archive/2012/02/19/2358167.html</id><title type="text">asp.net中用来进行Post和Get方式提交表单的方法</title><summary type="text"/><published>2012-02-19T06:12:00Z</published><updated>2012-02-19T06:12:00Z</updated><author><name>jason_009</name><uri>http://www.cnblogs.com/jason009/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jason009/archive/2012/02/19/2358167.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jason009/archive/2012/02/19/2358167.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web.UI;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Web.UI.WebControls;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; 母版&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; WebForm1 : System.Web.UI.Page&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            Label1.Text = &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Request[""name""] = &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + Request[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;];&lt;br /&gt;            Label2.Text = &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Request[""password""] = &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + Request[&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;password&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;];&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Button1_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            post(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;WebForm1.aspx&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;name&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;tim&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;password&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;123456&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; post(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; url, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; name, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; namevalue, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; password, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; passwordvalue)&lt;br /&gt;        {&lt;br /&gt;            StringBuilder sb = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;            sb.AppendLine(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;lt;form id=""form1"" action=""&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + url + &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;"" method=""get""&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            sb.AppendLine(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;    &amp;lt;input type=""hidden"" name=""&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + name + &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;"" value=""&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + namevalue + &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;""&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            sb.AppendLine(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;    &amp;lt;input type=""hidden"" name=""&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + password + &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;""value=""&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + passwordvalue + &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;""&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            sb.AppendLine(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            sb.AppendLine(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;lt;script type=""text/javascript"" language=""javascript""&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            sb.AppendLine(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;    document.getElementById('form1').submit();&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            sb.AppendLine(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            Response.Write(sb.ToString());&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Response.Write(@"&amp;lt;form id= ""form1"" action=""" + url + @""" method=""get""&amp;gt;&amp;lt;input type=""hidden"" name=""" + name + @""" value=""" + namevalue + @"""&amp;gt;&amp;lt;input type=""hidden"" name=""" + password + @"""value=""" + passwordvalue + @"""&amp;gt;&amp;lt;/form&amp;gt;&amp;lt;script language=""javascript""&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;document.getElementById('form1').submit();&amp;lt;/script&amp;gt;");&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Response.End();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jason009/aggbug/2358167.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jason009/archive/2012/02/19/2358167.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/liuhaorain/archive/2012/02/19/2353110.html</id><title type="text">你必须知道的ADO.NET（五） 细说数据库连接池</title><summary type="text"/><published>2012-02-19T01:11:00Z</published><updated>2012-02-19T01:11:00Z</updated><author><name>可米小子</name><uri>http://www.cnblogs.com/liuhaorain/</uri></author><link rel="alternate" href="http://www.cnblogs.com/liuhaorain/archive/2012/02/19/2353110.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/liuhaorain/archive/2012/02/19/2353110.html"/><content type="html">&lt;p&gt;&lt;strong&gt;题外话&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;通过前几章的学习，不知道大家对ADO.NET有一定的了解了没有。撇开文章质量不讲，必须肯定的是，我是用心去写每一篇文章的。无论是是在排版上，还是在内容选取上我都花了不少心思。我希望通过本系列文章，无论是新手还是老手，在ADO.NET上都能有所收获。&lt;span style="color: #993366;"&gt;&lt;strong&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="text-decoration: underline;"&gt;如果大家觉得有帮助，我希望能得到您的推荐和关注，让我知道您对我的肯定。如果大家觉得我写的不好，我也很乐意听取批评的意见，让我们一起进步。&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;hr /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;摘要&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;今天我要讲的是数据库连接池。说实话，我表示鸭梨很大。因为相比其他章节来说，连接池相对来说难理解一点。我要用最通俗的语句给大家讲明白，讲透彻却也不是一件很容易的事。但是，连接池又是非常重要的知识点，特别是在部署多用户程序时，显得尤为重要。所以，我不但要讲，而且要讲的透彻。通过本文，你将理解连接池的基本原理已经如何利用连接池来提高应用程序的性能。&lt;/p&gt;&#xD;
&lt;hr /&gt;&#xD;
&lt;p&gt;&lt;strong&gt;目录&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;a style="text-decoration: none;" href="#title_1"&gt;什么是连接池?&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a style="text-decoration: none;" href="#title_2"&gt;连接池的工作原理&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a style="text-decoration: none;" href="#title_3"&gt;说说连接池的几个非常重要属性&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a style="text-decoration: none;" href="#title_4"&gt;连接池异常与处理方法&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a style="text-decoration: none;" href="#title_5"&gt;监视连接状态的方法&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;li&gt;&lt;a style="text-decoration: none;" href="#title_6"&gt;高效使用连接池的基本原则&lt;/a&gt;&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;hr /&gt;&#xD;
&lt;h3 id="title_1"&gt;1. 什么是连接池?&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在上篇文章&lt;a href="http://www.cnblogs.com/liuhaorain/archive/2012/02/15/2349886.html"&gt;《你必须知道的ADO.NET（四） 品味Connection对象》&lt;/a&gt;中，我已经强调过，&lt;span style="background-color: #ccffcc;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;建立一个数据库连接是一件非常耗时（消耗时间）耗力（消耗资源）的事情。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;之所以会这样，是因为连接到数据库服务器需要经历几个漫长的过程:建立物理通道（例如套接字或命名管道），与服务器进行初次握手，分析连接字符串信息，由服务器对连接进行身份验证，运行检查以便在当前事务中登记等等。我们先不管为什么会有这样的机制，存在总是有它的道理。既然新建一条连接如此痛苦，那么为什么不重复利用已有的连接呢？&lt;/p&gt;&#xD;
&lt;p&gt;实际上，ADO.NET已经为我们提供了名为连接池的优化方法。&lt;strong&gt;&lt;span style="background-color: #ccffcc; color: #ff0000;"&gt;连接池就是这样一个容器：它存放了一定数量的与数据库服务器的物理连接。&lt;/span&gt;&lt;/strong&gt;因此，当我们需要连接数据库服务器的时候，只需去池（容器）中取出一条空闲的连接，而不是新建一条连接。这样的话，我们就可以大大减少连接数据库的开销，从而提高了应用程序的性能。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc; color: #800080;"&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;&amp;nbsp;PS:&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;本来做了2张图片来描述连接池的，无奈公司装有监控软件，不能上传，所以只能等下次有时间上传了。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;h3 id="title_2"&gt;2. 连接池的工作原理&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.1 创建连接池&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;需要说明的是，&lt;span style="background-color: #ccffcc; color: #ff0000;"&gt;&lt;strong&gt;连接池是具有类别区分的。&lt;/strong&gt;&lt;/span&gt;也就是说，同一个时刻同一应用程序域可以有多个不同类型的连接池。那么，连接池是如何标识区分的？细致的讲，是由进程、应用程序域、连接字符串以及windows标识（在使用集成的安全性时）共同组成签名来标识区分的。但对于同一应用程序域来说，一般只由连接字符串来标识区分。当打开一条连接时，如果该条连接的类型签名与现有的连接池类型不匹配，则创建一个新的连接池。反之，则不创建新的连接池。&lt;/p&gt;&#xD;
&lt;p&gt;一个典型的创建连接的实例：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建连接对象1&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlConnection conn1 =&lt;br /&gt;&lt;br /&gt;             &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnection(  &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataSource=(local);Integrated Security=SSPI;Initial Catalog=Northwind&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;))    &lt;br /&gt;{        &lt;br /&gt;    conn1.Open();       &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建连接对象2&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlConnection conn2 =&lt;br /&gt;&lt;br /&gt;           &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnection(  &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataSource=(local);Integrated Security=SSPI;Initial Catalog=pubs&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;))   &lt;br /&gt;{       &lt;br /&gt;    conn2.Open();      &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;创建连接对象3&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; (SqlConnection conn3 =&lt;br /&gt;&lt;br /&gt;         &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnection(  &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;DataSource=(local);Integrated Security=SSPI;Initial Catalog=Northwind&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;))  &lt;br /&gt;{        &lt;br /&gt;    conn3.Open();      &lt;br /&gt;} &lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;上面实例中，我创建了三个SqlConnection对象，但是管理时只需要两个连接池。细心的朋友，可能早已发现&lt;strong&gt;&lt;span style="color: #008080;"&gt;conn1与conn3的连接字符串相同，所以可以共享一个连接池，而conn2与conn1与conn3不同，所以需要创建新的连接池。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.2 分配空闲连接&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当用户创建连接请求或者说调用Connection对象的Open时，&lt;span style="background-color: #ccffcc;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;连接池管理器首先需要根据连接请求的类型签名找到匹配类型的连接池，然后尽力分配一条空闲连接。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;具体情况如下：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;如果池中有空闲连接可用，返回该连接。&lt;/li&gt;&#xD;
&lt;li&gt;如果池中连接都已用完，创建一个新连接添加到池中。&lt;/li&gt;&#xD;
&lt;li&gt;如果池中连接已达到最大连接数，请求进入等待队列直到有空闲连接可用。&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.3 移除无效连接&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;无效连接，即不能正确连接到数据库服务器的连接。&lt;span style="background-color: #ffffff; color: #000000;"&gt;对于连接池来说，存储的与数据库服务器的连接的数量是有限的。&lt;/span&gt;因此，对于无效连接，如果如不及时移除，将会浪费连接池的空间。其实你不用担心，连接池管理器已经很好的为我们处理了这些问题。&lt;span id="mt54"  data-source="The connection pooler removes a connection from the pool after it has been idle for a long time, or if the pooler detects that the connection with the server has been severed." data-guid="f88c49e34a07e65e90f93ba61ca9b6ee"&gt;如果连接长时间空闲，或检测到与服务器的连接已断开，连接池管理器会将该连接从池中移除。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2.4 回收使用完的连接&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc; color: #ff0000;"&gt;&lt;strong&gt; 当我们使用完一条连接时，应当及时关闭或释放连接，以便连接可以返回池中重复利用。&lt;/strong&gt;&lt;/span&gt;我们可以通过Connection对象的Close或Dispose方法，也可以通过C#的using语句来关闭连接。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;h3 id="title_3"&gt;3. 说说几个非常重要属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffcc;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;连接池的行为可以通过连接字符串来控制&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;，主要包括四个重要的属性：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;Connection Timeout：&lt;/strong&gt;&lt;/span&gt;连接请求等待超时时间。默认为15秒，单位为秒。&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;Max Pool Size: &lt;/strong&gt;&lt;/span&gt;连接池中最大连接数。默认为100。&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;Min Pool Size: &lt;/strong&gt;&lt;/span&gt;连接池中最小连接数。默认为0。&lt;/li&gt;&#xD;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;Pooling: &lt;/strong&gt;&lt;/span&gt;是否启用连接池。&lt;span style="background-color: #ccffcc; color: #ff0000;"&gt;&lt;strong&gt;ADO.NET默认是启用连接池的，&lt;/strong&gt;&lt;/span&gt;因此，你需要手动设置Pooling=false来禁用连接池。&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;还是看一个实例来理解连接池的属性吧。代码如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;SqlConnectionStringBuilder connStr = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnectionStringBuilder();&lt;br /&gt;            connStr.DataSource = &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.\SQLEXPRESS&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            connStr.InitialCatalog = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;master&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            connStr.IntegratedSecurity = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            connStr.Pooling = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;开启连接池&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;         connStr.MinPoolSize = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置最小连接数为0&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            connStr.MaxPoolSize = &lt;span style="color: #800080;"&gt;50&lt;/span&gt;; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置最大连接数为50             &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            connStr.ConnectTimeout = &lt;span style="color: #800080;"&gt;10&lt;/span&gt;; &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置超时时间为10秒&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;using&lt;/span&gt;( SqlConnection conn = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnection(connStr.ConnectionString))&lt;br /&gt;            {&lt;br /&gt;                ;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;todo&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;h3 id="title_4"&gt;4. 连接池异常与处理方法&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;当用户打开一个连接而没有正确或者及时的关闭时，经常会引发&amp;ldquo;连接泄露&amp;rdquo;问题。泄露的连接，会一直保持打开状态，直到调用Dispose方法，垃圾回收器（GC）才关闭和释放连接。与ADO不同，ADO.NET需要手动的关闭使用完的连接。&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;&lt;span style="background-color: #ccffcc;"&gt;一个重要的误区是：当连接对象超出局部作用域范围时，就会关闭连接。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;实际上，当超出作用域时，&lt;strong&gt;&lt;span style="background-color: #ccffcc; color: #ff0000;"&gt;释放的只是连接对象而非连接资源。&lt;/span&gt;&lt;/strong&gt;好吧，还是先看看一个实例吧。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;using&lt;/span&gt; System.Data.SqlClient;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;namespace&lt;/span&gt; ConnectionPool&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; Program&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            SqlConnectionStringBuilder connStr = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnectionStringBuilder();&lt;br /&gt;            connStr.DataSource = &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.\SQLEXPRESS&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            connStr.InitialCatalog = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;master&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            connStr.IntegratedSecurity = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            connStr.MaxPoolSize = &lt;span style="color: #800080;"&gt;5&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置最大连接池为5&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            connStr.ConnectTimeout = &lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置超时时间为1秒&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;              SqlConnection conn = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;1&lt;/span&gt;; i &amp;lt;= &lt;span style="color: #800080;"&gt;100&lt;/span&gt;; ++i)&lt;br /&gt;            {&lt;br /&gt;                conn = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SqlConnection(connStr.ConnectionString);&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    conn.Open();&lt;br /&gt;                    Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Connection{0} is linked&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,i);&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt;(Exception ex)&lt;br /&gt;                {&lt;br /&gt;                    Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\n异常信息:\n{0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,ex.Message);&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            Console.Read();&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;为了使结果更明显，我特地将最大连接数设置为5，超时时间为1秒。运行后，很快得到以下结果。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liuhaorain/350185/r_connpool.png" alt="" width="640" height="222" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;从上面的结果我们很明显的知道，连接出现了异常。我们已经知道连接池的最大连接数为5，当创建第6条连接时，由于连接池中连接数量已经达到了最大数并且没有空闲的连接，因此需要等待连接直到超时。当超过超时时间时，就出现了上述的连接异常。因此，&lt;span style="background-color: #ccffcc; color: #ff0000;"&gt;&lt;strong&gt;我必须再次强调，使用完的连接应当尽快的正确的关闭和释放。&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;h3 id="title_5"&gt;5. 监视SQL Server连接状态的方法&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;（1）通过活动监视器&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;第一步：&lt;/strong&gt;打开MSSMS管理器，单击&amp;ldquo;&lt;strong&gt;&lt;span style="color: #800080;"&gt;活动监视器&lt;/span&gt;&lt;/strong&gt;&amp;rdquo;图标。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liuhaorain/350185/r_pool2ext.jpg" alt="" width="610" height="358" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;第二步：&lt;/strong&gt;在打开活动监视器视图中，单击&amp;ldquo;&lt;strong&gt;&lt;span style="color: #800080;"&gt;进程&lt;/span&gt;&lt;/strong&gt;&amp;rdquo;选项卡。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liuhaorain/350185/r_pool3ext.jpg" alt="" width="610" height="364" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;第三步：&lt;/strong&gt;运行 &lt;strong&gt;&lt;a href="#title_4"&gt;#4 连接池异常与处理方法&lt;/a&gt;&lt;/strong&gt; 中的例子，则可以看到打开的5条连接，如下图所示。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liuhaorain/350185/r_pool4ext.jpg" alt="" width="610" height="441" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;（2）使用T-SQL语句&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;同样，通过执行系统存储过程&lt;span style="background-color: #ccffcc;"&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;sp_who&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;，我们也可以监视连接状态。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; sp_who&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;可得到以下结果：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/liuhaorain/350185/r_poolext1.jpg" alt="" width="610" height="315" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;h3 id="title_6"&gt;6. 高效使用连接池的基本原则&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;用好连接池将会大大提高应用程序的性能。相反，如果使用不当的话，则百害而无一益。一般来说，应当遵循以下原则：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;在最晚的时刻申请连接，在最早的时候释放连接。&lt;/li&gt;&#xD;
&lt;li&gt;关闭连接时先关闭相关用户定义的事务。&lt;/li&gt;&#xD;
&lt;li&gt;确保并维持连接池中至少有一个打开的连接。&lt;/li&gt;&#xD;
&lt;li&gt;尽力避免池碎片的产生。主要包括集成安全性产生的池碎片以及使用许多数据库产生的池碎片。&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&#xD;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;提示：&lt;/strong&gt;&lt;/span&gt;池碎片是许多 Web 应用程序中的一个常见问题，应用程序可能会创建大量在进程退出后才会释放的池。 这样，将打开大量的连接，占用许多内存，从而导致性能降低。&lt;/p&gt;&#xD;
&lt;/blockquote&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/liuhaorain/aggbug/2353110.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/liuhaorain/archive/2012/02/19/2353110.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/silverbullet11/archive/2012/02/18/2357232.html</id><title type="text">.NET自动化测试手记（3）- 查看当前系统安装的更新</title><summary type="text"/><published>2012-02-18T08:28:00Z</published><updated>2012-02-18T08:28:00Z</updated><author><name>silverbullet11</name><uri>http://www.cnblogs.com/silverbullet11/</uri></author><link rel="alternate" href="http://www.cnblogs.com/silverbullet11/archive/2012/02/18/2357232.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/silverbullet11/archive/2012/02/18/2357232.html"/><content type="html">&lt;p&gt;这篇主要通过点击窗体按钮、监听窗体和控件的事件实现读取当前系统安装的更新。需要用到UISpy.exe。&lt;/p&gt;&#xD;
&lt;p&gt;主要操作步骤如下：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;运行命令打开"Programs and Features"窗体，同时监听窗体打开的事件&lt;/li&gt;&#xD;
&lt;li&gt;点击"View installed updates"按钮，跳转到"Installed Updates"窗口，同时监听窗体名字改变的事件&lt;/li&gt;&#xD;
&lt;li&gt;获取页面加载的进度条并读取进度，需要监听进度条进度发生改变的事件&lt;/li&gt;&#xD;
&lt;li&gt;获取承载所有更新项的datagrid&lt;/li&gt;&#xD;
&lt;li&gt;遍历所有更新项并执行操作&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;以下是需要调用到的功能，先在这里列出来：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('f3de094f-afea-4629-ae83-9571dba17e47')"&gt;&#xD;
&lt;div id="cnblogs_code_open_f3de094f-afea-4629-ae83-9571dba17e47" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; AutomationElement FindControl(AutomationElement ele, ControlType type, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; name)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ele==&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            PropertyCondition nameProperty = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PropertyCondition(AutomationElement.NameProperty, name);&lt;br /&gt;            PropertyCondition typeProperty = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PropertyCondition(AutomationElement.ControlTypeProperty, type);&lt;br /&gt;            AndCondition andCondition = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; AndCondition(nameProperty, typeProperty);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; ele.FindFirst(TreeScope.Subtree, andCondition);&lt;br /&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('f3b50c94-829c-4c9c-9ad5-026b7c8dcb39')"&gt;&#xD;
&lt;div id="cnblogs_code_open_f3b50c94-829c-4c9c-9ad5-026b7c8dcb39" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; AutomationElement FindControlByType(AutomationElement ele, ControlType type)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ele==&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            PropertyCondition typeProperty = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PropertyCondition(AutomationElement.ControlTypeProperty, type);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; ele.FindFirst(TreeScope.&lt;span style="background-color: #f5f5f5; font-family: Courier New;"&gt;Descendants&lt;/span&gt;, typeProperty);&lt;br /&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('d9a26725-fa14-49f5-a057-a0f3d095abb8')"&gt;&#xD;
&lt;div id="cnblogs_code_open_d9a26725-fa14-49f5-a057-a0f3d095abb8" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; AutomationElement GetWindowByName(AutomationElement parent, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; name)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (parent == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;throw&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Exception(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Parent element is null!&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            PropertyCondition nameProperty = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PropertyCondition(AutomationElement.NameProperty, name);&lt;br /&gt;            PropertyCondition typeProperty = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window);&lt;br /&gt;            AndCondition andCondition = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; AndCondition(nameProperty, typeProperty);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; parent.FindFirst(TreeScope.Descendants | TreeScope.Element, andCondition);&lt;br /&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;下面进入正题：&lt;/p&gt;&#xD;
&lt;p&gt;1. 运行命令打开"Programs and Features"窗体，同时监听窗体打开的事件&lt;/p&gt;&#xD;
&lt;p&gt;首先需要声明一个AutomationEventHandler，如下：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;static AutomationEventHandler aeHandler = new AutomationEventHandler(OnProgramsWindowOpen);　　//监听&amp;ldquo;Programs and Features&amp;rdquo;窗体打开的事件&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;打开窗体并监听：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('77fb5764-369d-42ca-bbb6-346a99ebe1ac')"&gt;&#xD;
&lt;div id="cnblogs_code_open_77fb5764-369d-42ca-bbb6-346a99ebe1ac" &gt;&#xD;
&lt;pre&gt;public void Run()&lt;/pre&gt;&#xD;
&lt;pre&gt;{　&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加AutomationEventHandler，监听"Programs and Features"的打开事件&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent, AutomationElement.RootElement, TreeScope.Subtree, aeHandler);&lt;br /&gt;&lt;br /&gt;          &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;打开"Programs and Features"&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;          Process.Start(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;control&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &amp;ldquo;appwiz.cpl&amp;rdquo;).WaitForExit();&lt;/pre&gt;&#xD;
&lt;pre&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;2. 点击"View installed updates"按钮，跳转到"Installed Updates"窗口，同时监听窗体名字改变的事件&lt;/p&gt;&#xD;
&lt;p&gt;首先，定义EventHandler&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;static AutomationPropertyChangedEventHandler propChangedHander = new AutomationPropertyChangedEventHandler(OnNameChanged);　　//监听窗体名字变化&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;当aeHandler监听到事件的时候会进入"OnProgramsWindowOpen&amp;rdquo;方法：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('47905310-f673-4e43-92bd-f36232061e1e')"&gt;&#xD;
&lt;div id="cnblogs_code_open_47905310-f673-4e43-92bd-f36232061e1e" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnProgramsWindowOpen(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender,AutomationEventArgs args)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取窗体&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;              AutomationElement proWindow = sender &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; AutomationElement;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取&amp;ldquo;View installed updates&amp;rdquo;超链接&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;              AutomationElement hyperViewUpdates = FindControl(proWindow, ControlType.Hyperlink, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;View installed updates&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (hyperViewUpdates!=&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加AutomationPropertyChangedEventHandler,监听窗体名字的变化&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                  Automation.AddAutomationPropertyChangedEventHandler(proWindow, TreeScope.Subtree, propChangedHander, AutomationElementIdentifiers.NameProperty);&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;点击超链接&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                  InvokePattern invoke = (InvokePattern)hyperViewUpdates.GetCurrentPattern(InvokePattern.Pattern);&lt;br /&gt;                invoke.Invoke();&lt;br /&gt;            }&lt;br /&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;3. 获取页面加载的进度条并读取进度，需要监听进度条进度发生改变的事件&lt;/p&gt;&#xD;
&lt;p&gt;声明EventHandler监听进度条的进度：&amp;nbsp;&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;static AutomationPropertyChangedEventHandler proBarChangedHander = new AutomationPropertyChangedEventHandler(OnValueChanged);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;当窗体名称发生改变时开始监听进度条的进度：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('26e774ff-9143-4e29-b21b-ad6eea8ca72b')"&gt;&#xD;
&lt;div id="cnblogs_code_open_26e774ff-9143-4e29-b21b-ad6eea8ca72b" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnNameChanged(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, AutomationPropertyChangedEventArgs args)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取当前窗体&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;              AutomationElement ele = sender &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; AutomationElement;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ele.Current.Name == &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Installed Updates&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;移除所有EventHandler，以免对后面的handler产生影响。如果没有影响也可以不加这句&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                   Automation.RemoveAllEventHandlers();&lt;br /&gt;                Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Name switched, is {0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ele.Current.Name);&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;等待页面加载进度完成&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                   WaitForLoaded();&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Name is {0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ele.Current.Name);&lt;br /&gt;            }&lt;br /&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('23da3ad4-8f11-4736-8b5d-693b5bcf58f8')"&gt;&lt;span style="background-color: #ffffff;"&gt;监听进度条加载进度&lt;/span&gt;&#xD;
&lt;div id="cnblogs_code_open_23da3ad4-8f11-4736-8b5d-693b5bcf58f8" &gt;&#xD;
&lt;pre&gt;&lt;span style="background-color: #f5f5f5; font-family: Courier New;"&gt;public static bool IsContinueRefresh = true;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; WaitForLoaded()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;由于窗体名字改变了，需要重新获取名为"Installed Updates"窗体&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;              AutomationElement proWindow = GetWindowByName(AutomationElement.RootElement, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Installed Updates&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Class Name: {0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, proWindow.Current.ControlType.LocalizedControlType);&lt;br /&gt;            Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Handler:{0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, proWindow.Current.NativeWindowHandle.ToString());&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (proWindow != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取进度条&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                   AutomationElement progressBar = FindControlByType(proWindow, ControlType.ProgressBar);&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取刷新按钮，有的时候可能需要重复刷新进度条才会有明显的(可以监听到的)进度变化。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                   AutomationElement refreshButton = FindControl(proWindow, ControlType.Button, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Refresh \"Installed Updates\"&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;                InvokePattern invoke = (InvokePattern)refreshButton.GetCurrentPattern(InvokePattern.Pattern);&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;添加监听事件&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                   Automation.AddAutomationPropertyChangedEventHandler(progressBar, TreeScope.Element, proBarChangedHander, RangeValuePattern.ValueProperty);&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;不停刷新窗体，直到监听到进度条的变化&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                   &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (IsContinueRefresh)&lt;br /&gt;                {&lt;br /&gt;                    Console.WriteLine(refreshButton.Current.Name);&lt;br /&gt;                    Thread.Sleep(&lt;span style="color: #800080;"&gt;1000&lt;/span&gt;);&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (IsContinueRefresh)&lt;br /&gt;                    {&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;                        {&lt;br /&gt;                            Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Refresh...&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;                            invoke.Invoke();&lt;br /&gt;                        }&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt;&lt;br /&gt;                        {&lt;br /&gt;                            Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Exception, break...&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;                            &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;                    {&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;4. 读取进度，当进度为100%的时候遍历所有更新项并读取各项的名字&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('2a617ee3-25e9-426a-b458-c6b151217d29')"&gt;&#xD;
&lt;div id="cnblogs_code_open_2a617ee3-25e9-426a-b458-c6b151217d29" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnValueChanged(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, AutomationPropertyChangedEventArgs args)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 停止刷新窗体&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;              IsContinueRefresh = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;实例化进度条&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;              AutomationElement pb = sender &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; AutomationElement;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取进度条的RangeValuePattern, 方便后面读取进度&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;              RangeValuePattern rangePb = (RangeValuePattern)pb.GetCurrentPattern(RangeValuePattern.Pattern);            &lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; percent=rangePb.Current.Value;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; ( percent == &lt;span style="color: #800080;"&gt;100&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;移除所有的EventHandler，节省系统资源，同时也避免EventHandler之间的影响&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                　 Automation.RemoveAllEventHandlers();&lt;br /&gt;&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;逐级获取控件，直到找到对应的更新列表&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                　 AutomationElement proWindow = GetWindowByName(AutomationElement.RootElement, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Installed Updates&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);      &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取&amp;ldquo;Installed Updates&amp;rdquo;窗体元素&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                　 AutomationElement datagrid = FindControl(proWindow, ControlType.DataGrid, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Folder View&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);         &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取更新列表元素&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                   AutomationElementCollection dataItems = datagrid.FindAll(TreeScope.Children, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.DataItem));   &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取所有更新元素的集合&lt;br /&gt;&lt;br /&gt;                   &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;遍历所有更新元素并执行操作&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                   &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (AutomationElement item &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; dataItems)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;将元素滚动到屏幕显示范围之内&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                       ScrollItemPattern scrollPattern = (ScrollItemPattern)item.GetCurrentPattern(ScrollItemPattern.Pattern);&lt;br /&gt;                    scrollPattern.ScrollIntoView();&lt;br /&gt;&lt;br /&gt;                    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;在控制台中显示元素的值&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                       ValuePattern value = (ValuePattern)item.GetCurrentPattern(ValuePattern.Pattern);&lt;br /&gt;                    Console.WriteLine(value.Current.Value);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;显示进度&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                   ShowPercentage(percent);&lt;br /&gt;            }&lt;br /&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('49db35a4-9bf2-4262-9d08-447f4b21af76')"&gt;&#xD;
&lt;div id="cnblogs_code_open_49db35a4-9bf2-4262-9d08-447f4b21af76" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; ShowPercentage(&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; percent)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; top = Console.CursorTop;&lt;br /&gt;            Console.WriteLine(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Current progress is {0}%&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, percent.ToString());&lt;br /&gt;            Console.CursorTop = top;&lt;br /&gt;        }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;到这里，所要实现的操作就已经完成了。&lt;/p&gt;&#xD;
&lt;p&gt;关于如何确定要监听哪些事件，可以借助UISpy.exe，具体操作如下（以监听进度条进度为例）：&lt;/p&gt;&#xD;
&lt;p&gt;首先，打开控制面板，进入到"Installed Updates"页&lt;/p&gt;&#xD;
&lt;p&gt;然后打开UISpy.exe，找到（如果显示的元素没有这么多，可以把窗体调到最前面，然后刷新UISpy.exe）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/272663/2012021816170813.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;找到进度条&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/272663/2012021816195396.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;点击菜单栏监听按钮开始监听（建议取消监听会引起Exception的事件，可以在右边那个按钮"Configure Events"里面设置）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/272663/2012021816215147.jpg" alt="" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;刷新窗体，并观察UISpy.exe &amp;ldquo;Output&amp;rdquo;里的变化，可以发现类似下面的文字。这时就可以确定该监听哪些事件，并从哪些属性里面观察变化了。&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;Property Change Event&#xD;
Time Stamp : 2/18/2012 4:24:42 PM&#xD;
Element : "progress bar" ""&#xD;
Property : RangeValuePatternIdentifiers.ValueProperty&#xD;
New Value : 99&#xD;
Old Value : null&#xD;
&#xD;
Property Change Event&#xD;
Time Stamp : 2/18/2012 4:24:44 PM&#xD;
Element : "progress bar" ""&#xD;
Property : RangeValuePatternIdentifiers.ValueProperty&#xD;
New Value : 100&#xD;
Old Value : null&#xD;
&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/silverbullet11/aggbug/2357232.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/silverbullet11/archive/2012/02/18/2357232.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/wintersun/archive/2012/02/18/2357197.html</id><title type="text">Asp.net MVC 3 RTM 源代码中单元测试帮助类</title><summary type="text"/><published>2012-02-18T07:48:00Z</published><updated>2012-02-18T07:48:00Z</updated><author><name>PetterLiu</name><uri>http://www.cnblogs.com/wintersun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/wintersun/archive/2012/02/18/2357197.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/wintersun/archive/2012/02/18/2357197.html"/><content type="html">&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Asp.net MVC 3 RTM Source Code 您可以从这里&lt;a href="http://aspnet.codeplex.com/releases/view/58781#DownloadId=195410" target="_blank"&gt;下载&lt;/a&gt;. 在源代码中有一个帮助处UnitTest中Exception的帮助类，我们还可以继续扩展。看下面的代码：     &lt;br /&gt;&amp;#160;&lt;/p&gt;  &lt;pre &gt;&lt;span style="color: blue"&gt;public static class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ExceptionAssert &lt;/span&gt;{&#xD;
        &lt;span style="color: blue"&gt;private const string &lt;/span&gt;ArgumentExceptionMessageFormat = &lt;span style="color: #a31515"&gt;&amp;quot;{0}\r\nParameter name: {1}&amp;quot;&lt;/span&gt;;&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;Throws&amp;lt;TException&amp;gt;(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act) &lt;span style="color: blue"&gt;where &lt;/span&gt;TException : &lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;{&#xD;
            Throws&amp;lt;TException&amp;gt;(act, ex =&amp;gt; &lt;span style="color: blue"&gt;true&lt;/span&gt;);&#xD;
        }&#xD;
&#xD;
&lt;strong&gt;&lt;em&gt;        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;Throws&amp;lt;TException, TResult&amp;gt;(&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&amp;lt;TResult&amp;gt; action) &lt;span style="color: blue"&gt;where &lt;/span&gt;TException : &lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color: #2b91af"&gt;Exception&#xD;
        &lt;/span&gt;{&#xD;
            Throws&amp;lt;TException&amp;gt;(() =&amp;gt; action(), ex =&amp;gt; &lt;span style="color: blue"&gt;true&lt;/span&gt;);&#xD;
        }&lt;/em&gt;&lt;/strong&gt;&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;Throws&amp;lt;TException&amp;gt;(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&amp;lt;TException,&lt;span style="color: blue"&gt;bool&lt;/span&gt;&amp;gt; condition) &lt;span style="color: blue"&gt;where &lt;/span&gt;TException : &lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;{&#xD;
            &lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;ex = &lt;span style="color: #2b91af"&gt;Capture&lt;/span&gt;.Exception(act);&#xD;
            &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.IsNotNull(ex, &lt;span style="color: #a31515"&gt;&amp;quot;The expected exception was not thrown&amp;quot;&lt;/span&gt;);&#xD;
            &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.IsInstanceOfType(ex, &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(TException), &lt;span style="color: #a31515"&gt;&amp;quot;The exception thrown was not of the expected type&amp;quot;&lt;/span&gt;);&#xD;
            &lt;span style="color: #2b91af"&gt;Assert&lt;/span&gt;.IsTrue(condition((TException)ex), &lt;span style="color: #2b91af"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;@&amp;quot;Exception did not match the specified condition&#xD;
Actual Exception: {0}&amp;quot;&lt;/span&gt;, ex));&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;Throws&amp;lt;TException&amp;gt;(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;action, &lt;span style="color: blue"&gt;string &lt;/span&gt;expectedMessage) &lt;span style="color: blue"&gt;where &lt;/span&gt;TException : &lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;{&#xD;
            Throws&amp;lt;TException&amp;gt;(action, ex =&amp;gt; &lt;span style="color: #2b91af"&gt;String&lt;/span&gt;.Equals(ex.Message, expectedMessage, &lt;span style="color: #2b91af"&gt;StringComparison&lt;/span&gt;.Ordinal));&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgNull(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName) {&#xD;
            Throws&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentNullException&lt;/span&gt;&amp;gt;(act, CreateArgNullChecker(paramName));&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgNullOrEmpty(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName) {&#xD;
            ThrowsArgumentException&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentException&lt;/span&gt;&amp;gt;(act, paramName, &lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Cannot_Be_Null_Or_Empty);&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgEmpty(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName) {&#xD;
            ThrowsArgumentException&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentException&lt;/span&gt;&amp;gt;(act, paramName, &lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_Null_Or_Non_Empty);&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgGreaterThan(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName, &lt;span style="color: blue"&gt;string &lt;/span&gt;value) {&#xD;
            ThrowsArgumentException&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentOutOfRangeException&lt;/span&gt;&amp;gt;(act, paramName, &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_GreaterThan, value));&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgGreaterThanOrEqualTo(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName, &lt;span style="color: blue"&gt;string &lt;/span&gt;value) {&#xD;
            ThrowsArgumentException&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentOutOfRangeException&lt;/span&gt;&amp;gt;(act, paramName, &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_GreaterThanOrEqualTo, value));&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgLessThan(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName, &lt;span style="color: blue"&gt;string &lt;/span&gt;value) {&#xD;
            ThrowsArgumentException&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentOutOfRangeException&lt;/span&gt;&amp;gt;(act, paramName, &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_LessThan, value));&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgLessThanOrEqualTo(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName, &lt;span style="color: blue"&gt;string &lt;/span&gt;value) {&#xD;
            ThrowsArgumentException&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentOutOfRangeException&lt;/span&gt;&amp;gt;(act, paramName, &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_LessThanOrEqualTo, value));&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsEnumArgOutOfRange&amp;lt;TEnumType&amp;gt;(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName) {&#xD;
            ThrowsArgumentException&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentOutOfRangeException&lt;/span&gt;&amp;gt;(act, paramName, &lt;span style="color: #2b91af"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_Enum_Member,&#xD;
                                                                 &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(TEnumType).Name));&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgOutOfRange(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName, &lt;span style="color: blue"&gt;object &lt;/span&gt;minimum, &lt;span style="color: blue"&gt;object &lt;/span&gt;maximum, &lt;span style="color: blue"&gt;bool &lt;/span&gt;equalAllowed) {&#xD;
            ThrowsArgumentException&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentOutOfRangeException&lt;/span&gt;&amp;gt;(act, paramName, BuildOutOfRangeMessage(paramName, minimum, maximum, equalAllowed));&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;internal static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentNullException&lt;/span&gt;, &lt;span style="color: blue"&gt;bool&lt;/span&gt;&amp;gt; CreateArgNullChecker(&lt;span style="color: blue"&gt;string &lt;/span&gt;paramName) {&#xD;
            &lt;span style="color: blue"&gt;return &lt;/span&gt;ex =&amp;gt; ex.ParamName.Equals(paramName);&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;private static string &lt;/span&gt;BuildOutOfRangeMessage(&lt;span style="color: blue"&gt;string &lt;/span&gt;paramName, &lt;span style="color: blue"&gt;object &lt;/span&gt;minimum, &lt;span style="color: blue"&gt;object &lt;/span&gt;maximum, &lt;span style="color: blue"&gt;bool &lt;/span&gt;equalAllowed) {&#xD;
            &lt;span style="color: blue"&gt;if &lt;/span&gt;(minimum == &lt;span style="color: blue"&gt;null&lt;/span&gt;) {&#xD;
                &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;.Format(equalAllowed ? &lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_LessThanOrEqualTo : &lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_LessThan, maximum);&#xD;
            }&#xD;
            &lt;span style="color: blue"&gt;else if &lt;/span&gt;(maximum == &lt;span style="color: blue"&gt;null&lt;/span&gt;) {&#xD;
                &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;.Format(equalAllowed ? &lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_GreaterThanOrEqualTo : &lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_GreaterThan, minimum);&#xD;
            }&#xD;
            &lt;span style="color: blue"&gt;else &lt;/span&gt;{&#xD;
                &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #2b91af"&gt;CommonResources&lt;/span&gt;.Argument_Must_Be_Between, minimum, maximum);&#xD;
            }&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgumentException(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;message) {&#xD;
            ThrowsArgumentException&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentException&lt;/span&gt;&amp;gt;(act, message);&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgumentException&amp;lt;TArgException&amp;gt;(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;message) &lt;span style="color: blue"&gt;where &lt;/span&gt;TArgException : &lt;span style="color: #2b91af"&gt;ArgumentException &lt;/span&gt;{&#xD;
            Throws&amp;lt;TArgException&amp;gt;(act, ex =&amp;gt;&#xD;
                ex.Message.Equals(message));&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgumentException(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName, &lt;span style="color: blue"&gt;string &lt;/span&gt;message) {&#xD;
            ThrowsArgumentException&amp;lt;&lt;span style="color: #2b91af"&gt;ArgumentException&lt;/span&gt;&amp;gt;(act, paramName, message);&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;public static void &lt;/span&gt;ThrowsArgumentException&amp;lt;TArgException&amp;gt;(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act, &lt;span style="color: blue"&gt;string &lt;/span&gt;paramName, &lt;span style="color: blue"&gt;string &lt;/span&gt;message) &lt;span style="color: blue"&gt;where &lt;/span&gt;TArgException : &lt;span style="color: #2b91af"&gt;ArgumentException &lt;/span&gt;{&#xD;
            Throws&amp;lt;TArgException&amp;gt;(act, ex =&amp;gt;&#xD;
                ex.ParamName.Equals(paramName) &amp;amp;&amp;amp;&#xD;
                ex.Message.Equals(&lt;span style="color: #2b91af"&gt;String&lt;/span&gt;.Format(ArgumentExceptionMessageFormat, message, paramName)));&#xD;
        }&#xD;
    }&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue"&gt;public static class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Capture &lt;/span&gt;{&#xD;
    &lt;span style="color: blue"&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;Exception(&lt;span style="color: #2b91af"&gt;Action &lt;/span&gt;act) {&#xD;
        &lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;ex = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&#xD;
        &lt;span style="color: blue"&gt;try &lt;/span&gt;{&#xD;
            act();&#xD;
        }&#xD;
        &lt;span style="color: blue"&gt;catch &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Exception &lt;/span&gt;exc) {&#xD;
            ex = exc;&#xD;
        }&#xD;
&#xD;
        &lt;span style="color: blue"&gt;return &lt;/span&gt;ex;&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;br /&gt;很有用，我们同样可以对它的UnitTest: &#xD;
&#xD;
&lt;br /&gt;&#xD;
&#xD;
&lt;pre &gt;[&lt;span style="color: #2b91af"&gt;TestClass&lt;/span&gt;]&#xD;
&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ExceptionAssertTest&#xD;
&lt;/span&gt;{&#xD;
    [&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&#xD;
    [&lt;span style="color: #2b91af"&gt;ExpectedException&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;AssertFailedException&lt;/span&gt;))]&#xD;
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;DoesnotThrowException()&#xD;
    {&#xD;
        &lt;span style="color: #2b91af"&gt;ExceptionAssert&lt;/span&gt;.Throws&amp;lt;&lt;span style="color: #2b91af"&gt;ApplicationException&lt;/span&gt;&amp;gt;(() =&amp;gt; { }, &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty);&#xD;
    }&#xD;
&#xD;
    [&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&#xD;
    [&lt;span style="color: #2b91af"&gt;ExpectedException&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;AssertFailedException&lt;/span&gt;))]&#xD;
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;ThrowException()&#xD;
    {&#xD;
        &lt;span style="color: #2b91af"&gt;ExceptionAssert&lt;/span&gt;.Throws&amp;lt;&lt;span style="color: #2b91af"&gt;ApplicationException&lt;/span&gt;&amp;gt;(() =&amp;gt; { &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ApplicationException&lt;/span&gt;(); }, &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty);&#xD;
    }&#xD;
&#xD;
    [&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&#xD;
    [&lt;span style="color: #2b91af"&gt;ExpectedException&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;AssertFailedException&lt;/span&gt;))]&#xD;
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;ThrowExceptionWithIncorrectMessage()&#xD;
    {&#xD;
        &lt;span style="color: #2b91af"&gt;ExceptionAssert&lt;/span&gt;.Throws&amp;lt;&lt;span style="color: #2b91af"&gt;ApplicationException&lt;/span&gt;&amp;gt;(() =&amp;gt; { &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ApplicationException&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;abc&amp;quot;&lt;/span&gt;); }, &lt;span style="color: #a31515"&gt;&amp;quot;cba&amp;quot;&lt;/span&gt;);&#xD;
    }&#xD;
&#xD;
    [&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&#xD;
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;ThrowExceptionWithCorrectMessage()&#xD;
    {&#xD;
        &lt;span style="color: #2b91af"&gt;ExceptionAssert&lt;/span&gt;.Throws&amp;lt;&lt;span style="color: #2b91af"&gt;ApplicationException&lt;/span&gt;&amp;gt;(() =&amp;gt; { &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ApplicationException&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;abcd&amp;quot;&lt;/span&gt;); }, &lt;span style="color: #a31515"&gt;&amp;quot;abcd&amp;quot;&lt;/span&gt;);&#xD;
    }&#xD;
&#xD;
    [&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&#xD;
    [&lt;span style="color: #2b91af"&gt;ExpectedException&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;AssertFailedException&lt;/span&gt;))]&#xD;
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;ThrowIncorrectException()&#xD;
    {&#xD;
        &lt;span style="color: #2b91af"&gt;ExceptionAssert&lt;/span&gt;.Throws&amp;lt;&lt;span style="color: #2b91af"&gt;ApplicationException&lt;/span&gt;&amp;gt;(() =&amp;gt; { &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SystemException&lt;/span&gt;(); }, &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty);&#xD;
    }&#xD;
&#xD;
    [&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&#xD;
    [&lt;span style="color: #2b91af"&gt;ExpectedException&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;AssertFailedException&lt;/span&gt;))]&#xD;
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;ThrowDerivedException()&#xD;
    {&#xD;
        &lt;span style="color: #2b91af"&gt;ExceptionAssert&lt;/span&gt;.Throws&amp;lt;&lt;span style="color: #2b91af"&gt;SystemException&lt;/span&gt;&amp;gt;(() =&amp;gt; { &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ArgumentException&lt;/span&gt;(); }, &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty);&#xD;
    }&#xD;
&#xD;
    [&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&#xD;
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;ExpectExceptionWithoutCheckingMessage()&#xD;
    {&#xD;
        &lt;span style="color: #2b91af"&gt;ExceptionAssert&lt;/span&gt;.Throws&amp;lt;&lt;span style="color: #2b91af"&gt;SystemException&lt;/span&gt;&amp;gt;(() =&amp;gt; { &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;SystemException&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;abc&amp;quot;&lt;/span&gt;); });&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: blue"&gt;public static void &lt;/span&gt;SimpleMethod() { &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;(); }&#xD;
    &lt;span style="color: blue"&gt;public static int &lt;/span&gt;SimpleFunction() { &lt;span style="color: blue"&gt;throw new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;(); }&#xD;
&#xD;
    [&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&#xD;
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;UseExpressionInsteadOfLambda()&#xD;
    {&#xD;
        &lt;span style="color: #2b91af"&gt;ExceptionAssert&lt;/span&gt;.Throws&amp;lt;&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;&amp;gt;(SimpleMethod);&#xD;
        &lt;span style="color: #2b91af"&gt;ExceptionAssert&lt;/span&gt;.Throws&amp;lt;&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;,&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt;(SimpleFunction);&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;br /&gt;在项目是它是这样用的，这样的代码是不是简洁的多：&#xD;
&#xD;
&lt;br /&gt; &#xD;
&#xD;
&lt;br /&gt;&#xD;
&#xD;
&lt;pre &gt;[&lt;span style="color: #2b91af"&gt;TestMethod&lt;/span&gt;]&#xD;
&lt;span style="color: blue"&gt;public void &lt;/span&gt;ValidationSummaryClassNameThrowsWhenAssignedNull() {&#xD;
    &lt;span style="color: green"&gt;// Act and Assert&#xD;
    &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ExceptionAssert&lt;/span&gt;.ThrowsArgNull(() =&amp;gt; &lt;span style="color: #2b91af"&gt;HtmlHelper&lt;/span&gt;.ValidationSummaryClass = &lt;span style="color: blue"&gt;null&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;value&amp;quot;&lt;/span&gt;);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;br /&gt;所以任意一个流行的开源项目，都有好的代码值得我们学习. 希望对您有所帮助。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;还有一个简化版本&amp;#160; &lt;a href="http://www.cnblogs.com/wintersun/archive/2011/09/04/2166773.html"&gt;MsTest中实现类似NUnit中Assert.Throws&lt;/a&gt; &#xD;
&#xD;
  &lt;br /&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p id="AllanboltSignature"&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p style="border-bottom: #e0e0e0 1px dashed; border-left: #e0e0e0 1px dashed; padding-bottom: 10px; padding-left: 60px; padding-right: 10px; font-family: 微软雅黑; font-size: 12px; border-top: #e0e0e0 1px dashed; border-right: #e0e0e0 1px dashed; padding-top: 10px" id="PSignature"&gt;&lt;br /&gt;作者：&lt;a href="http://www.cnblogs.com/wintersun/" target="_blank"&gt;Petter Liu&lt;/a&gt; &#xD;
&#xD;
  &lt;br /&gt;出处：&lt;a href="http://www.cnblogs.com/wintersun/" target="_blank"&gt;http://www.cnblogs.com/wintersun/&lt;/a&gt; &#xD;
&#xD;
  &lt;br /&gt;本文版权归作者和博客园共有，欢迎转载，但未经作者同意必须保留此段声明，且在文章页面明显位置给出原文连接，否则保留追究法律责任的权利。 &#xD;
&#xD;
  &lt;br /&gt;该文章也同时发布在我的独立博客中-&lt;a href="http://www.cnblogs.com/wintersun/"&gt;Petter Liu Blog&lt;/a&gt;。 &lt;/p&gt;&lt;img src="http://www.cnblogs.com/wintersun/aggbug/2357197.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/wintersun/archive/2012/02/18/2357197.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/xiongfei/archive/2012/02/18/2356639.html</id><title type="text">T-SQL数据存储过程</title><summary type="text"/><published>2012-02-17T18:23:00Z</published><updated>2012-02-17T18:23:00Z</updated><author><name>╰儍儍ゞ ┄*噯</name><uri>http://www.cnblogs.com/xiongfei/</uri></author><link rel="alternate" href="http://www.cnblogs.com/xiongfei/archive/2012/02/18/2356639.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/xiongfei/archive/2012/02/18/2356639.html"/><content type="html">&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;创建一个名为CheckGender的存储过程，该过程接受一个名称作为其参数并检查名称的前缀为Ms. 还是Mr.如果前缀为Ms.则显示&amp;ldquo;你输入的是女性的名字&amp;rdquo;，如果前缀是Mr.则显示信息&amp;ldquo;你输入的是男性的姓名&amp;rdquo;，按照题目的要求自己设置信息执行上面的存储过程。&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #ff00ff; background-color: #ccffff;"&gt;两种方法：截取(substring)，模糊判断(like)&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;create proc CheckGender&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;@sex varchar(80)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;as&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;if substring(@sex,1,3)='MR.'&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;print '你输入的是男性的名字'&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;return&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;if substring(@sex,1,3)='MS.'&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;print '你输入的是女性的名字'&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;return&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;return&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;执行存储过程&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;exec CheckGender 'MR.chen'&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;输出的信息是 &amp;ldquo;你输入的是男性的姓名&amp;rdquo;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;另一种写法&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;create proc CheckGender&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;@sex varchar(80) output&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;as&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;if @sex like 'MR.%'&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;begin&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;print '你输入的是男性的名字'&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;end&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;if @sex like 'MS.%'&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;print '你输入的是女性的名字'&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;end&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;执行存储过程&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;exec CheckGender 'MR.chen'&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;span style="background-color: #ccffff;"&gt;输出的信息是 &amp;ldquo;你输入的是男性的姓名&amp;rdquo;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/xiongfei/aggbug/2356639.html?type=0" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/xiongfei/archive/2012/02/18/2356639.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
