﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-MaoBisheng</title><link>http://www.cnblogs.com/MaoBisheng/</link><description>Asp.Net(C#) &amp; SQL &amp; Oracle</description><language>zh-cn</language><lastBuildDate>Mon, 06 Jul 2009 13:01:24 GMT</lastBuildDate><pubDate>Mon, 06 Jul 2009 13:01:24 GMT</pubDate><ttl>60</ttl><item><title>（转）提高网站性能的方法</title><link>http://www.cnblogs.com/MaoBisheng/archive/2009/06/20/1507225.html</link><dc:creator>毛必盛</dc:creator><author>毛必盛</author><pubDate>Sat, 20 Jun 2009 01:49:00 GMT</pubDate><guid>http://www.cnblogs.com/MaoBisheng/archive/2009/06/20/1507225.html</guid><wfw:comment>http://www.cnblogs.com/MaoBisheng/comments/1507225.html</wfw:comment><comments>http://www.cnblogs.com/MaoBisheng/archive/2009/06/20/1507225.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/MaoBisheng/comments/commentRss/1507225.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/MaoBisheng/services/trackbacks/1507225.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>来源：<a href="http://www.cnblogs.com/fly871117/archive/2009/06/20/1507153.html">http://www.cnblogs.com/fly871117/archive/2009/06/20/1507153.html</a></p>
<p>&nbsp;</p>
<p align="center"><a class="singleposttitle" id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/fly871117/archive/2009/06/20/1507153.html"><font color="#223355"><strong style="font-size: 18pt">提高网站性能的方法</strong></font></a></p>
<div><strong>缓存</strong></div>
<div>&nbsp;对那些经常使用的数据和需要大量的时间来创建的数据可以存储在内存中，后来的请求直接使用，不需要在重新生成，</div>
<div>&nbsp;使用方法很简单：</div>
<div>&nbsp;&lt;%@OutputCache VaryByParams="none" Duration="120"%&gt;</div>
<div>&nbsp;使用缓存的原则：</div>
<div>&nbsp;1）在页面中静态的内容和动态的内容分割开来。</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以把动态内容单独出来，做成用户控件</div>
<div>&nbsp;2）缓存合理的数据</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;并不是所有的数据内容都进行缓存就能提高性能的，由于服务器的资源是有限的，缓存不适当的数据反而会降低性能，应当缓存的应该是应用程序级的数据，多个用户共同使用的数据，静态数据，生成数据需要开销很大的数据，DataSet以及自定义的对象等，不要缓存数据库连接对象，不要缓存DataReader.</div>
<div>&nbsp;3）选择适当的方式</div>
<p>&nbsp;</p>
<div><strong>视图</strong></div>
<div>1）如果不需要用视图请禁用它，视图状态默认是允许的，如果页面不进行Postback如果不处理服务器控件事件，可以禁用它</div>
<div>2）尽量减少视图状态中存放的对象，不要在视图状态中存放大量的对象</div>
<div>&nbsp;</div>
<div>
<div><strong>页面处理</strong></div>
<div>1）尽量减少页面文件的大小</div>
<div>&nbsp;&nbsp; &nbsp; 将CSS和脚本存为单独的文件，不要将多个任务放在同一个页面中，不要指定服务器控件的ID数据位比较长的字符串</div>
<div>2）通过Page.IsPostBack减少代码的执行数量。</div>
<div>3）禁用Debug="true" 减少页面生成额外的调试信息，</div>
<div>4）使用Server.Transfer而不使用Response.Redirect</div>
<div>5）尽量使用客户端验证，减少使用服务器端的验证，减少服务器和客户端之间的往返。</div>
<div>6）在适当的时候使用客户端服务器控件</div>
<div>&nbsp;&nbsp; &nbsp; 如果不需要在回发时保持状态，如果显示的数据是静态数据，如果不需要自爱服务器端用代码访问控件，如果不需要回发处理，如果显示的是只读数据，就可以考虑不使用服务器控件。</div>
<div>7）尽量避免嵌套服务器控件。</div>
<div>&nbsp;</div>
<div>
<div><strong>避免使用Page.DataBind和DataBinder.Eval</strong></div>
<div>Page.DataBind执行时会将页面中所有的服务器控件执行一次DataBind方法，如果没有必要就不要使用。</div>
<div>DataBinder.Eval方法是使用反射来获取参数的。尽量少使用</div>
<div>尽量不要使用：</div>
<div>&lt;ItemTemplate&gt;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;%#DataBinder.Eval(Container.DataItem,"字段一"))%&gt;&lt;/td&gt;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;%#DataBinder.Eval(Container.DataItem,"字段一"))%&gt;&lt;/td&gt;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;</div>
<div>&lt;/ItemTemplate&gt;</div>
<div>而使用：</div>
<div>&lt;ItemTemplate&gt;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;%#(DataRowView)Container.DataItem["字段1"]%&gt;&lt;/td&gt;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;&lt;%#(DataRowView)Container.DataItem["字段1"]%&gt;&lt;/td&gt;</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;</div>
<div>&lt;/ItemTemplate&gt;</div></div></div>
<div>&nbsp;</div>
<div>
<div><strong>关于Application和Session对象</strong></div>
<div>1）尽量使用InProc模式的Session这个模式最快</div>
<div>2）在Session里存储基本类型的书减少序列化所消耗的资源</div>
<div>3）如果不用Session，请使用EnableViewState=&#8220;false&#8221;禁用它</div>
<div>4）如果不修改Session变量，请用ReadOnly属性设置</div></div>
<div>&nbsp;</div>
<div>
<div><strong>关于字符串操作</strong></div>
<div>1）尽量使用Response.Write将结果输出，这种方法是最快的。不要将字符串连接在一起一次输出</div>
<div>2）在字符串短并且少的情况使用String.Concat方法，在字符串长度未知，并且比较长的情况下使用SringBuilder对象</div>
<div>3）不要使用StrVar==""来判断字符串是否为空，这样会产生额外的字符串，请使用StrVar==String.Empty代替，或者使用StrVar.Length==0来判断</div>
<div>4）请使用String.Compare方法来比较字符串</div></div>
<div>&nbsp;</div>
<div>
<div><strong>关于数据访问</strong></div>
<div>1）尽量使用存储过程返回数据</div>
<div>2）在数据库中只返回有用的数据结果，不要选择不使用的数据字段。</div>
<div>3）进行使用DataReader进行数据绑定，DataReader是单向只读的。</div>
<div>4）尽量一次返回多个记录集，而不是每个记录集分别打开一次数据库连接进行查询。</div>
<div>5）尽量晚的打开数据库连接，尽量早地关闭数据库连接，（尽量使用using语句关闭数据库连接）</div>
<div>6）使用连接池提高网站性能，不要变动数据库连接字符串，不要将连接进行缓存或者放置在Application对象中，当使用连接池时，关闭连接并不是物理连接，而是将连接返回给连接池供别的用户使用，因此应该尽量早的关闭连接。</div>
<div>7）使用ExecuteNonQuery返方法执行不返回数据的操作，使用ExectueScalar方法返回单个结果的操作，使用CommandBehavior.SequentialAccess返回二进制数据或者大数据。</div>
<div>8）如果多次相同查询，使用Command.Prepare方法。</div>
<div>9）使用GetOrdinal方法预先得到索引值，使用缩影值比使用字符串的列名查询数据效率更高。</div></div>
<div>&nbsp;</div>
<div>
<div><strong>关于代码优化</strong></div>
<div>1）在解析基本数据类型是，<span style="color: red">使用TryParse方法比Try好</span></div>
<div>2）使用AppendAllText、WriteAllBytes、WriteAllLine、WriteAllText、ReadAllBytes、ReadAllLine、ReadAllText方法读写文件内容可以优化性能，</div>
<div>3）不要使用如下方法</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>string[]arr=new string{"fly","flying"}</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>for(int i=0;i&lt;arr.Length;i++)</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//TODO</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>}<span style="color: red">这种方法每循环一次就计算一次arr.Length的值</span></div>
<div>而使用</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>string[]arr=new string{"fly","flying"}</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>int length=arr.Length;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>for(int i=0;length;i++)</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//TODO</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>}</div>
<div>4）<span style="color: red">避免在循环里创建对象</span></div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>for(int i=0;i&lt;10;i++)</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlConnection cn=new SqlConnection();</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ToDo</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>而使用</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>SqlConnection cn=new SqlConnection();</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>for(int i=0;i&lt;10;i++)</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ToDo</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>}</div>
<div>5) <span style="color: #ff0000">尽量减少装箱的次数，如果要在多处进行类型转换，请先定义一个变量</span></div>
<div>如：</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>int i=129;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>object box;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>box=(objiect)i；</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>//下面多次使用Box；</div>
<div>6）<span style="color: #ff0000">不要使用例外控制程序流程</span></div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>void UserExists(string UserID)</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(dr.Read())</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw(new Exception("用户名不存在");</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>修改代码如下：</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>bool UserExists(string UserID)</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000">return dr.HasRows；</span></div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>}</div>
<div>7）在循环中不要使用不变的对象或者字段，例如:</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>for(int i=0;i&lt;Customer.Order.Count;i++)</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintCustomerData(Customer.State,Customer.Zip,Customer.Order[i]);</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>这样的话没错循环都要查找对象的属性值或者字段。</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>string state=Customer.State;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>string []zip=Customer.Zip;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>int count=Customers.Order.Count;</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>for(int i=0;i&lt;count;i++)</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintCustomerData(state,zip,Customer.Order[i]);</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space: pre"></span></div>
<div>8）使用for循环代替foreach循环</div>
<div>9）数组是所有集合中最快的，如果没有特殊的需要，尽量使用数组代替集合</div>
<div>10）了解各个集合的特性，选择合适的类型，</div>
<div>11）使用泛型，避免减少使用装箱，拆箱。</div></div>
<div>&nbsp;</div><img src ="http://www.cnblogs.com/MaoBisheng/aggbug/1507225.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48008/" target="_blank">IBM发布全球首款开源智能编译器</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>hosts文件及Nslookup命令</title><link>http://www.cnblogs.com/MaoBisheng/archive/2009/05/11/1454517.html</link><dc:creator>毛必盛</dc:creator><author>毛必盛</author><pubDate>Mon, 11 May 2009 14:55:00 GMT</pubDate><guid>http://www.cnblogs.com/MaoBisheng/archive/2009/05/11/1454517.html</guid><wfw:comment>http://www.cnblogs.com/MaoBisheng/comments/1454517.html</wfw:comment><comments>http://www.cnblogs.com/MaoBisheng/archive/2009/05/11/1454517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/MaoBisheng/comments/commentRss/1454517.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/MaoBisheng/services/trackbacks/1454517.html</trackback:ping><description><![CDATA[<dl>
<dt>&nbsp;
<dt>
<div align="center"><span style="font-size: 24pt">hosts文件及Nslookup命令</span></div>
<dt>&nbsp;
<dt><span style="color: red">文件路径（XP系统）：</span>
<dt>C:\WINDOWS\system32\drivers\etc
<dt>&nbsp;
<dt><span style="color: red">文件内容：</span>
<dt># Copyright (c) 1993-1999 Microsoft Corp.<br />
#<br />
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.<br />
#<br />
# This file contains the mappings of IP addresses to host names. Each<br />
# entry should be kept on an individual line. The IP address should<br />
# be placed in the first column followed by the corresponding host name.<br />
# The IP address and the host name should be separated by at least one<br />
# space.<br />
#<br />
# Additionally, comments (such as these) may be inserted on individual<br />
# lines or following the machine name denoted by a '#' symbol.<br />
#<br />
# For example:<br />
#<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 102.54.94.97&nbsp;&nbsp;&nbsp;&nbsp; rhino.acme.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # source server<br />
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 38.25.63.10&nbsp;&nbsp;&nbsp;&nbsp; x.acme.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # x client host
<dt><span style="color: #0000ff">127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localhost</span></dt></dl>
<p>&nbsp;&nbsp;&nbsp; 前面的都是注释，就最后一行有用，作用是包含IP地址和Host name(主机名)的映射关系，是一个映射IP地址和Host name(主机名)的规定，规定要求每段只能包括一个映射关系，IP地址要放在每段的最前面，空格后再写上映射的Host name(主机名)。</p>
<p>&nbsp;&nbsp;&nbsp; 在网络上访问网站，要首先通过DNS服务器把网络域名（<a href="http://www.xxxx.com/">http://www.xxxx.com/</a>）解析成61.XXX.XXX.XXX的IP地址后，我们的计算机才能访问。要是对于每个域名请求我们都要等待域名服务器解析后返回IP信息，这样访问网络的效率就会降低，而Hosts文件就能提高解析效率。根据Windows系统规定，在进行DNS请求以前，Windows系统会先检查自己的Hosts文件中是否有这个地址映射关系，如果有则调用这个IP地址映射，如果没有再向已知的DNS服务器提出域名解析。也就是说Hosts的请求级别比DNS高。　　<br />
知道了Hosts文件的工作方式，那在具体使用中它有哪些作用呢?　　<br />
1.加快域名解析：对于要经常访问的网站，我们可以通过在Hosts中配置域名和IP的映射关系，这样当我们输入域名计算机就能很快解析出IP，而不用请求网络上的DNS服务器。　　<br />
2.方便局域网用户：在很多单位的局域网中，会有服务器提供给用户使用。但由于局域网中一般很少架设DNS服务器，访问这些服务要输入难记的IP地址，对不少人来说相当麻烦。现在可以分别给这些服务器取个容易记住的名字，然后在Hosts中建立IP映射，这样以后访问的时候我们输入这个服务器的名字就行了。　　<br />
3.屏蔽网站：现在有很多网站不经过用户同意就将各种各样的插件安装到你的计算机中，有些说不定就是木马或病毒。对于这些网站我们可以利用Hosts把该网站的域名映射到错误的IP或自己计算机的IP，这样就不用访问了。比如不想访问<a href="http://www.xxxx.com/">http://www.xxxx.com/</a>，那我们在Hosts写上以下内容：127.0.0.1 <a href="http://www.xxxx.com/">http://www.xxxx.com/</a> #屏蔽的网站　　0.0.0.0 <a href="http://www.xxxx.com/">http://www.xxxx.com/</a> #屏蔽的网站　　这样计算机解析域名就解析到本机或错误的IP，达到了屏蔽的目的。　　<br />
4.顺利连接系统：对于Lotus的服务器和一些数据库服务器，在访问时如果直接输入IP地址那是不能访问的，只能输入服务器名才能访问。那么我们配置好Hosts文件，这样输入服务器名就能顺利连接了。　　最后要指出的是，Hosts文件配置的映射是静态的，如果网络上的计算机更改了请及时更新IP地址，否则将不能访问。<br />
</p>
<p>&nbsp;</p>
<p>Nslookup 是一个监测网络中DNS服务器是否能正确实现域名解析的命令行工具。</p>
<dl>
<dt>使用方法：
<dt>C:\Documents and Settings\shdell&gt;<span style="color: red">nslookup <a href="http://www.qidian.com/">http://www.qidian.com/</a><br />
</span>*** Can't find server name for address 192.168.0.1: Non-existent domain<br />
*** Default servers are not available<br />
Server:&nbsp; UnKnown<br />
Address:&nbsp; 192.168.0.1
<dt>Non-authoritative answer:<br />
Name:&nbsp;&nbsp;&nbsp; <a href="http://www.qidian.wooool.net/">http://www.qidian.wooool.net/</a><br />
<span style="color: red">Addresses:&nbsp; 202.102.58.222, 202.102.58.214<br />
</span>Aliases:&nbsp; <a href="http://www.qidian.com/">http://www.qidian.com/</a></dt></dl>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/MaoBisheng/aggbug/1454517.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48007/" target="_blank">IE颓势不减 微软下月公布最新浏览器架构</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>VS 2008 安装问题</title><link>http://www.cnblogs.com/MaoBisheng/archive/2009/05/01/1447601.html</link><dc:creator>毛必盛</dc:creator><author>毛必盛</author><pubDate>Fri, 01 May 2009 14:29:00 GMT</pubDate><guid>http://www.cnblogs.com/MaoBisheng/archive/2009/05/01/1447601.html</guid><wfw:comment>http://www.cnblogs.com/MaoBisheng/comments/1447601.html</wfw:comment><comments>http://www.cnblogs.com/MaoBisheng/archive/2009/05/01/1447601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/MaoBisheng/comments/commentRss/1447601.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/MaoBisheng/services/trackbacks/1447601.html</trackback:ping><description><![CDATA[<p>错误描述：<br />
<span style="font-size: 8pt">[01/05/09,21:55:30] setup.exe: [2] ISetupComponent::Pre/Post/Install() failed in ISetupManager::InternalInstallManager() with HRESULT -2147023293.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Microsoft Visual Studio Web 创作组件 is not installed.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Microsoft .NET Compact Framework 2.0 SP2 was not attempted to be installed.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Microsoft .NET Compact Framework 3.5 was not attempted to be installed.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Microsoft Visual Studio Tools for the Microsoft Office system (3.0 版运行库) was not attempted to be installed.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Runtime was not attempted to be installed.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Runtime 语言包 was not attempted to be installed.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Microsoft Visual Studio Tools for the Microsoft Office system (3.0 版运行库)语言包 - CHS was not attempted to be installed.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Microsoft SQL Server Compact 3.5 was not attempted to be installed.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Microsoft SQL Server Compact 3.5 设计工具 was not attempted to be installed.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Microsoft SQL Server Compact 3.5 For Devices was not attempted to be installed.<br />
[01/05/09,21:55:31] VS70pgui: [2] DepCheck indicates Windows Mobile 5.0 SDK R2 for Pocket PC was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Windows Mobile 5.0 SDK R2 for Smartphone was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Microsoft Device Emulator 3.0 版 was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Microsoft SQL Server 2005 Express Edition (x86) was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Crystal Reports Basic for Visual Studio 2008 was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Crystal Reports Basic for Visual Studio 2008 语言包 was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Microsoft Windows SDK for Visual Studio 2008 Tools (x86) was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Microsoft Windows SDK for Visual Studio 2008 标头和库(x86) was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Microsoft Windows SDK for Visual Studio 2008 Win32 Tools (x86) was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Microsoft Windows SDK for Visual Studio 2008 .NET Framework Tools (x86) was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Microsoft Windows SDK for Visual Studio 2008 SDK 引用程序集和 IntelliSense (x86) was not attempted to be installed.<br />
[01/05/09,21:55:33] VS70pgui: [2] DepCheck indicates Microsoft SQL 发布向导 was not attempted to be installed.</span></p>
<p>问题原因：<br />
原来是OFFICE 2007安装后, 我把C:\MSOCache\All Users目录里的东西删了的原因.</p>
<p>解决办法：<br />
修复OFFICE(Excel &amp; Word), 后重新安装VS2008, 一切OK... </p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/MaoBisheng/aggbug/1447601.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48002/" target="_blank">竞争日趋激烈 微软欲借 Windows 7 扭转战局</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>人生，又过了一站了</title><link>http://www.cnblogs.com/MaoBisheng/archive/2009/04/21/1440570.html</link><dc:creator>毛必盛</dc:creator><author>毛必盛</author><pubDate>Tue, 21 Apr 2009 08:43:00 GMT</pubDate><guid>http://www.cnblogs.com/MaoBisheng/archive/2009/04/21/1440570.html</guid><wfw:comment>http://www.cnblogs.com/MaoBisheng/comments/1440570.html</wfw:comment><comments>http://www.cnblogs.com/MaoBisheng/archive/2009/04/21/1440570.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/MaoBisheng/comments/commentRss/1440570.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/MaoBisheng/services/trackbacks/1440570.html</trackback:ping><description><![CDATA[<p>今天，离职了，告别了相处了近两年的同事，来到浦东，准备开始新的生活。。。</p>
<p>毕业快两年了，除了积累工作经验外，没有什么积蓄，该为自己做点什么了，也该好好规划一下未来了。</p>
<p align="right">2009-04-21</p><img src ="http://www.cnblogs.com/MaoBisheng/aggbug/1440570.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48001/" target="_blank">上海电信计划2012年80%用户实现100M带宽</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>（转）Web.config详解</title><link>http://www.cnblogs.com/MaoBisheng/archive/2009/03/10/1407583.html</link><dc:creator>毛必盛</dc:creator><author>毛必盛</author><pubDate>Tue, 10 Mar 2009 02:19:00 GMT</pubDate><guid>http://www.cnblogs.com/MaoBisheng/archive/2009/03/10/1407583.html</guid><wfw:comment>http://www.cnblogs.com/MaoBisheng/comments/1407583.html</wfw:comment><comments>http://www.cnblogs.com/MaoBisheng/archive/2009/03/10/1407583.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/MaoBisheng/comments/commentRss/1407583.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/MaoBisheng/services/trackbacks/1407583.html</trackback:ping><description><![CDATA[<span style="color: red">转载来源：</span><a href="http://www.doorle.cn/blog/article.asp?id=923">http://www.doorle.cn/blog/article.asp?id=923</a>
<p>&nbsp;</p>
<p align="center"><span style="font-size: 24pt">Web.config详解</span></p>
<dl>
<dt><span style="font-size: 14pt"><strong>一、认识Web.config文件</strong></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Web.config 文件是一个XML文本文件，它用来储存 ASP.NET Web 应用程序的配置信息（如最常用的设置ASP.NET Web 应用程序的身份验证方式），它可以出现在应用程序的每一个目录中。当你通过.NET新建一个Web应用程序后，默认情况下会在根目录自动创建一个默认的Web.config文件，包括默认的配置设置，所有的子目录都继承它的配置设置。<span style="color: red">如果你想修改子目录的配置设置，你可以在该子目录下新建一个Web.config文件。</span>它可以提供除从父目录继承的配置信息以外的配置信息，也可以重写或修改父目录中定义的设置。<br />
<strong>(一).Web.Config是以XML文件规范存储,配置文件分为以下格式<br />
</strong>1.配置节处理程序声明<br />
特点：位于配置文件的顶部，包含在&lt;configSections&gt;标志中。<br />
2.特定应用程序配置<br />
特点: 位于&lt;appSetting&gt;中。可以定义应用程序的全局常量设置等信息.<br />
3.配置节设置<br />
特点: 位于&lt;system.Web&gt;节中，控制Asp.net运行时的行为.<br />
4.配置节组<br />
特点: 用&lt;sectionGroup&gt;标记，可以自定义分组，可以放到&lt;configSections&gt;内部或其它&lt;sectionGroup&gt;标记的内部.<br />
<strong>(二).配置节的每一节</strong><br />
1.&lt;configuration&gt;节<br />
根元素，其它节都是在它的内部.<br />
2.&lt;appSetting&gt;节<br />
此节用于定义应用程序设置项。对一些不确定设置，还可以让用户根据自己实际情况自己设置<br />
用法:<br />
I.定义了一个连接字符串常量，并且在实际应用时可以修改连接字符串，不用修改程式代码.
<dt>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">appSettings</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="Conntction"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="server=192.168.85.66;userid=sa;password=;database=Info;"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">appSettings</span><span style="color: #0000ff">&gt;</span></div>
<dt>II.定义了一个错误重定向页面.
<dt>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">appSettings</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="ErrPage"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="Error.aspx"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">appSettings</span><span style="color: #0000ff">&gt;</span></div>
<dt>3.&lt;compilation&gt;节<br />
格式:
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">compilation&nbsp;</span><span style="color: #ff0000">defaultLanguage</span><span style="color: #0000ff">="c#"</span><span style="color: #ff0000">&nbsp;debug</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span></div>
I.default language:定义后台代码语言,可以选择C#和VB.net两种语言.<br />
II.debug:为true时，启动aspx调试；为false不启动aspx调试，因而可以提高应用程序运行时的性能。一般程序员在开发时设置为true,交给客户时设置为false.<br />
4.&lt;customErrors&gt;节<br />
格式:
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">customErrors&nbsp;</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="RemoteOnly"</span><span style="color: #ff0000">&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;defaultRedirect</span><span style="color: #0000ff">="error.aspx"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;error&nbsp;statusCode</span><span style="color: #0000ff">="440"</span><span style="color: #ff0000">&nbsp;redirect</span><span style="color: #0000ff">="err440page.aspx"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
/&gt;&nbsp;</span></div>
<dt>I.mode:具有On,Off,RemoteOnly 3种状态。On表示始终显示自定义的信息; Off表示始终显示详细的asp.net错误信息; RemoteOnly表示只对不在本地Web服务器上运行的用户显示自定义信息.<br />
II.defaultRedirect: 用于出现错误时重定向的URL地址. 是可选的<br />
III.statusCode: 指明错误状态码，表明一种特定的出错状态.<br />
IV.redirect:错误重定向的URL.<br />
5.&lt;globalization&gt;节<br />
格式:
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">globalization&nbsp;</span><span style="color: #ff0000">requestEncoding</span><span style="color: #0000ff">="utf-8"</span><span style="color: #ff0000">&nbsp;responseEncoding</span><span style="color: #0000ff">="utf-8"</span><span style="color: #ff0000">&nbsp;fileEncoding</span><span style="color: #0000ff">="utf-8"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;</span></div>
I.requestEncoding: 它用来检查每一个发来请求的编码. <br />
II.responseEncoding: 用于检查发回的响应内容编码.<br />
III.fileEncoding: 用于检查aspx,asax等文件解析的默认编码. <br />
6.&lt;sessionState&gt;节<br />
格式:<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">sessionState&nbsp;</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="InProc"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;stateConnectionString</span><span style="color: #0000ff">="tcpip=127.0.0.1:42424"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;sqlConnectionString</span><span style="color: #0000ff">="data&nbsp;source=127.0.0.1;Trusted_Connection=yes"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;cookieless</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;timeout</span><span style="color: #0000ff">="20"</span><span style="color: #ff0000">&nbsp;<br />
</span><span style="color: #0000ff">/&gt;</span></div>
I.mode: 分为off,Inproc,StateServer,SqlServer几种状态<br />
这里有详细介绍此属性: <a href="http://blog.csdn.net/chengking/archive/2005/10/27/518079.aspx" target="_blank" rel="external">http://blog.csdn.net/chengking/archive/2005/10/27/518079.aspx</a> <br />
II.stateConnectionString :指定Asp.net应用程序存储远程会话状态的服务器名，默认为本机<br />
III.sqlConnectionString: 当用会话状态数据库时，在这里设置连接字符串<br />
IV.Cookieless: 设置为true时，表示不使用cookie会话状态来标识客户； 否则，相反.<br />
V.TimeOut: 用来定义会话状态存储的时间，超过期限，将自动终止会话.<br />
7.&lt;authentication&gt;节<br />
格式:
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">authentication&nbsp;</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="Forms"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
</span><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #800000">forms&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">=".ASPXUSERDEMO"</span><span style="color: #ff0000">&nbsp;loginUrl</span><span style="color: #0000ff">="Login.aspx"</span><span style="color: #ff0000">&nbsp;protection</span><span style="color: #0000ff">="All"</span><span style="color: #ff0000">&nbsp;timeout</span><span style="color: #0000ff">="30"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">authentication</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">authorization</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; &lt;</span><span style="color: #800000">deny&nbsp;</span><span style="color: #ff0000">users</span><span style="color: #0000ff">="?"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">authorization</span><span style="color: #0000ff">&gt;</span></div>
<dt>I.Windows: 使用IIS验证方式<br />
II.Forms: 使用基于窗体的验证方式<br />
III.Passport: 采用Passport cookie验证模式<br />
IV.None: 不采用任何验证方式<br />
里面内嵌Forms节点的属性涵义:<br />
I.Name: 指定完成身份验证的Http cookie的名称.<br />
II.LoginUrl: 如果未通过验证或超时后重定向的页面URL，一般为登录页面，让用户重新登录<br />
III.Protection: 指定 cookie数据的保护方式. <br />
可设置为: All None Encryption Validation四种保护方式<br />
a. All表示加密数据，并进行有效性验证两种方式<br />
b. None表示不保护Cookie.<br />
c. Encryption表示对Cookie内容进行加密<br />
d. validation表示对Cookie内容进行有效性验证<br />
IV. TimeOut: 指定Cookie的失效时间. 超时后要重新登录.<br />
<br />
在运行时对Web.config文件的修改不需要重启服务就可以生效（注：&lt;processModel&gt; 节例外）。当然Web.config文件是可以扩展的。你可以自定义新配置参数并编写配置节处理程序以对它们进行处理。<br />
web.config配置文件（默认的配置设置）以下所有的代码都应该位于<br />
&lt;configuration&gt;<br />
&lt;system.web&gt;<br />
和<br />
&lt;/system.web&gt;<br />
&lt;/configuration&gt;<br />
之间，出于学习的目的下面的示例都省略了这段XML标记。<br />
<dt>1、&lt;authentication&gt; 节 <br />
作用：配置 ASP.NET 身份验证支持（为Windows、Forms、PassPort、None四种）。该元素只能在计算机、站点或应用程序级别声明。&lt; authentication&gt; 元素必需与&lt;authorization&gt; 节配合使用。<br />
示例：<br />
以下示例为基于窗体（Forms）的身份验证配置站点，当没有登陆的用户访问需要身份验证的网页，网页自动跳转到登陆网页。<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">authentication&nbsp;</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="Forms"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forms&nbsp;</span><span style="color: #ff0000">loginUrl</span><span style="color: #0000ff">="logon.aspx"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">=".FormsAuthCookie"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">authentication</span><span style="color: #0000ff">&gt;</span></div>
其中元素loginUrl表示登陆网页的名称，name表示Cookie名称。<br />
2、&lt;authorization&gt; 节 <br />
作用：控制对 URL 资源的客户端访问（如允许匿名用户访问）。此元素可以在任何级别（计算机、站点、应用程序、子目录或页）上声明。必需与&lt;authentication&gt; 节配合使用。<br />
示例：以下示例禁止匿名用户的访问<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">authorization</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">deny&nbsp;</span><span style="color: #ff0000">users</span><span style="color: #0000ff">="?"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">authorization</span><span style="color: #0000ff">&gt;</span></div>
注：你可以使用user.identity.name来获取已经过验证的当前的用户名；可以使用web.Security.FormsAuthentication.RedirectFromLoginPage方法将已验证的用户重定向到用户刚才请求的页面.具体的<br />
3、&lt;compilation&gt;节 <br />
作用：配置 ASP.NET 使用的所有编译设置。默认的debug属性为&#8220;True&#8221;.在程序编译完成交付使用之后应将其设为False.
<div class="cnblogs_code" style="width: 835px; height: 178px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">compilation&nbsp;</span><span style="color: #ff0000">debug</span><span style="color: #0000ff">="true"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">assemblies</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">assembly</span><span style="color: #0000ff">="System.Transactions,&nbsp;Version=2.0.0.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=B77A5C561934E089"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">assembly</span><span style="color: #0000ff">="System.Data.OracleClient,&nbsp;Version=2.0.0.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=B77A5C561934E089"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">assembly</span><span style="color: #0000ff">="Accessibility,&nbsp;Version=2.0.0.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=B03F5F7F11D50A3A"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">assembly</span><span style="color: #0000ff">="System.Messaging,&nbsp;Version=2.0.0.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=B03F5F7F11D50A3A"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">assemblies</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">compilation</span><span style="color: #0000ff">&gt;</span></div>
4、&lt;customErrors&gt; <br />
作用：为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XML Web services 中发生的错误。<br />
示例：当发生错误时，将网页跳转到自定义的错误页面。<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">customErrors&nbsp;</span><span style="color: #ff0000">defaultRedirect</span><span style="color: #0000ff">="ErrorPage.aspx"</span><span style="color: #ff0000">&nbsp;mode</span><span style="color: #0000ff">="RemoteOnly"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">customErrors</span><span style="color: #0000ff">&gt;</span></div>
其中元素defaultRedirect表示自定义的错误网页的名称。mode元素表示：对不在本地 Web 服务器上运行的用户显示自定义(友好的)信息。<br />
5、&lt;httpRuntime&gt;节 <br />
作用：配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。<br />
示例：控制用户上传文件最大为4M，最长时间为60秒，最多请求数为100<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">httpRuntime&nbsp;</span><span style="color: #ff0000">maxRequestLength</span><span style="color: #0000ff">="4096"</span><span style="color: #ff0000">&nbsp;executionTimeout</span><span style="color: #0000ff">="60"</span><span style="color: #ff0000">&nbsp;appRequestQueueLimit</span><span style="color: #0000ff">="100"</span><span style="color: #0000ff">/&gt;</span></div>
6、 &lt;pages&gt; <br />
作用：标识特定于页的配置设置（如是否启用会话状态、视图状态，是否检测用户的输入等）。&lt;pages&gt;可以在计算机、站点、应用程序和子目录级别声明。<br />
示例：不检测用户在浏览器输入的内容中是否存在潜在的危险数据（注：该项默认是检测，如果你使用了不检测，一要对用户的输入进行编码或验证)，在从客户端回发页时将检查加密的视图状态，以验证视图状态是否已在客户端被篡改。(注：该项默认是不验证）<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">pages&nbsp;</span><span style="color: #ff0000">buffer</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;enableViewStateMac</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;validateRequest</span><span style="color: #0000ff">="false"</span><span style="color: #0000ff">/&gt;</span></div>
7、&lt;sessionState&gt; <br />
作用：为当前应用程序配置会话状态设置（如设置是否启用会话状态，会话状态保存位置）。<br />
示例：<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">sessionState&nbsp;</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="InProc"</span><span style="color: #ff0000">&nbsp;cookieless</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;timeout</span><span style="color: #0000ff">="20"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">sessionState</span><span style="color: #0000ff">&gt;</span></div>
注： <br />
mode="InProc"表示：在本地储存会话状态（你也可以选择储存在远程服务器或SAL服务器中或不启用会话状态）<br />
cookieless="true"表示：如果用户浏览器不支持Cookie时启用会话状态(默认为False）<br />
timeout="20"表示：会话可以处于空闲状态的分钟数<br />
8、&lt;trace&gt; <br />
作用：配置 ASP.NET 跟踪服务，主要用来程序测试判断哪里出错。<br />
示例：以下为Web.config中的默认配置：<br />
<div class="cnblogs_code" style="width: 715px; height: 30px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">trace&nbsp;</span><span style="color: #ff0000">enabled</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;requestLimit</span><span style="color: #0000ff">="10"</span><span style="color: #ff0000">&nbsp;pageOutput</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;traceMode</span><span style="color: #0000ff">="SortByTime"</span><span style="color: #ff0000">&nbsp;localOnly</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span></div>
<dt>注： <br />
enabled="false"表示不启用跟踪；<br />
requestLimit="10"表示指定在服务器上存储的跟踪请求的数目<br />
pageOutput="false"表示只能通过跟踪实用工具访问跟踪输出；<br />
traceMode="SortByTime"表示以处理跟踪的顺序来显示跟踪信息<br />
localOnly="true" 表示跟踪查看器 (trace.axd) 只用于宿主 Web 服务器<br />
<br />
<strong>自定义Web.config文件配置</strong> <br />
自定义Web.config文件配置节过程分为两步。 <br />
1.在在配置文件顶部 &lt;configSections&gt; 和 &lt;/configSections&gt;标记之间声明配置节的名称和处理该节中配置数据的 .NET Framework 类的名称。<br />
2.是在 &lt;configSections&gt; 区域之后为声明的节做实际的配置设置。<br />
示例：创建一个节存储数据库连接字符串<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
　&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">configSections</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
　&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">section&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="appSettings"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="System.Configuration.NameValueFileSectionHandler,&nbsp;System,&nbsp;Version=1.0.3300.0,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=b77a5c561934e089"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&nbsp;&nbsp;&nbsp; &lt;/</span><span style="color: #800000">configSections</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
　&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">appSettings</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
　&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">add&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="scon"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="server=a;database=northwind;uid=sa;pwd=123"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
　&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">appSettings</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
　&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
　　&nbsp;<img alt="" src="http://www.cnblogs.com/Images/dot.gif" /><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /><br />
　&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">configuration</span><span style="color: #0000ff">&gt;</span></div>
访问Web.config文件 你可以通过使用ConfigurationSettings.AppSettings 静态字符串集合来访问 Web.config 文件示例：获取上面例子中建立的连接字符串。
<dt>例如：protected static string Isdebug = ConfigurationSettings.AppSettings["debug"]<br />
<br />
<strong>二、web.config中的session配置详解<br />
</strong>打开某个应用程序的配置文件Web.config后，我们会发现以下这段：<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">&nbsp;sessionState<br />
　　</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="InProc"</span><span style="color: #ff0000"><br />
　　stateConnectionString</span><span style="color: #0000ff">="tcpip=127.0.0.1:42424"</span><span style="color: #ff0000"><br />
　　sqlConnectionString</span><span style="color: #0000ff">="data&nbsp;source=127.0.0.1;Trusted_Connection=yes"</span><span style="color: #ff0000"><br />
　　cookieless</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
　　timeout</span><span style="color: #0000ff">="20"</span><span style="color: #ff0000">&nbsp;<br />
</span><span style="color: #0000ff">/&gt;</span></div>
<dt>　　这一段就是配置应用程序是如何存储Session信息的了。我们以下的各种操作主要是针对这一段配置展开。让我们先看看这一段配置中所包含的内容的意思。sessionState节点的语法是这样的：<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">&nbsp;sessionState&nbsp;</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="Off|InProc|StateServer|SQLServer"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cookieless</span><span style="color: #0000ff">="true|false"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeout</span><span style="color: #0000ff">="number&nbsp;of&nbsp;minutes"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stateConnectionString</span><span style="color: #0000ff">="tcpip=server:port"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sqlConnectionString</span><span style="color: #0000ff">="sql&nbsp;connection&nbsp;string"</span><span style="color: #ff0000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stateNetworkTimeout</span><span style="color: #0000ff">="number&nbsp;of&nbsp;seconds"</span><span style="color: #ff0000"><br />
</span><span style="color: #0000ff">/&gt;</span></div>
必须有的属性是 属性 选项 描述<br />
mode 设置将Session信息存储到哪里 <br />
&#216;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Off 设置为不使用Session功能，<br />
&#216;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InProc 设置为将Session存储在进程内，就是ASP中的存储方式，这是默认值，<br />
&#216;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StateServer 设置为将Session存储在独立的状态服务中，<br />
&#216;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SQLServer 设置将Session存储在SQL Server中。 <br />
可选的属性是： 属性 选项 描述 <br />
&#216;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cookieless 设置客户端的Session信息存储到哪里，<br />
&#216;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ture 使用Cookieless模式，<br />
&#216;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; false 使用Cookie模式，这是默认值，<br />
&#216;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; timeout 设置经过多少分钟后服务器自动放弃Session信息，默认为20分钟。<br />
stateConnectionString 设置将Session信息存储在状态服务中时使用的服务器名称和端口号，例如："tcpip=127.0.0.1:42424&#8221;。当mode的值是StateServer是，这个属性是必需的。 <br />
sqlConnectionString 设置与SQL Server连接时的连接字符串。例如"data source= localhost;Integrated Security=SSPI;Initial Catalog=northwind"。当mode的值是 SQLServer时，这个属性是必需的。 <br />
stateNetworkTimeout 设置当使用StateServer模式存储Session状态时，经过多少秒空闲后，断开Web服务器与存储状态信息的服务器的TCP/IP连接的。默认值是10秒钟。 <br />
<dt>ASP.NET中客户端Session状态的存储 <br />
　　在我们上面的Session模型简介中，大家可以发现Session状态应该存储在两个地方，分别是客户端和服务器端。客户端只负责保存相应网站的SessionID，而其他的Session信息则保存在服务器端。在ASP中，客户端的SessionID实际是以Cookie的形式存储的。如果用户在浏览器的设置中选择了禁用Cookie，那末他也就无法享受Session的便利之处了，甚至造成不能访问某些网站。为了解决以上问题，在 ASP.NET中客户端的Session信息存储方式分为：Cookie和Cookieless两种。<br />
　　ASP.NET中，默认状态下，在客户端还是使用Cookie存储Session信息的。如果我们想在客户端使用Cookieless的方式存储Session信息的方法如下：<br />
　　找到当前Web应用程序的根目录，打开Web.Config文件，找到如下段落：<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">&nbsp;sessionState<br />
　　</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="InProc"</span><span style="color: #ff0000"><br />
　　stateConnectionString</span><span style="color: #0000ff">="tcpip=127.0.0.1:42424"</span><span style="color: #ff0000"><br />
　　sqlConnectionString</span><span style="color: #0000ff">="data&nbsp;source=127.0.0.1;Trusted_Connection=yes"</span><span style="color: #ff0000"><br />
　　cookieless</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
　　timeout</span><span style="color: #0000ff">="20"</span><span style="color: #ff0000">&nbsp;<br />
</span><span style="color: #0000ff">/&gt;</span></div>
　　这段话中的cookieless="false"改为：cookieless="true"，这样，客户端的Session信息就不再使用 Cookie存储了，而是将其通过URL存储。关闭当前的IE，打开一个新IE，重新访问刚才的Web应用程序，就会看到类似下面的样子：<br />
其中，<a href="http://localhost/MyTestApplication/" target="_blank" rel="external">http://localhost/MyTestApplication/</a>(ulqsek45heu3ic2a5zgdl245) /default.aspx中黑体标出的就是客户端的Session ID。注意，这段信息是由IIS自动加上的，不会影响以前正常的连接。<br />
<dt>ASP.NET中服务器端Session状态的存储 准备工作：<br />
　　为了您能更好的体验到实验现象，您可以建立一个叫做SessionState.aspx的页面，然后把以下这些代码添加到&lt; body&gt;&lt; /body&gt;中。<br />
&lt;scriptrunat="server"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sub Session_Add(sender As Object, e As EventArgs)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session("MySession") = text1.Value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;span1.InnerHtml = "Session data updated! &lt; P&gt;Your session contains: &lt; font color=red&gt;" &amp; Session("MySession"). ToString() &amp; "&lt; /font&gt;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End Sub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Sub CheckSession(sender As Object, eAs EventArgs)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If (Session("MySession")Is Nothing) Then<br />
　　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;span1.InnerHtml = "NOTHING, SESSION DATA LOST!"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Else<br />
　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;　 span1.InnerHtml = "Your session contains: &lt; font color= red&gt;" &amp; Session("MySession").ToString() &amp; "&lt;&nbsp;&nbsp; /font&gt;"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End If<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;End Sub<br />
&lt; /script&gt;<br />
&lt; formrunat="server"id="Form2"&gt;<br />
　 &lt; inputid="text1"type="text"runat="server"name="text1"&gt;<br />
　 &lt; inputtype="submit"runat="server"OnServerClick="Session_Add"<br />
　　　　　 value="Add to Session State " id="Submit1"name="Submit1"&gt;<br />
　 &lt; inputtype="submit"runat="server"OnServerClick="CheckSession"<br />
　　　　　 value=" View Session State " id="Submit2"name="Submit2"&gt;<br />
&lt; /form&gt;<br />
&lt; hrsize="1"&gt;<br />
&lt; fontsize="6"&gt;&lt; spanid="span1"runat="server" /&gt;&lt; /font&gt; <br />
　　这个SessionState.aspx的页面可以用来测试在当前的服务器上是否丢失了Session信息。<br />
<dt>将服务器Session信息存储在进程中 <br />
　　让我们来回到Web.config文件的刚才那段段落中：<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">&nbsp;sessionState<br />
　　</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="InProc"</span><span style="color: #ff0000"><br />
　　stateConnectionString</span><span style="color: #0000ff">="tcpip=127.0.0.1:42424"</span><span style="color: #ff0000"><br />
　　sqlConnectionString</span><span style="color: #0000ff">="data&nbsp;source=127.0.0.1;Trusted_Connection=yes"</span><span style="color: #ff0000"><br />
　　cookieless</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000"><br />
　　timeout</span><span style="color: #0000ff">="20"</span><span style="color: #ff0000">&nbsp;<br />
</span><span style="color: #0000ff">/&gt;</span></div>
　　当mode的值是InProc时，说明服务器正在使用这种模式。<br />
　　这种方式和以前ASP中的模式一样，就是服务器将Session信息存储在IIS进程中。当IIS关闭、重起后，这些信息都会丢失。但是这种模式也有自己最大好处，就是性能最高。应为所有的Session信息都存储在了IIS的进程中，所以IIS能够很快的访问到这些信息，这种模式的性能比进程外存储Session信息或是在SQL Server中存储Session信息都要快上很多。这种模式也是ASP.NET的默认方式。<br />
　　好了，现在让我们做个试验。打开刚才的SessionState.aspx页面，随便输入一些字符，使其存储在Session中。然后，让我们让IIS重起。注意，并不是使当前的站点停止再开始，而是在IIS中本机的机器名的节点上点击鼠标右键，选择重新启动IIS。(想当初使用NT4时，重新启动IIS必须要重新启动计算机才行，微软真是@#$%^&amp;)返回到SessionState.aspx页面中，检查刚才的Session信息，发现信息已经丢失了。<br />
<dt>将服务器Session信息存储在进程外 <br />
　　首先，让我们来打开管理工具-&gt;服务，找到名为：ASP.NET State Service的服务，启动它。实际上，这个服务就是启动一个要保存Session信息的进程。启动这个服务后，你可以从Windows任务管理器-&gt;进程中看到一个名为 aspnet_state.exe的进程，这个就是我们保存Session信息的进程。<br />
　　然后，回到Web.config文件中上述的段落中，将mode的值改为StateServer。保存文件后的重新打开一个IE，打开 SessionState.aspx页面，保存一些信息到Session中。这时，让我们重起IIS，再回到SessionState.aspx页面中查看刚才的Session信息，发现没有丢失。<br />
　　实际上，这种将Session信息存储在进程外的方式不光指可以将信息存储在本机的进程外，还可以将Session信息存储在其他的服务器的进程中。这时，不光需要将mode的值改为StateServer，还需要在stateConnectionString中配置相应的参数。例如你的计算你是192.168.0.1，你想把Session存储在IP为192.168.0.2的计算机的进程中，就需要设置成这样： stateConnectionString="tcpip=192.168.0.2:42424"。当然，不要忘记在192.168.0.2的计算机中装上.NET Framework，并且启动ASP.NET State Services服务。<br />
<dt>将服务器Session信息存储在SQL Server中 <br />
　　首先，还是让我们来做一些准备工作。启动SQL Server和SQL Server代理服务。在SQL Server中执行一个叫做 InstallSqlState.sql的脚本文件。这个脚本文件将在SQL Server中创建一个用来专门存储Session信息的数据库，及一个维护Session信息数据库的SQL Server代理作业。我们可以在以下路径中找到那个文件：<br />
[system drive]\winnt\Microsoft.NET\Framework\[version]\ <br />
　　然后打开查询分析器，连接到SQL Server服务器，打开刚才的那个文件并且执行。稍等片刻，数据库及作业就建立好了。这时，你可以打开企业管理器，看到新增了一个叫ASPState的数据库。但是这个数据库中只是些存储过程，没有用户表。实际上Session信息是存储在了tempdb 数据库的ASPStateTempSessions表中的，另外一个ASPStateTempApplications表存储了ASP中 Application对象信息。这两个表也是刚才的那个脚本建立的。另外查看管理-&gt;SQL Server代理-&gt;作业，发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业，这个作业实际上就是每分钟去ASPStateTempSessions 表中删除过期的Session信息的。<br />
　　接着，我们返回到Web.config文件，修改mode的值改为SQLServer。注意，还要同时修改sqlConnectionString的值，格式为：<br />
sqlConnectionString="data source=localhost; Integrated Security=SSPI;"<br />
　　其中data source是指SQL Server服务器的IP地址，如果SQL Server与IIS是一台机子，写127.0.0.1 就行了。Integrated Security=SSPI的意思是使用Windows集成身份验证，这样，访问数据库将以ASP.NET的身份进行，通过如此配置，能够获得比使用userid=sa;password=口令的SQL Server验证方式更好的安全性。当然，如果SQL Server运行于另一台计算机上，你可能会需要通过Active Directory域的方式来维护两边验证的一致性。<br />
　　同样，让我们做个试验。向SessionState.aspx中添加Session信息，这时发现Session信息已经存在 SQL Server中了，即使你重起计算机，刚才的Session信息也不会丢失。现在，你已经完全看见了Session信息到底是什么样子的了，而且又是存储在SQL Server中的，能干什么就看你的发挥了。<br />
<br />
总结&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;通过这篇文章，你可以看到在Session的管理和维护上，ASP.NET比ASP有了很大的进步，我们可以更加随意的挑选适合的方法了。对于企业级的应用来说，这无疑对于服务器的同步、服务器的稳定性、可靠性都是有利的。相信在强大的微软支持下，新一代的电子商务平台将会搭建的更好！<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;同时，大家也会发现，在这个整个技术中包括了操作系统、Web服务及数据库多种技术的整合。我相信，也许Windows没有Unix稳定， IIS没有Apache稳定，SQL Server也没有Oracle强大，但是，谁可以将他们如此完美的联动到一起呢？所以说，虽然微软每一方面都不是太强，但是如果把微软的东西都整合到一起，谁敢说他不强大呢？微软就是微软！<br />
<dt><strong>三、Asp.net 关于form认证的一般设置</strong><br />
asp.net 关于form认证的一般设置：<br />
1: 在web.config中，加入form认证； <br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">authentication&nbsp;</span><span style="color: #ff0000">mode</span><span style="color: #0000ff">="Forms"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forms&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="auth"</span><span style="color: #ff0000">&nbsp;loginUrl</span><span style="color: #0000ff">="index.aspx"</span><span style="color: #ff0000">&nbsp;timeout</span><span style="color: #0000ff">="30"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">forms</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">authentication</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">authorization</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">deny&nbsp;</span><span style="color: #ff0000">users</span><span style="color: #0000ff">="?"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">authorization</span><span style="color: #0000ff">&gt;</span></div>
2: 如果有注册页面时还应该允许匿名用户调用注册页面进行注册;<br />
以下代码应该在&lt;configuration&gt;&lt;system.web&gt;之间,而不应该包含到&lt;system.web&gt;..&lt;/system.web&gt;之间;<br />
----------------表示允许 匿名用户对 userReg.aspx页面进行访问.<br />
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;</span><span style="color: #800000">location&nbsp;</span><span style="color: #ff0000">path</span><span style="color: #0000ff">="userReg.aspx"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">system</span><span style="color: #ff0000">.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">authorization</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">allow&nbsp;</span><span style="color: #ff0000">users</span><span style="color: #0000ff">="?"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">authorization</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">system.web</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">location</span><span style="color: #0000ff">&gt;</span></div>
3 在登录成功后要创建身份验证票, 表明已经通过认证的合法用户;<br />
if(登陆成功)<br />
System.Web.Security.FormsAuthentication.SetAuthCookie(用户名称, false);<br />
<dt><strong>四、访问Web.config文件</strong><br />
　　你可以通过使用ConfigurationSettings.AppSettings 静态字符串集合来访问 Web.config 文件示例：获取上面例子中建立的连接字符串。例如：<br />
protected static string Isdebug = ConfigurationSettings.AppSettings["scon"]
<dt>&nbsp;</dt></dl>
<img src ="http://www.cnblogs.com/MaoBisheng/aggbug/1407583.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/48000/" target="_blank">数万名网友签名抗议星际争霸2取消局域网功能</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>一道sql试题——据说是盛大的</title><link>http://www.cnblogs.com/MaoBisheng/archive/2009/02/25/1397664.html</link><dc:creator>毛必盛</dc:creator><author>毛必盛</author><pubDate>Wed, 25 Feb 2009 01:21:00 GMT</pubDate><guid>http://www.cnblogs.com/MaoBisheng/archive/2009/02/25/1397664.html</guid><wfw:comment>http://www.cnblogs.com/MaoBisheng/comments/1397664.html</wfw:comment><comments>http://www.cnblogs.com/MaoBisheng/archive/2009/02/25/1397664.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/MaoBisheng/comments/commentRss/1397664.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/MaoBisheng/services/trackbacks/1397664.html</trackback:ping><description><![CDATA[<dl>
<dt>表结构：id&nbsp;&nbsp; name&nbsp;&nbsp; subject&nbsp;&nbsp; score&nbsp;&nbsp; createdate </dt>
<dt>建表语句：</dt>
<dt>
<div class="cnblogs_code"><img id="Code_Closed_Image_091439" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_091439').style.display='none'; document.getElementById('Code_Open_Image_091439').style.display='inline'; document.getElementById('Code_Open_Text_091439').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_091439" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_091439').style.display='none'; getElementById('Code_Closed_Image_091439').style.display='inline'; getElementById('Code_Closed_Text_091439').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_091439">Code</span><span id="Code_Open_Text_091439" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;ANSI_NULLS&nbsp;</span><span style="color: #0000ff">ON</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">GO</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;QUOTED_IDENTIFIER&nbsp;</span><span style="color: #0000ff">ON</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">GO</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">dbo</span><span style="color: #ff0000">]</span><span style="color: #000000">.</span><span style="color: #ff0000">[</span><span style="color: #ff0000">Score</span><span style="color: #ff0000">]</span><span style="color: #000000">(<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">id</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">bigint</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">IDENTITY</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">,</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">NOT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">,<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">name</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">nvarchar</span><span style="color: #ff0000">]</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">50</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">CONSTRAINT</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">DF_Score_name</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">DEFAULT</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">''</span><span style="color: #000000">),<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">subject</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">nvarchar</span><span style="color: #ff0000">]</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">50</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">CONSTRAINT</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">DF_Score_subject</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">DEFAULT</span><span style="color: #000000">&nbsp;(</span><span style="color: #ff0000">''</span><span style="color: #000000">),<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">score</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">float</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">NOT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">CONSTRAINT</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">DF_Score_score</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">DEFAULT</span><span style="color: #000000">&nbsp;((</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000">)),<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">createdate</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">datetime</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">NOT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000"><br />
)&nbsp;</span><span style="color: #0000ff">ON</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">PRIMARY</span><span style="color: #ff0000">]</span><span style="color: #000000"><br />
</span></span></div>
</dt>
<dt>向表预赛几条数据：
<div class="cnblogs_code"><img id="Code_Closed_Image_091607" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_091607').style.display='none'; document.getElementById('Code_Open_Image_091607').style.display='inline'; document.getElementById('Code_Open_Text_091607').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top"><img id="Code_Open_Image_091607" style="display: none" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_091607').style.display='none'; getElementById('Code_Closed_Image_091607').style.display='inline'; getElementById('Code_Closed_Text_091607').style.display='inline';" height="16" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top"><span class="cnblogs_code_Collapse" id="Code_Closed_Text_091607">Code</span><span id="Code_Open_Text_091607" style="display: none"><br />
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">insert</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">into</span><span style="color: #000000">&nbsp;Score<br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Ivan.Mao</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">English</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">40</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/25/2009&nbsp;8:13:42.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">name8</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">English</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">80</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/25/2009&nbsp;8:13:42.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">3</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Ivan.Mao</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Math</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">80</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/22/2009&nbsp;8:13:42.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">4</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Ivan.Mao</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">YuWen</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">58</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/22/2009&nbsp;12:00:00.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">5</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">name8</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Math</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">80</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/21/2009&nbsp;11:59:59.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">7</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Ivan.Mao</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">DiLi</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">33</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/21/2009&nbsp;11:59:59.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">8</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">name1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">subject1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">80</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/21/2009&nbsp;11:59:59.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">9</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">name2</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">subject1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">80</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/21/2009&nbsp;11:59:59.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">10</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">name3</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">subject1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">80</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/21/2009&nbsp;11:59:59.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">11</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">name4</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">subject1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">90</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/21/2009&nbsp;11:59:59.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">12</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">name5</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">subject1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">100</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/21/2009&nbsp;11:59:59.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">13</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">name6</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">subject1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">50</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/21/2009&nbsp;11:59:59.000</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">union</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">14</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">name7</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">subject1</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">95</span><span style="color: #ff0000">'</span><span style="color: #000000">,</span><span style="color: #ff0000">'</span><span style="color: #ff0000">2/21/2009&nbsp;11:59:59.000</span><span style="color: #ff0000">'</span></span></div>
</dt>
<dt>&nbsp;</dt>
<dt>1. 创建时间为3天前0点创建的纪录，20分钟前创建的纪录? </dt>
<dt>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Score<br />
</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">DATEDIFF</span><span style="color: #000000">(d,createdate,</span><span style="color: #ff00ff">GETDATE</span><span style="color: #000000">())</span><span style="color: #808080">&gt;</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Score<br />
</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">DATEDIFF</span><span style="color: #000000">(n,createdate,</span><span style="color: #ff00ff">GETDATE</span><span style="color: #000000">())</span><span style="color: #808080">&gt;</span><span style="font-weight: bold; color: #800000">20</span></div>
</dt>
<dt>&nbsp;</dt>
<dt>2. 3门以上不及格学生的学生姓名? </dt>
<dt>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">name</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Score<br />
</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;score</span><span style="color: #808080">&lt;</span><span style="font-weight: bold; color: #800000">60</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">group</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">name</span><span style="color: #ff0000">]</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">having</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">COUNT</span><span style="color: #000000">(</span><span style="color: #808080">*</span><span style="color: #000000">)</span><span style="color: #808080">&gt;=</span><span style="font-weight: bold; color: #800000">3</span></div>
</dt>
<dt>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; id&nbsp;&nbsp; name <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; a <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; b <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; a <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp; a&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id为identity,只留一条a与一条b </dt>
<dt>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">--</span><span style="color: #008080">select&nbsp;*&nbsp;into&nbsp;Score_Test3&nbsp;from&nbsp;Score</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Score<br />
<br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Score_Test3<br />
<br />
</span><span style="color: #0000ff">delete</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Score_Test3<br />
</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;id&nbsp;</span><span style="color: #808080">not</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000"><br />
(<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">max</span><span style="color: #000000">(id)&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Score_Test3&nbsp;</span><span style="color: #0000ff">group</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">name</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;<br />
)</span></div>
</dt>
<dt>&nbsp;</dt>
<dt>4. 总分排名5-7的学生姓名(name,score),最好写成存储过程,请注意并列排名的问题 </dt>
<dt>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">--</span><span style="color: #008080">select&nbsp;*&nbsp;into&nbsp;Score_Test4&nbsp;from&nbsp;Score</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Score<br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Score_Test4<br />
<br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">top</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">3</span><span style="color: #000000">&nbsp;t2.</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;<br />
(</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">top</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">7</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">name</span><span style="color: #ff0000">]</span><span style="color: #000000">,</span><span style="color: #ff00ff">sum</span><span style="color: #000000">(score)&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;totalScore&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;Score_Test4&nbsp;</span><span style="color: #0000ff">group</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">name</span><span style="color: #ff0000">]</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">sum</span><span style="color: #000000">(score))&nbsp;t2&nbsp;<br />
</span><span style="color: #0000ff">order</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;t2.totalScore</span></div>
</dt>
<dt>&nbsp;</dt>
<dt>没有考虑并列排名问题，还待斟酌。。。</dt></dl>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/MaoBisheng/aggbug/1397664.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47999/" target="_blank">Silverlight打造杰克逊纪念专题</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>.Net中的打印A4纸如何实现（以C#为例）——VB中的Printer.Print在.Net中如何实现</title><link>http://www.cnblogs.com/MaoBisheng/archive/2008/12/30/1365001.html</link><dc:creator>毛必盛</dc:creator><author>毛必盛</author><pubDate>Tue, 30 Dec 2008 02:30:00 GMT</pubDate><guid>http://www.cnblogs.com/MaoBisheng/archive/2008/12/30/1365001.html</guid><wfw:comment>http://www.cnblogs.com/MaoBisheng/comments/1365001.html</wfw:comment><comments>http://www.cnblogs.com/MaoBisheng/archive/2008/12/30/1365001.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/MaoBisheng/comments/commentRss/1365001.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/MaoBisheng/services/trackbacks/1365001.html</trackback:ping><description><![CDATA[摘要: .Net中的打印A4纸如何实现（以C#为例）——VB中的Printer.Print在.Net中如何实现在VB中，如果要打印打印A4文档，且内容是从DB中，或者DataGrid中等动态获取的，实现起来非常简单，诸如以下代码（rs表示一记录集）：Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.Code&nbsp;&nbsp;<a href='http://www.cnblogs.com/MaoBisheng/archive/2008/12/30/1365001.html'>阅读全文</a><img src ="http://www.cnblogs.com/MaoBisheng/aggbug/1365001.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47998/" target="_blank">传诺基亚正在开发Android手机</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>一个简单的源代码行数统计程序</title><link>http://www.cnblogs.com/MaoBisheng/archive/2008/11/22/1339070.html</link><dc:creator>毛必盛</dc:creator><author>毛必盛</author><pubDate>Sat, 22 Nov 2008 10:52:00 GMT</pubDate><guid>http://www.cnblogs.com/MaoBisheng/archive/2008/11/22/1339070.html</guid><wfw:comment>http://www.cnblogs.com/MaoBisheng/comments/1339070.html</wfw:comment><comments>http://www.cnblogs.com/MaoBisheng/archive/2008/11/22/1339070.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cnblogs.com/MaoBisheng/comments/commentRss/1339070.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/MaoBisheng/services/trackbacks/1339070.html</trackback:ping><description><![CDATA[<p><a title="SourceCode" href="http://www.cnblogs.com/Files/MaoBisheng/CodeLineCounter/CodeLineCounter.rar"></a></p>
<p><a title="SourceCode" href="http://www.cnblogs.com/Files/MaoBisheng/CodeLineCounter/CodeLineCounter.rar"></a></p>
<p><a title="SourceCode" href="http://www.cnblogs.com/Files/MaoBisheng/CodeLineCounter/CodeLineCounter.rar">Click here to download SourceCode</a><br />
</p>
<p>一个简单的源代码行数统计器：</p>
<p>&nbsp;&nbsp;&nbsp; 选择项目所在的文件夹——选择文件类型——排除掉一些不希望统计的文件（比如VS自动生成的代码）——计算行数。。。</p>
<p>&nbsp;&nbsp;&nbsp; 有效代码行数=总的行数 - 空格行 - 注释行<br />
</p>
<p> <img alt="" src="http://www.cnblogs.com/images/cnblogs_com/maobisheng/CodeLineCounter/CodeLineCounter_01.jpg" /><br />
</p>
<p><img alt="" src="http://www.cnblogs.com/images/cnblogs_com/maobisheng/CodeLineCounter/CodeLineCounter_02.jpg" />&nbsp;</p><img src ="http://www.cnblogs.com/MaoBisheng/aggbug/1339070.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47996/" target="_blank">7月编程语言排行榜</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>C# 登录SAP命令以及dotNet调用SAP RFC</title><link>http://www.cnblogs.com/MaoBisheng/archive/2008/10/27/1320489.html</link><dc:creator>毛必盛</dc:creator><author>毛必盛</author><pubDate>Mon, 27 Oct 2008 07:18:00 GMT</pubDate><guid>http://www.cnblogs.com/MaoBisheng/archive/2008/10/27/1320489.html</guid><wfw:comment>http://www.cnblogs.com/MaoBisheng/comments/1320489.html</wfw:comment><comments>http://www.cnblogs.com/MaoBisheng/archive/2008/10/27/1320489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/MaoBisheng/comments/commentRss/1320489.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/MaoBisheng/services/trackbacks/1320489.html</trackback:ping><description><![CDATA[<p>C# 登录SAP命令---已安装SAP GUI 640 WIN32</p>
<p>添加引用：SAPLogonCtrl</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">SAPLogonCtrl.SAPLogonControlClass&nbsp;sapLogon&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SAPLogonCtrl.SAPLogonControlClass();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />sapLogon.User&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strUser;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Specify&nbsp;user</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">sapLogon.Password&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strPassword;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">Then&nbsp;password</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">sapLogon.Client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strClient;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">Client</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">sapLogon.ApplicationServer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strApplicationServer;&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">Target&nbsp;server&nbsp;address</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">sapLogon.Language&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strLanguage;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Language&nbsp;code</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">sapLogon.SystemNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;iSystemNumber;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">SystemNumber</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />SAPLogonCtrl.Connection&nbsp;sapConn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(SAPLogonCtrl.Connection)sapLogon.NewConnection();<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(</span><span style="color: #000000">!</span><span style="color: #000000">sapConn.Logon(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">))<br />
<img id="Codehighlighter1_609_714_Open_Image" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_609_714_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_609_714_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_609_714_Closed_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_609_714_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_609_714_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_609_714_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_609_714_Open_Text').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_609_714_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.cnblogs.com/Images/dot.gif" /></span><span id="Codehighlighter1_609_714_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;Msg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">Cannot&nbsp;Log&nbsp;on&nbsp;to&nbsp;SAP</span><span style="color: #800000">"</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">Issue&nbsp;message&nbsp;if&nbsp;cannot&nbsp;logon</span><span style="color: #008000"><br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img alt="" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>
<p>&nbsp;</p>
<p>登录进去了，但是不知如何调用（不用SAP.Connector 2.0），网上也找不到相关信息，只能到此为止。。。</p>
<p>C#&nbsp;不行，那只能用VB.Net写类似Function了，打包成dll，在C#中调用。</p>
<p>以下是VB.Net调用C#例子：</p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Class</span><span style="color: #000000">&nbsp;QMSToSAP<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;strPostNO&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;strErrorMsg&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;strUser&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;strPassword&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;strClient&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;strApplicationServer&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;strLanguage&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Private</span><span style="color: #000000">&nbsp;iSystemNumber&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Sub</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">New</span><span style="color: #000000">(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;user&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;password&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;client&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;_<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;applicationServer&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;language&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">String</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;systemNumber&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Integer</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strUser&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;user<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strPassword&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;password<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strClient&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;client<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strApplicationServer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;applicationServer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strLanguage&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;language<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iSystemNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;systemNumber<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Sub</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Function</span><span style="color: #000000">&nbsp;QMStoSAP(</span><span style="color: #0000ff">ByVal</span><span style="color: #000000">&nbsp;dt&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;DataTable)&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Boolean</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QMStoSAP&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;sapConn&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'Declare&nbsp;variant</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sapConn&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">CreateObject</span><span style="color: #000000">(</span><span style="color: #800000">"</span><span style="color: #800000">SAP.Functions</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'Create&nbsp;ActiveX&nbsp;object</span><span style="color: #008000"><br />
</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'Specify&nbsp;user</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sapConn.Connection.user&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strUser<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'Then&nbsp;password</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sapConn.Connection.Password&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strPassword<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'Client</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sapConn.Connection.Client&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strClient<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'Target&nbsp;server&nbsp;address</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sapConn.Connection.ApplicationServer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strApplicationServer<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'Language&nbsp;code</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sapConn.Connection.Language&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;strLanguage<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'SystemNumber</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sapConn.Connection.SystemNumber&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;iSystemNumber<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;sapConn.Connection.Logon(</span><span style="color: #800080">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">&lt;&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QMStoSAP&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">MsgBox</span><span style="color: #000000">(</span><span style="color: #800000">"</span><span style="color: #800000">Cannot&nbsp;Log&nbsp;on&nbsp;to&nbsp;SAP</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'Issue&nbsp;message&nbsp;if&nbsp;cannot&nbsp;logon</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Exit&nbsp;Function</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">Define&nbsp;function</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;objRfcFunc&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objRfcFunc&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;sapConn.Add(</span><span style="color: #800000">"</span><span style="color: #800000">ZRFC_WO_AUTO_GR</span><span style="color: #800000">"</span><span style="color: #000000">)<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Dim</span><span style="color: #000000">&nbsp;objVBPA&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Object</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;objRfcFunc.Tables(</span><span style="color: #800000">"</span><span style="color: #800000">ITABIN</span><span style="color: #800000">"</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strErrorMsg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strPostNO&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">set&nbsp;value&nbsp;for&nbsp;shipemnt</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">For</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Each</span><span style="color: #000000">&nbsp;dr&nbsp;</span><span style="color: #0000ff">As</span><span style="color: #000000">&nbsp;DataRow&nbsp;</span><span style="color: #0000ff">In</span><span style="color: #000000">&nbsp;dt.Rows<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA.Rows.Add()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA(objVBPA.RowCount,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">ZPALLETID</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(dr(</span><span style="color: #800000">"</span><span style="color: #800000">ZPALLETID</span><span style="color: #800000">"</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA(objVBPA.RowCount,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">PLANT</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(dr(</span><span style="color: #800000">"</span><span style="color: #800000">PLANT</span><span style="color: #800000">"</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA(objVBPA.RowCount,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">COSTCENTER</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(dr(</span><span style="color: #800000">"</span><span style="color: #800000">COSTCENTER</span><span style="color: #800000">"</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA(objVBPA.RowCount,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">WO</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(dr(</span><span style="color: #800000">"</span><span style="color: #800000">WO</span><span style="color: #800000">"</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA(objVBPA.RowCount,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">QTY</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(dr(</span><span style="color: #800000">"</span><span style="color: #800000">QTY</span><span style="color: #800000">"</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA(objVBPA.RowCount,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">MATERIAL</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(dr(</span><span style="color: #800000">"</span><span style="color: #800000">MATERIAL</span><span style="color: #800000">"</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA(objVBPA.RowCount,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">REGION</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(dr(</span><span style="color: #800000">"</span><span style="color: #800000">REGION</span><span style="color: #800000">"</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA(objVBPA.RowCount,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">LOCA</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(dr(</span><span style="color: #800000">"</span><span style="color: #800000">LOCA</span><span style="color: #800000">"</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA(objVBPA.RowCount,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">REF1</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(dr(</span><span style="color: #800000">"</span><span style="color: #800000">REF1</span><span style="color: #800000">"</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;objVBPA(objVBPA.RowCount,&nbsp;</span><span style="color: #800000">"</span><span style="color: #800000">REF2</span><span style="color: #800000">"</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(dr(</span><span style="color: #800000">"</span><span style="color: #800000">REF2</span><span style="color: #800000">"</span><span style="color: #000000">))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Next</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;objRfcFunc.Call&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sapConn.Connection.Logoff()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QMStoSAP&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">MsgBox</span><span style="color: #000000">(</span><span style="color: #800000">"</span><span style="color: #800000">Error&nbsp;occured&nbsp;-&nbsp;</span><span style="color: #800000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;objRfcFunc.Exception)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Exit&nbsp;Function</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'VB6.0&nbsp;中的写法：strPostNO&nbsp;=&nbsp;objRfcFunc.Imports("POSTNO")</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">'</span><span style="color: #008000">'在.Net中是不行的,&nbsp;因.Net是强类型语言</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strPostNO&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;objRfcFunc.Imports(</span><span style="color: #800000">"</span><span style="color: #800000">POSTNO</span><span style="color: #800000">"</span><span style="color: #000000">).Value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strErrorMsg&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;objRfcFunc.Imports(</span><span style="color: #800000">"</span><span style="color: #800000">ERRORMSG</span><span style="color: #800000">"</span><span style="color: #000000">).Value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sapConn.Connection.Logoff()<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Trim</span><span style="color: #000000">(strPostNO)&nbsp;</span><span style="color: #000000">&lt;&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #800000">""</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Then</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QMStoSAP&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">True</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">Else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;QMStoSAP&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">False</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">If</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">End&nbsp;Function</span><span style="color: #000000"><br />
<br />
</span><span style="color: #0000ff">End&nbsp;Class</span></div>
<p>&nbsp;</p>
<p>成功调用！！！</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
 <img src ="http://www.cnblogs.com/MaoBisheng/aggbug/1320489.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47995/" target="_blank">Google Voice 上手</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item><item><title>设计模式笔记 24. 设计模式总结</title><link>http://www.cnblogs.com/MaoBisheng/archive/2008/09/30/1302561.html</link><dc:creator>毛必盛</dc:creator><author>毛必盛</author><pubDate>Tue, 30 Sep 2008 10:35:00 GMT</pubDate><guid>http://www.cnblogs.com/MaoBisheng/archive/2008/09/30/1302561.html</guid><wfw:comment>http://www.cnblogs.com/MaoBisheng/comments/1302561.html</wfw:comment><comments>http://www.cnblogs.com/MaoBisheng/archive/2008/09/30/1302561.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/MaoBisheng/comments/commentRss/1302561.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/MaoBisheng/services/trackbacks/1302561.html</trackback:ping><description><![CDATA[<dl>
<dt>&nbsp;
<dt>
<div align="center"><strong><span style="font-size: 18pt; color: red; font-family: 宋体">设计模式总结</span></strong></div>
<dt>
<div style="text-indent: 21pt">7<span style="font-family: 宋体">月初的一个周末，准确的说应该是</span>7<span style="font-family: 宋体">月</span>1<span style="font-family: 宋体">号周六，在网上看到一本《大话设计模式》的书，而且看到很多很好的评论，于是乎，下载了电子书看看，一下子看了几章之后，对设计模式有了个了解，于是继续上网搜些其他资料，进一步了解设计模式。。。最终结论：设计模式是个好东西，具体怎么好，一两句话是无法概括的，也是从那天起，我就决定学习设计模式，于是就看《大话设计模式》，至七月十多号，大概看了一百多页后，感觉有点难，有点看不下去的感觉，于是上网找其他的好方法，无意间发现了李建忠老师的《</span>C#<span style="font-family: 宋体">设计模式纵横谈》系列讲座，微软的</span>Web Cast<span style="font-family: 宋体">课程，主要讲解</span>GOF<span style="font-family: 宋体">的</span>23<span style="font-family: 宋体">个设计模式，每个一讲，加上一头一尾，共</span>25<span style="font-family: 宋体">讲，试听了一节课后，感觉很有用，于是就抽时间去边听课边看书，并在我的博客里写下笔记，依赖加深印象，二来可以督促我的进度。。。</span></div>
<dt>
<div style="text-indent: 21pt"><span style="font-family: 宋体">三个月以来，总算把设计模式学完一遍了，原计划是两个月学完（一星期三个模式），由于。。。计划两个月学完实际花了三个月，感触多多，收获多多——对</span>C#<span style="font-family: 宋体">语言有了更进一步的认识，对</span>OO<span style="font-family: 宋体">的思想有了更全面的了解。。。</span></div>
<dt>
<div style="text-indent: 21pt"><span style="font-family: 宋体">下一步在设计模式方面的计划：巩固并运用设计模式，巩固：把《大话设计模式》，《</span>.Net<span style="font-family: 宋体">设计模式》，《设计模式——可复用的面向对象基础》，《敏捷软件开发：原则、模式与实践》这些书再结合起来系统的看一看，当然还会去买一些我手头上没有的关于设计模式的书；运用：部门前几天也提倡用</span>C#<span style="font-family: 宋体">来改版</span>VB<span style="font-family: 宋体">程序，我想这是一个很好的平台，正好有机会把理论的东西在实际中应用，理论加实际——唯一的学习方法。。。</span></div>
<dt>下面对各个模式再简单总结一下：
<dt>&nbsp;
<dt>
<div align="left"><strong><span style="font-size: 12pt">1<span style="font-size: 12pt; font-family: 宋体"><strong>、</strong></span></span></strong><strong><span style="font-size: 12pt; font-family: 宋体">创建型模式：</span></strong><strong></strong></div>
<dt>
<div style="text-indent: 21pt">Singleton<span style="font-family: 宋体">：解决的是实例化对象的个数的问题，比如抽象工厂中的工厂、对象池等，除了</span>Singleton<span style="font-family: 宋体">之外，其他创建型模式解决的都是</span> new <span style="font-family: 宋体">所带来的耦合关系。</span></div>
<dt>
<div style="text-indent: 21pt">&nbsp;Abstract Factory<span style="font-family: 宋体">：创建一系列相互依赖对象，并能在运行时改变系列。</span></div>
<dt>
<div style="text-indent: 21pt">Factory Method<span style="font-family: 宋体">：创建单个对象，在</span>Abstract Factory<span style="font-family: 宋体">有使用到。</span></div>
<dt>
<div style="text-indent: 21pt">Prototype<span style="font-family: 宋体">：通过拷贝原型来创建新的对象。</span></div>
<dt>
<div style="text-indent: 21pt">Factory Method<span style="font-family: 宋体">，</span>Abstract Factory, Builder<span style="font-family: 宋体">都需要一个额外的工厂类来负责实例化&#8220;一边对象&#8221;，而</span>Prototype<span style="font-family: 宋体">则是通过原型（一个特殊的工厂类）来克隆&#8220;易变对象&#8221;。</span></div>
<dt>
<div style="text-indent: 21pt"><span style="font-family: 宋体">如果遇到&#8220;易变类&#8221;，起初的设计通常从</span>Factory Method<span style="font-family: 宋体">开始，当遇到更多的复杂变化时，再考虑重构为其他三种工厂模式（</span>Factory Method<span style="font-family: 宋体">，</span>Abstract Factory, Builder<span style="font-family: 宋体">）。</span></div>
<dt>
<div style="text-indent: 21pt">&nbsp;</div>
<dt>
<div align="left"><strong><span style="font-size: 12pt">2</span></strong><strong><span style="font-size: 12pt; font-family: 宋体">、结构性模式</span></strong><strong></strong></div>
<dt>
<div style="text-indent: 21pt">Adapter<span style="font-family: 宋体">：注重转换接口，将不吻合的接口适配对象，用于旧代码复用、类库迁移等。</span></div>
<dt>
<div style="text-indent: 21pt">Bridge<span style="font-family: 宋体">：注重实现抽象和实现的分离，支持对象多维度的变化。</span></div>
<dt>
<div style="text-indent: 21pt">Composite<span style="font-family: 宋体">：注重同意接口，将&#8220;一对多&#8221;的关系转化为&#8220;一对一&#8221;的关系，屏蔽对象容器内部实现结构，实现对象和对象容器使用的一致性。</span></div>
<dt>
<div style="text-indent: 21pt">Decorator<span style="font-family: 宋体">：注重稳定接口，在此前提下为对象扩展功能，实现对象功能的扩展，避免子类膨胀。</span></div>
<dt>
<div style="text-indent: 21pt">Facade<span style="font-family: 宋体">：注重简化接口，屏蔽各子系统的复杂性，提供更高层接口供客户访问。</span></div>
<dt>
<div style="text-indent: 21pt">Flyweight<span style="font-family: 宋体">：注重保留接口，在内部使用共享技术对对象存储进行优化（通过共享大量细粒度对象，提供系统性能）。</span></div>
<dt>
<div style="text-indent: 21pt">Proxy<span style="font-family: 宋体">：注重假借接口，通过增加间接代理，实现更多控制，屏蔽复杂性。</span></div>
<dt>
<div style="text-indent: 21pt">&nbsp;</div>
<dt>
<div align="left"><strong><span style="font-size: 12pt">3&nbsp;</span></strong><strong><span style="font-size: 12pt; font-family: 宋体">、行为型模式</span></strong><strong></strong></div>
<dt>
<div style="text-indent: 21pt">Template Method<span style="font-family: 宋体">：封装算法结构，定义算法骨架，支持算法子步骤变化。</span></div>
<dt>
<div style="text-indent: 21pt">Strategy<span style="font-family: 宋体">：注重封装算法，支持算法的变化，通过封装一系列算法，从而可以随时独立于客户替换算法。</span></div>
<dt>
<div style="text-indent: 21pt">State<span style="font-family: 宋体">：注重封装与状态相关的行为，支持状态的变化，通过封装对象状态，从而在其内部状态改变时改变它的行为。</span></div>
<dt>
<div style="text-indent: 21pt">Memento<span style="font-family: 宋体">：注重封装对象状态变化，支持状态保存、恢复。</span></div>
<dt>
<div style="text-indent: 21pt">Mediator<span style="font-family: 宋体">：注重封装对象间的交互，通过封装一系列对象之间的复杂交互，使他们不需要显式相互引用，实现解耦。</span></div>
<dt>
<div style="text-indent: 21pt">Chain of Responsibility<span style="font-family: 宋体">：注重封装对象责任，支持责任的变化，通过动态构建职责链，实现事务处理。</span></div>
<dt>
<div style="text-indent: 21pt">Command<span style="font-family: 宋体">：注重将请求封装为对象，支持请求的变化，通过将一组行为抽象为对象，实现行为请求者和行为实现者之间的解耦。</span></div>
<dt>
<div style="text-indent: 21pt">Iterator<span style="font-family: 宋体">：注重封装特定领域变化，支持集合的变化，屏蔽集合对象内部复杂结构，提供客户程序对它的透明遍历。</span></div>
<dt>
<div style="text-indent: 21pt">Interpreter<span style="font-family: 宋体">：注重封装特定领域变化，支持领域问题的频繁变化，将特定领域的问题表达为某种语法规则下的句子，然后构建一个解释器来解释这样的句子，从而达到解决问题的目的。</span></div>
<dt>
<div style="text-indent: 21pt">Observer<span style="font-family: 宋体">：注重封装对象通知，支持通信对象的变化，实现对象状态改变，通知依赖它的对象并更新。</span></div>
<dt>
<div style="text-indent: 21pt">Visitor<span style="font-family: 宋体">：注重封装对象操作变化，支持在运行时为类结构添加新的操作，在类层次结构中，在不改变各类的前提下定义作用于这些类实例的新的操作。</span></div>
<dt>
<div style="text-indent: 21pt">&nbsp;</div>
<dt>
<div align="left"><strong><span style="font-size: 12pt; font-family: 宋体">正确对待模式：</span></strong><strong></strong></div>
<dt>
<div style="text-indent: 21pt"><span style="font-family: 宋体">设计模式建立在对系统变化点的基础上进行，哪里有变化，哪里就应用设计模式。</span></div>
<dt>
<div style="text-indent: 21pt"><span style="font-family: 宋体">设计模式应该以演化的方式来获得，系统的变化点往往是经过不断演化才能准确定位。</span></div>
<dt>
<div style="text-indent: 21pt"><span style="font-family: 宋体">不能为了模式而模式，设计模式是一种软件设计的软力量，而非规范标准，不应夸大设计模式的作用。</span></div>
<dt>
<div style="text-indent: 21pt">&nbsp;</div>
</dt></dl>
<p style="text-indent: 21pt">2009-02-05：</p>
<p style="text-indent: 21pt">大话设计模式读书心得：——公司部门去年十月份成立读书会，学习设计模式，现要求写读书心得。</p>
<p style="text-justify: inter-ideograph; margin: 0cm 5.05pt 0pt 0cm; text-indent: 18pt"><span style="font-size: 9pt; font-family: 宋体">从一开始学习设计模式至今已半年有余了，第一次接触设计模式是一次不经意间在网上看到《大话设计模式》一书，看了前言了第一章后，就感觉到其诱惑力对于一个程序员来说，是无比巨大的。大概是去年十月份的时候，部门决定成立读书会，系统学习设计模式。</span></p>
<p style="text-justify: inter-ideograph; margin: 0cm 5.05pt 0pt 0cm; text-indent: 18pt"><span style="font-size: 9pt; font-family: 宋体">通过学习设计模式，除了学习到&#8220;一些设计模式&#8221;，还让我进一步熟悉、巩固了面向对象思想，进一步熟悉了</span><span style="font-size: 9pt; font-family: Arial">C#</span><span style="font-size: 9pt; font-family: 宋体">语言。。。我曾多次设想，我们如果引入面向对象思想，并结合设计模式来重写或改善我们的系统（必须重写，虽说设计模式只是一种思想，语言只是实现而已，但是选择一门好的语言，无疑也是非常重要的，而</span><span style="font-size: 9pt; font-family: Arial">VB6</span><span style="font-size: 9pt; font-family: 宋体">在面向对象方面却有很大欠缺甚至不具备其条件），那么我们的系统将会像目前一样需要那么多人来维护吗？</span></p>
<p style="text-justify: inter-ideograph; margin: 0cm 5.05pt 0pt 0cm; text-indent: 18pt"><span style="font-size: 9pt; font-family: 宋体">《大话设计模式》一书其实是对</span><span style="font-size: 9pt; font-family: Arial">GOF</span><span style="font-size: 9pt; font-family: 宋体">的《设计模式——可复用面向对象软件的基础》一书的&#8220;翻译&#8221;，让人更容易理解，用通俗易懂的语言阐述软件设计过程中的一些&#8220;模式&#8221;，在某种特定环境下，用最好的设计方法（代码高内聚，低耦合，使其有良好的可扩展性和可维护性）达到我们的目的，或许其方法有很多很多，但是寻找到最好的方法却不是件容易的事，设计模式是对前人的设计经验的一个总结，告诉我们在某种特定的环境下，这样的设计师最好的，学习设计模式有助于我们在设计软件的过程中少走很多弯路。</span></p>
<p style="text-justify: inter-ideograph; margin: 0cm 5.05pt 0pt 0cm; text-indent: 18pt"><span style="font-size: 9pt; font-family: 宋体">我对</span><span style="font-size: 9pt; font-family: Arial">GOF</span><span style="font-size: 9pt; font-family: 宋体">的</span><span style="font-size: 9pt; font-family: Arial">23</span><span style="font-size: 9pt; font-family: 宋体">个设计模式虽然都有看过，但是只有理解，实现，应用及思考之后，才能真正体会其精妙之处，至今体会较深的有以下几个模式：</span><span style="font-size: 9pt; font-family: Arial">1.</span> <span style="font-size: 9pt; font-family: Arial">Strategy</span><span style="font-size: 9pt; font-family: 宋体">——封装系列&#8220;算法&#8221;，让它们之间可以相互替换，&#8220;算法&#8221;并不是单指数据结构中的算法，在实践中，它几乎可以封装任何类型的规则，这使得策略模式的运用极其广泛；</span><span style="font-size: 9pt; font-family: Arial">2.</span> <span style="font-size: 9pt; font-family: Arial">Template Method</span><span style="font-size: 9pt; font-family: 宋体">——有人说是用的做多的模式，只要有抽象类的地方，都可以看到这个模式，它通过把不变行为移到父类中去，去除子类中的重复代码，从而提供了一个很好的代码复用平台；</span><span style="font-size: 9pt; font-family: Arial">3.</span> <span style="font-size: 9pt; font-family: Arial">Facade</span><span style="font-size: 9pt; font-family: 宋体">——提供了对基础架构的统一访问，减少复杂性，在</span><span style="font-size: 9pt; font-family: Arial">Web</span><span style="font-size: 9pt; font-family: 宋体">编程者中的三层架构，就是此思想，每一层都封装好一部分功能，提供给上一层统一的方法调用，整个</span><span style="font-size: 9pt; font-family: Arial">Framework</span><span style="font-size: 9pt; font-family: 宋体">体系就是</span><span style="font-size: 9pt; font-family: Arial">Facade</span><span style="font-size: 9pt; font-family: 宋体">模式的封装，随着</span><span style="font-size: 9pt; font-family: Arial">1.0</span><span style="font-size: 9pt; font-family: 宋体">升级到</span><span style="font-size: 9pt; font-family: Arial">3.5</span><span style="font-size: 9pt; font-family: 宋体">，越来越多复杂的高级功能被封装，可以说</span><span style="font-size: 9pt; font-family: Arial">Facade</span><span style="font-size: 9pt; font-family: 宋体">无处不在；</span><span style="font-size: 9pt; font-family: Arial">4.</span> <span style="font-size: 9pt; font-family: Arial">Abstract Factory</span><span style="font-size: 9pt; font-family: 宋体">——提供一个创建一系列相关或相互依赖对象的接口，而无需指定它们具体的类，咋一看，太抽象了，说个例子，在三层架构中，</span><span style="font-size: 9pt; font-family: Arial">BLL</span><span style="font-size: 9pt; font-family: 宋体">层对</span><span style="font-size: 9pt; font-family: Arial">DAL</span><span style="font-size: 9pt; font-family: 宋体">层的调用会直接用到</span><span style="font-size: 9pt; font-family: Arial">DAL</span><span style="font-size: 9pt; font-family: 宋体">层中的类，如果</span><span style="font-size: 9pt; font-family: Arial">DAL</span><span style="font-size: 9pt; font-family: 宋体">层是分别对</span><span style="font-size: 9pt; font-family: Arial">SQL Server</span><span style="font-size: 9pt; font-family: 宋体">，</span><span style="font-size: 9pt; font-family: Arial">Oracle</span><span style="font-size: 9pt; font-family: 宋体">的访问，</span><span style="font-size: 9pt; font-family: Arial">BLL</span><span style="font-size: 9pt; font-family: 宋体">层需要根据实际情况决定实例化哪一个</span><span style="font-size: 9pt; font-family: Arial">DAL</span><span style="font-size: 9pt; font-family: 宋体">层中的类，我们又希望在两种</span><span style="font-size: 9pt; font-family: Arial">DAL</span><span style="font-size: 9pt; font-family: 宋体">层切换时，</span><span style="font-size: 9pt; font-family: Arial">BLL</span><span style="font-size: 9pt; font-family: 宋体">层和</span><span style="font-size: 9pt; font-family: Arial">UI</span><span style="font-size: 9pt; font-family: 宋体">层都不做改变，那么可在</span><span style="font-size: 9pt; font-family: Arial">BLL</span><span style="font-size: 9pt; font-family: 宋体">层和</span><span style="font-size: 9pt; font-family: Arial">DAL</span><span style="font-size: 9pt; font-family: 宋体">层中增加接口层（体现了&#8220;抽象&#8221;的精神，或者说是&#8220;面向接口编程&#8221;的最佳体现）和抽象工厂（</span><span style="font-size: 9pt; font-family: Arial">DALFactroy</span><span style="font-size: 9pt; font-family: 宋体">），让它来实例化</span><span style="font-size: 9pt; font-family: Arial">DAL</span><span style="font-size: 9pt; font-family: 宋体">层中的实例；</span><span style="font-size: 9pt; font-family: Arial">5.</span> <span style="font-size: 9pt; font-family: Arial">Singleton</span><span style="font-size: 9pt; font-family: 宋体">——确保一个类仅有一个实例，并提供一个访问它的全局访问点，如单件窗体，点一下</span><span style="font-size: 9pt; font-family: Arial">Menu</span><span style="font-size: 9pt; font-family: 宋体">，弹出一个窗体</span><span style="font-size: 9pt; font-family: Arial">(</span><span style="font-size: 9pt; font-family: 宋体">实例</span><span style="font-size: 9pt; font-family: Arial">)</span><span style="font-size: 9pt; font-family: 宋体">，在关闭这个新窗体之前，再次点击该</span><span style="font-size: 9pt; font-family: Arial">Menu</span><span style="font-size: 9pt; font-family: 宋体">，不会再次出现同样的弹出窗体</span><span style="font-size: 9pt; font-family: Arial">(</span><span style="font-size: 9pt; font-family: 宋体">实例</span><span style="font-size: 9pt; font-family: Arial">)</span><span style="font-size: 9pt; font-family: 宋体">。。。篇幅有限，其他模式或多或少都有点感觉。</span></p>
<p style="text-indent: 21pt"><span style="font-size: 9pt; font-family: 宋体">最后，引用《设计模式解析》书中的一句话：设计模式体现的是一种思想，而思想是指导行为的一切，理解和掌握了设计模式，并不是说记住了</span><span style="font-size: 9pt; font-family: Arial">23</span><span style="font-size: 9pt; font-family: 宋体">种（或更多）设计场景和解决策略（实际上这也是很重要的一笔财富），实际接受的是一种思想的熏陶和洗礼，等这种思想融入到了你的思想中后，你就会不自觉地使用这种思想去进行你的设计和开发，这一切才是最重要的。</span></p>
<p style="text-indent: 21pt">&nbsp;</p>
<img src ="http://www.cnblogs.com/MaoBisheng/aggbug/1302561.html?type=1" width = "1" height = "1" /><br/><br/>--------------------------<br/>新闻：<a href="http://news.cnblogs.com/n/47994/" target="_blank">Google号召社区力量为互联网加速</a><br/>网站导航: <a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://dotnet.cnblogs.com" target="_blank">.NET频道</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://zzk.cnblogs.com" target="_blank">找找看</a>]]></description></item></channel></rss>