<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_每天做每天该做的事情</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/41367/rss</id><updated>2012-01-21T10:57:10Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/41367/rss"/><entry><id>http://www.cnblogs.com/jiangguanghe/archive/2012/01/21/2328618.html</id><title type="text">数据访问层DAL的再次重构_3(转载)</title><summary type="text">原文链接接着数据访问层DAL的再次重构_2_模块的自定义设置节我们继续实现，到这里，开始后台编码，经历了建立数据库、建表、存储过程、web.config的自定义配置节点后，我们来实现数据访问层的编码。首先：用OOP方式来映射后台的表Polls和PollOptions。分别命名为PollDetail和PollOptionDetail简单实体类。注意一些转换映射的事项：简单实体就是对表的列进行封装。映射为对应的属性时注意赋予初始值。 （如日期字段的复制根据需要选择 DateTime.Now 和 DateTime.MinValue、DateTime.MaxValue）构造方法需要重载（添加带参数的构</summary><published>2012-01-21T10:57:00Z</published><updated>2012-01-21T10:57:00Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangguanghe/archive/2012/01/21/2328618.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/archive/2012/01/21/2328618.html"/><content type="html">&lt;div &gt;&#xD;
&lt;div id="cnblogs_post_body"&gt;&#xD;
&lt;p&gt;&lt;a title="原文链接" href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html#"&gt;原文链接&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;接着&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328435.html" target="_blank"&gt;数据访问层DAL的再次重构_2_模块的自定义设置节&lt;/a&gt;我们继续实现，到这里，开始后台编码，经历了建立数据库、建表、存储过程、web.config的自定义配置节点后，我们来实现数据访问层的编码。&lt;/p&gt;&#xD;
&lt;p&gt;首先：用OOP方式来映射后台的表Polls和PollOptions。分别命名为PollDetail和PollOptionDetail简单实体类。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211720278786.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211720296603.png" width="244" height="86" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注意一些转换映射的事项：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;简单实体就是对表的列进行封装。映射为对应的属性时注意赋予初始值。&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;（如日期字段的复制根据需要选择 DateTime.Now 和 DateTime.MinValue、DateTime.MaxValue）&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;构造方法需要重载（添加带参数的构造方法，实现对需要的属性赋值）&lt;/li&gt;&lt;li&gt;私有字段的命名一般以 _ 下划线开头，采用骆驼命名法&lt;/li&gt;&lt;li&gt;不管实际的数据库的表的主键字段是什么，这里都用Id属性名统一&lt;/li&gt;&lt;li&gt;可能会增加自己的属性[如Votes](表Polls并没有该列，但是获取记录的存储过程确提供了&amp;lt;详情见&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/20/2328315.html" target="_blank"&gt;DAL的再次重构_1&lt;/a&gt;&amp;gt;)&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/20120121172035926.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211720418630.png" width="571" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里的命名空间定义为DAL（通常是DAL.Entity&amp;lt;根文件夹名层次匹配&amp;gt;）。实际上简单实体类的编码通常用代码生成器自动完成。(如CodeSmith工具)&lt;/p&gt;&#xD;
&lt;p&gt;PollOptionDetail.cs代码如下：（增加了Percentage属性：调查选项占总投票数的百分比）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211720463184.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211720573075.png" width="585" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;上面的构造方法都重载了(增加了带参数的功能，便于初始化。)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们还是考虑使用多种类型数据库的可能，比如使用Oracle数据库/SqlServer数据库/DB2数据库等等。这是通过不同的数据提供程序[Provider]来访问的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721024498.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721099345.png" width="644" height="392" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;比如获取的数据来源类型不同，匹配的数据源控件就不同，如(SqlDataSource1/AccessDataSource1/XmlDataSource1等等。。。)&lt;/p&gt;&#xD;
&lt;p&gt;尽管名称不同，但都是DataSource数据源控件，根据你选择的不同，就自动匹配不同的具体数据源控件。&lt;/p&gt;&#xD;
&lt;p&gt;我们这里不管是哪种类型的数据库，对表Polls和表PollOptions的访问都是增删改查(CRUD)，直白说就是那些存储过程所实现的功能。所以这里建立抽象类PollsProvider来实现这些功能封装。具体的实现代码则交给其后的子类SqlPollsProvider来完成。(AccessPollsProvider的代码省略)&lt;/p&gt;&#xD;
&lt;p&gt;建立抽象的父类：PollsProvider用来把模块相关的实体的操作方法集中放在一起，这样比较合理紧凑。&lt;/p&gt;&#xD;
&lt;p&gt;BLL（业务逻辑层与本类进行交互，类似于简单工厂由该类提供具体的子类来完成实际的底层操作）&lt;/p&gt;&#xD;
&lt;p&gt;注意事项：&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;基本上是对存储过程的封装,方法名与存储过程名可以相同，存储过程的参数为方法的参数&lt;/li&gt;&lt;li&gt;命名规范便于以后代码生成器的实现&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721156176.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721217468.png" width="563" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;实际上而言：应该还有个更高的父类：DataAccess，然后：PollsProvider:DataAccess，因为网站不止一个模块，会出现更多的XXXProvider，它们的通用操作就可以放在父类DataAccess中，以继承的方式拥有。而且每个模块有各自的缓存时间、是否激活缓存等等设置。&lt;/p&gt;&#xD;
&lt;p&gt;所以这里添加DataAccess类。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721233856.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721285280.png" width="316" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这样修改PollsProvider构造方法，实现从DataAccess继承的属性的初始化赋值。(这些都是通过读取web.config自定义配置的部分&amp;lt;详见&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328435.html" target="_blank"&gt;自定义配置节&lt;/a&gt;&amp;gt;)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721346703.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721368632.png" width="547" height="248" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;接下来实现具体的子类SqlPollsProvider实现对SqlServer数据库的访问。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721382304.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721441710.png" width="644" height="287" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721475807.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721546999.png" width="583" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里我们就发现这两个方法出现重复代码，需要抽取出来重构成新方法。我认为原则就是找到变和不变的地方。（变的地方用参数灵活处理，不便的地方就用代码方式固定下来）。仔细分析一下就得知：实质上就是调用SqlCommand对象执行存储过程。(而存储过程的名成和参数是变化的)，那么提取的重构方法如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211721563421.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/20120121172203776.png" width="644" height="406" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;接着编写下面的方法，如下图：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211722045071.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211722119328.png" width="644" height="357" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;虽然此时，并没有出现重复的代码情况，但是根据前面的经验，我们这里也有能力进行代码重构了，改动如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211722243580.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211722302853.png" width="458" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;该图中的第二个红色框框实现的是从SqlDataReader中读取当前记录各列的数据，然后初始化为实体对象PollDetail(调用了带参数的构造方法)&lt;/p&gt;&#xD;
&lt;p&gt;虽然没有编写后面的GetPolls方法，但是可以肯定这段代码肯定会重复的。所以提取出来，改动后如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211722323735.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211722352391.png" width="604" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们可以考虑到如果实现AccessPollsProvider的这一部分时，会出现如下的情况：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211722459939.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211722475530.png" width="622" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其实不难发现：AccessPollsProvider和SqlPollsProvider的私有方法GetPollFromReader重复，仅仅参数不同：但是它们都实现了接口IDataReader。所以提取到父类PollsProvider中。进一步，我们接着也封装了后面的三个受保护的GetXXXX方法。(见下图)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211722531589.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723008877.png" width="640" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这样原有的子类中的私有方法GetPollFromReader就可以去掉了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723035483.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723136901.png" width="489" height="549" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们发现上图的这两个红色框框部分能否重构呢？&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/2012012117231550.gif"&gt;&lt;img style="display: inline" title="78" alt="78" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723178457.gif" width="60" height="60" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其实也是可以的，我们知道通过Connection对象的CreateCommand 方法能得到对应的Command对象，而SqlParameter与OleDbParameter的父类都是同一个DbParameter。而Connection的父类都是DbConnection&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723199338.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723248287.png" width="644" height="87" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;那么我们实现提取到父类(DataAccess)中(这里应该叫祖先类了) ，仔细想想就会明白放在DataAccess类中更通用。为了区别，我们把这个方法定义为Execute。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723291346.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723313939.png" width="644" height="204" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;对应的子类调用的代码如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723324887.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723362048.png" width="644" height="382" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;感觉比起原来的ExecuteCmd方法反而多了一个Connection对象参数，能不能再方便些了？&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723411454.gif"&gt;&lt;img style="display: inline" title="10" alt="10" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723431289.gif" width="54" height="48" /&gt;&lt;/a&gt; &lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723474763.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211723489615.png" width="644" height="38" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其实还是可以实现的。&lt;/p&gt;&#xD;
&lt;p&gt;（来源请参考&amp;#8230;&amp;#8230;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211724081090.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211724173786.png" width="359" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211724186162.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211724192442.png" width="244" height="24" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211724446944.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211724484421.png" width="398" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211724508334.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211724556660.png" width="644" height="122" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211724589461.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/20120121172521572.png" width="644" height="88" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&amp;#8230;&amp;#8230;)&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;回到我们的这个主题上来，运用模板方法模式，我们继续改善：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211725233373.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/20120121172529619.png" width="644" height="443" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这样强迫子类override父类的抽象方法，当然，我们发现：PollsProvider类并没有报错，因为它也是抽象类。&lt;/p&gt;&#xD;
&lt;p&gt;而具体的非抽象类如SqlPollsProvider类就非实现不可了！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211725304075.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/20120121172533189.png" width="644" height="331" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;我们看到DataAccess的虚方法Execute核心是调用了command对象的ExecuteNonQuery()方法用来执行SQL语句。&lt;/p&gt;&#xD;
&lt;p&gt;但是command 对象还有ExecuteScalar()和ExecuteReader()方法，一样的我们也同样封装在该类DataAccess中。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211725423310.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211725466851.png" width="644" height="457" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里要注意Reader方法中的con对象千万不能关闭，否则提供出去的IDataReader对象没有意义。CommandBehavior.CloseConnection确保了&lt;/p&gt;&#xD;
&lt;p&gt;当调用者关闭该reader时，关联的该方法的con也会关闭。 所以调用者要记得使用后，关闭得到的这个DataReader对象。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/20120121172549632.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211725556450.png" width="597" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这里值得一提的就是：存储过程输出参数的使用，该图的方法InsertPoll，经过调试，outparam必须赋予初始值。否则，运行异常。&lt;/p&gt;&#xD;
&lt;p&gt;同样最后返回的整型用Convert.ToInt32进行强制安全转换。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;最后注意将来BLL只与PollsProvider交互，所以这里需要运用简单工厂模式来实现。&lt;/p&gt;&#xD;
&lt;p&gt;（可以参考《大话设计模式》的&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211725562937.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211725583055.png" width="644" height="33" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211726089698.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211726111385.png" width="644" height="36" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/20120121172612697.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211726173233.png" width="644" height="36" /&gt;&lt;/a&gt; ）&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211726214232.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211726273082.png" width="644" height="336" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;同时这里也使用了&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211726282077.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211726358319.png" width="644" height="40" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;客户端可以如下调用了：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211726397367.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211726424147.png" width="644" height="152" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211726442869.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/netxiaochong/201201/201201211727109256.png" width="259" height="360" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;后续是参考代码：&lt;/p&gt;&#xD;
&lt;p&gt;DataAccess.cs&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('7f7f6fbd-b957-4f7a-9401-c2aa9ed5de16')"&gt;&lt;img style="display: none" id="code_img_opened_7f7f6fbd-b957-4f7a-9401-c2aa9ed5de16"  onclick="cnblogs_code_hide('7f7f6fbd-b957-4f7a-9401-c2aa9ed5de16',event)" alt="" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&#xD;
&lt;div id="cnblogs_code_open_7f7f6fbd-b957-4f7a-9401-c2aa9ed5de16" &gt;&lt;pre&gt;&lt;span style="color: #008080"&gt; 1&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #008080"&gt; 2&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #008080"&gt; 3&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: #008080"&gt; 4&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span style="color: #008080"&gt; 5&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data.Common;&lt;br /&gt;&lt;span style="color: #008080"&gt; 6&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 7&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; DAL&lt;br /&gt;&lt;span style="color: #008080"&gt; 8&lt;/span&gt; {&lt;br /&gt;&lt;span style="color: #008080"&gt; 9&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; DataAccess &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;数据访问的基类&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;10&lt;/span&gt;     {&lt;br /&gt;&lt;span style="color: #008080"&gt;11&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; _connectionString = &lt;span style="color: #800000"&gt;""&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;12&lt;/span&gt;         &lt;span style="color: #808080"&gt;///&lt;/span&gt; &lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;13&lt;/span&gt; &lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; 数据库连接串&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;14&lt;/span&gt; &lt;span style="color: #808080"&gt;///&lt;/span&gt; &lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;15&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; ConnectionString&lt;br /&gt;&lt;span style="color: #008080"&gt;16&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;17&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _connectionString; }&lt;br /&gt;&lt;span style="color: #008080"&gt;18&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; { _connectionString = value; }&lt;br /&gt;&lt;span style="color: #008080"&gt;19&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;20&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt;21&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; _enableCaching = &lt;span style="color: #0000ff"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;22&lt;/span&gt;         &lt;span style="color: #808080"&gt;///&lt;/span&gt; &lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;23&lt;/span&gt; &lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; 是否启用缓存&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;24&lt;/span&gt; &lt;span style="color: #808080"&gt;///&lt;/span&gt; &lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;25&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; EnableCaching&lt;br /&gt;&lt;span style="color: #008080"&gt;26&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;27&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _enableCaching; }&lt;br /&gt;&lt;span style="color: #008080"&gt;28&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; { _enableCaching = value; }&lt;br /&gt;&lt;span style="color: #008080"&gt;29&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;30&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt;31&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; _cacheDuration = &lt;span style="color: #800080"&gt;0&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;32&lt;/span&gt;         &lt;span style="color: #808080"&gt;///&lt;/span&gt; &lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;33&lt;/span&gt; &lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; 缓存的有效期(秒)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;34&lt;/span&gt; &lt;span style="color: #808080"&gt;///&lt;/span&gt; &lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;35&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; CacheDuration&lt;br /&gt;&lt;span style="color: #008080"&gt;36&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;37&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _cacheDuration; }&lt;br /&gt;&lt;span style="color: #008080"&gt;38&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;set&lt;/span&gt; { _cacheDuration = value; }&lt;br /&gt;&lt;span style="color: #008080"&gt;39&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;40&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; IDbConnection GetConnection();&lt;br /&gt;&lt;span style="color: #008080"&gt;41&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; Execute(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; procedureName, &lt;span style="color: #0000ff"&gt;params&lt;/span&gt; DbParameter[] parameters)&lt;br /&gt;&lt;span style="color: #008080"&gt;42&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;43&lt;/span&gt;             IDbConnection con = GetConnection();&lt;br /&gt;&lt;span style="color: #008080"&gt;44&lt;/span&gt;             IDbCommand cmd = con.CreateCommand();&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;通过con得到相应的cmd对象&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;45&lt;/span&gt;             cmd.CommandText = procedureName;&lt;br /&gt;&lt;span style="color: #008080"&gt;46&lt;/span&gt;             cmd.CommandType = CommandType.StoredProcedure;&lt;br /&gt;&lt;span style="color: #008080"&gt;47&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (parameters != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080"&gt;48&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (DbParameter para &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; parameters)&lt;br /&gt;&lt;span style="color: #008080"&gt;49&lt;/span&gt;                     cmd.Parameters.Add(para);&lt;br /&gt;&lt;span style="color: #008080"&gt;50&lt;/span&gt;             con.Open();&lt;br /&gt;&lt;span style="color: #008080"&gt;51&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; success = cmd.ExecuteNonQuery() == &lt;span style="color: #800080"&gt;1&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080"&gt;52&lt;/span&gt;             con.Close();&lt;br /&gt;&lt;span style="color: #008080"&gt;53&lt;/span&gt;             con.Dispose();&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;记得释放connecton对象&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;54&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt;55&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; success;&lt;br /&gt;&lt;span style="color: #008080"&gt;56&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;57&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; Scalar(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; procedureName, &lt;span style="color: #0000ff"&gt;params&lt;/span&gt; DbParameter[] parameters)&lt;br /&gt;&lt;span style="color: #008080"&gt;58&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;59&lt;/span&gt;             IDbConnection con = GetConnection();&lt;br /&gt;&lt;span style="color: #008080"&gt;60&lt;/span&gt;             IDbCommand cmd = con.CreateCommand();&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;通过con得到相应的cmd对象&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;61&lt;/span&gt;             cmd.CommandText = procedureName;&lt;br /&gt;&lt;span style="color: #008080"&gt;62&lt;/span&gt;             cmd.CommandType = CommandType.StoredProcedure;&lt;br /&gt;&lt;span style="color: #008080"&gt;63&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (parameters != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080"&gt;64&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (DbParameter para &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; parameters) cmd.Parameters.Add(para);&lt;br /&gt;&lt;span style="color: #008080"&gt;65&lt;/span&gt;             con.Open();&lt;br /&gt;&lt;span style="color: #008080"&gt;66&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; result = (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)cmd.ExecuteScalar();&lt;br /&gt;&lt;span style="color: #008080"&gt;67&lt;/span&gt;             con.Close();&lt;br /&gt;&lt;span style="color: #008080"&gt;68&lt;/span&gt;             con.Dispose();&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;需要释放connection占用的资源&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;69&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; result;&lt;br /&gt;&lt;span style="color: #008080"&gt;70&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;71&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt;72&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; IDataReader Reader(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; procedureName, &lt;span style="color: #0000ff"&gt;params&lt;/span&gt; DbParameter[] parameters)&lt;br /&gt;&lt;span style="color: #008080"&gt;73&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;74&lt;/span&gt;             IDbConnection con = GetConnection();&lt;br /&gt;&lt;span style="color: #008080"&gt;75&lt;/span&gt;             IDbCommand cmd = con.CreateCommand();&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;通过con得到相应的cmd对象&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;76&lt;/span&gt;             cmd.CommandText = procedureName;&lt;br /&gt;&lt;span style="color: #008080"&gt;77&lt;/span&gt;             cmd.CommandType = CommandType.StoredProcedure;&lt;br /&gt;&lt;span style="color: #008080"&gt;78&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (parameters != &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080"&gt;79&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (DbParameter para &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; parameters) cmd.Parameters.Add(para);&lt;br /&gt;&lt;span style="color: #008080"&gt;80&lt;/span&gt;             con.Open();&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;con是不能关闭和释放的，因为调用者需要IDataReader对象，而它工作需要这个con。&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;81&lt;/span&gt;             IDataReader result = cmd.ExecuteReader(CommandBehavior.CloseConnection);&lt;br /&gt;&lt;span style="color: #008080"&gt;82&lt;/span&gt;             &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;由调用者关闭这个result对象&amp;lt;调用其Close方法，这样关联的con也会同时关闭&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;83&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; result;&lt;br /&gt;&lt;span style="color: #008080"&gt;84&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;85&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt;86&lt;/span&gt;     }&lt;br /&gt;&lt;span style="color: #008080"&gt;87&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;PollsProvider.cs代码如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('cbf8dd80-b759-46e9-8596-262ecac4ba05')"&gt;&lt;img style="display: none" id="code_img_opened_cbf8dd80-b759-46e9-8596-262ecac4ba05"  onclick="cnblogs_code_hide('cbf8dd80-b759-46e9-8596-262ecac4ba05',event)" alt="" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&#xD;
&lt;div id="cnblogs_code_open_cbf8dd80-b759-46e9-8596-262ecac4ba05" &gt;&lt;pre&gt;&lt;span style="color: #008080"&gt;  1&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #008080"&gt;  2&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #008080"&gt;  3&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: #008080"&gt;  4&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span style="color: #008080"&gt;  5&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; MyWebSite;&lt;br /&gt;&lt;span style="color: #008080"&gt;  6&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; DAL&lt;br /&gt;&lt;span style="color: #008080"&gt;  7&lt;/span&gt; {&lt;br /&gt;&lt;span style="color: #008080"&gt;  8&lt;/span&gt;     &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;把模块相关的实体的操作方法集中放在一起，这样比较合理&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;  9&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; PollsProvider :DataAccess&lt;br /&gt;&lt;span style="color: #008080"&gt; 10&lt;/span&gt;     {&lt;br /&gt;&lt;span style="color: #008080"&gt; 11&lt;/span&gt;         &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;抽象的类提供模块相关访问的抽象方法，具体的数据访问代码交给具体的子类实现&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 12&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;BLL（业务逻辑层与本类进行交互，类似于简单工厂由该类提供具体的子类来完成实际的底层操作）&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 13&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;#region&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt; 14&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; PollsProvider _instance = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;封装了实际的子类(数据访问类如SqlPollsProvider)&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 15&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; PollsProvider Instance&lt;br /&gt;&lt;span style="color: #008080"&gt; 16&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 17&lt;/span&gt;             &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;只读属性(按需加载模式&amp;lt;单例模式(计划生育一个孩子好)&amp;gt;)[用反射的技术实现]&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 18&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;get&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt; 19&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: #008080"&gt; 20&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (_instance == &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;)&lt;br /&gt;&lt;span style="color: #008080"&gt; 21&lt;/span&gt;                 {&lt;br /&gt;&lt;span style="color: #008080"&gt; 22&lt;/span&gt;                     &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;必须首先定义好web.config====创建自定义的配置节&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 23&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; providerTypeName = Globals.Settings.Polls.ProviderType;&lt;br /&gt;&lt;span style="color: #008080"&gt; 24&lt;/span&gt;                     &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;"DAL.SqlClient.SqlPollsProvider";&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;如今保存在配置文件web.config中&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 25&lt;/span&gt;                     _instance = Activator.CreateInstance(Type.GetType(providerTypeName)) &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; PollsProvider;&lt;br /&gt;&lt;span style="color: #008080"&gt; 26&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 27&lt;/span&gt;                 } &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; _instance;&lt;br /&gt;&lt;span style="color: #008080"&gt; 28&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: #008080"&gt; 29&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 30&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;#endregion&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt; 31&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 32&lt;/span&gt;         &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;很重要的初始设置 (构造方法====读取web.config相应的设置)&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 33&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; PollsProvider()&lt;br /&gt;&lt;span style="color: #008080"&gt; 34&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 35&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.ConnectionString = Globals.Settings.Polls.ConnectionString;&lt;br /&gt;&lt;span style="color: #008080"&gt; 36&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.EnableCaching = Globals.Settings.Polls.EnableCaching;&lt;br /&gt;&lt;span style="color: #008080"&gt; 37&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;.CacheDuration = Globals.Settings.Polls.CacheDuration;&lt;br /&gt;&lt;span style="color: #008080"&gt; 38&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 39&lt;/span&gt;         &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;基本上是对存储过程的封装,方法名与存储过程名可以相同，存储过程的参数为方法的参数&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 40&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;应该用代码生成器自动完成&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 41&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;最后自己在进行归类处理（或者判断存储过程与哪个表关联的放一块）&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 42&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 43&lt;/span&gt;         &lt;span style="color: #008000"&gt;/*&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 44&lt;/span&gt; &lt;span style="color: #008000"&gt;         * 这些方法的返回值：对象/对象集合(Get开头的方法)、&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 45&lt;/span&gt; &lt;span style="color: #008000"&gt;         * int(Insert开头的方法&amp;lt;例外：GetcurrentPollId方法&amp;gt;)、bool(非Get/Insert开头的方法)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 46&lt;/span&gt; &lt;span style="color: #008000"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080"&gt; 47&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 48&lt;/span&gt;         &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;与PollDetail有关的方法&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 49&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; ArchivePoll(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId);&lt;br /&gt;&lt;span style="color: #008080"&gt; 50&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; DeletePoll(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId);&lt;br /&gt;&lt;span style="color: #008080"&gt; 51&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; GetcurrentPollId();&lt;br /&gt;&lt;span style="color: #008080"&gt; 52&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; PollDetail GetPoll(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId);&lt;br /&gt;&lt;span style="color: #008080"&gt; 53&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; List&amp;lt;PollDetail&amp;gt; GetPolls(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; includeActive, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; includeArchived);&lt;br /&gt;&lt;span style="color: #008080"&gt; 54&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; InsertPoll(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; addedBy, DateTime addedDate, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; questionText,&lt;br /&gt;&lt;span style="color: #008080"&gt; 55&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isCurrent);&lt;br /&gt;&lt;span style="color: #008080"&gt; 56&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; UpdatePoll(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; questionText, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isCurrent);&lt;br /&gt;&lt;span style="color: #008080"&gt; 57&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 58&lt;/span&gt;         &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;与PollOptionDetail有关的方法&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 59&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; DeletePollOption(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; optionId);&lt;br /&gt;&lt;span style="color: #008080"&gt; 60&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; PollOptionDetail GetPollOption(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; optionId);&lt;br /&gt;&lt;span style="color: #008080"&gt; 61&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; List&amp;lt;PollOptionDetail&amp;gt; GetPollOptions(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId);       &lt;br /&gt;&lt;span style="color: #008080"&gt; 62&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; InsertPollOption(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; optionText, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; addedby,&lt;br /&gt;&lt;span style="color: #008080"&gt; 63&lt;/span&gt;             DateTime addedDate);&lt;br /&gt;&lt;span style="color: #008080"&gt; 64&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; InsertVote(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; optionId);        &lt;br /&gt;&lt;span style="color: #008080"&gt; 65&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; UpdatePollOption(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; optionId, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; optionText);&lt;br /&gt;&lt;span style="color: #008080"&gt; 66&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 67&lt;/span&gt;         &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;下面的受保护的虚方法，允许在子类中调用&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 68&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;通过IDateReader对象，依次读取字段值封装成对应的实体对象/实体对象集合&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 69&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; PollDetail GetPollFromReader(IDataReader reader)&lt;br /&gt;&lt;span style="color: #008080"&gt; 70&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 71&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PollDetail(&lt;br /&gt;&lt;span style="color: #008080"&gt; 72&lt;/span&gt;                 (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;pollId&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;],&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;注意实际后台数据表的主键名称&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 73&lt;/span&gt;                 (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;addedBy&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;],&lt;br /&gt;&lt;span style="color: #008080"&gt; 74&lt;/span&gt;                 (DateTime)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;addedDate&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;], &lt;br /&gt;&lt;span style="color: #008080"&gt; 75&lt;/span&gt;                 (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;questionText&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;],&lt;br /&gt;&lt;span style="color: #008080"&gt; 76&lt;/span&gt;                 (&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;isCurrent&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;], (&lt;span style="color: #0000ff"&gt;bool&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;isArchived&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;],&lt;br /&gt;&lt;span style="color: #008080"&gt; 77&lt;/span&gt;                 &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;注意上述的写法安全，是因为后台表定义时字段不为空，所以reader有数据，&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 78&lt;/span&gt; &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;表定义字段允许为空的，需要判断是否为空的，并且转换为合理的初始值&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 79&lt;/span&gt;                 reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;archivedDate&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;]==DBNull.Value ?DateTime.MinValue:(DateTime)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;archivedDate&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;],&lt;br /&gt;&lt;span style="color: #008080"&gt; 80&lt;/span&gt;                 reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;votes&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;]==DBNull.Value ?&lt;span style="color: #800080"&gt;0&lt;/span&gt;:(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;votes&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: #008080"&gt; 81&lt;/span&gt;                 );&lt;br /&gt;&lt;span style="color: #008080"&gt; 82&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 83&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; List&amp;lt;PollDetail&amp;gt; GetPollListFromReader(IDataReader reader)&lt;br /&gt;&lt;span style="color: #008080"&gt; 84&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 85&lt;/span&gt;             List&amp;lt;PollDetail&amp;gt; polls = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;PollDetail&amp;gt;();&lt;br /&gt;&lt;span style="color: #008080"&gt; 86&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (reader.Read())&lt;br /&gt;&lt;span style="color: #008080"&gt; 87&lt;/span&gt;             {&lt;br /&gt;&lt;span style="color: #008080"&gt; 88&lt;/span&gt;                 polls.Add(GetPollFromReader(reader));&lt;br /&gt;&lt;span style="color: #008080"&gt; 89&lt;/span&gt;             }&lt;br /&gt;&lt;span style="color: #008080"&gt; 90&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; polls;&lt;br /&gt;&lt;span style="color: #008080"&gt; 91&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 92&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 93&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; PollOptionDetail GetPollOptionFromReader(IDataReader reader)&lt;br /&gt;&lt;span style="color: #008080"&gt; 94&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 95&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; PollOptionDetail(&lt;br /&gt;&lt;span style="color: #008080"&gt; 96&lt;/span&gt;                 (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;optionId&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;], (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;optionText&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;], (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;votes&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;],&lt;br /&gt;&lt;span style="color: #008080"&gt; 97&lt;/span&gt;                 (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;pollId&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;], (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;addedBy&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;], (DateTime)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;addedDate&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;],&lt;br /&gt;&lt;span style="color: #008080"&gt; 98&lt;/span&gt;                 reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;percentage&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;] == DBNull.Value ? &lt;span style="color: #800080"&gt;0&lt;/span&gt; : (&lt;span style="color: #0000ff"&gt;double&lt;/span&gt;)reader[&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;percentage&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;]);&lt;br /&gt;&lt;span style="color: #008080"&gt; 99&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;100&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;virtual&lt;/span&gt; List&amp;lt;PollOptionDetail&amp;gt; GetPollOptionListFromReader(IDataReader reader)&lt;br /&gt;&lt;span style="color: #008080"&gt;101&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;102&lt;/span&gt;             List&amp;lt;PollOptionDetail&amp;gt; pollOptions = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; List&amp;lt;PollOptionDetail&amp;gt;();&lt;br /&gt;&lt;span style="color: #008080"&gt;103&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (reader.Read()) pollOptions.Add(GetPollOptionFromReader(reader));&lt;br /&gt;&lt;span style="color: #008080"&gt;104&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; pollOptions;&lt;br /&gt;&lt;span style="color: #008080"&gt;105&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;106&lt;/span&gt;     }&lt;br /&gt;&lt;span style="color: #008080"&gt;107&lt;/span&gt; }&lt;br /&gt;&lt;span style="color: #008080"&gt;108&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt;109&lt;/span&gt;  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SqlPollsProvider.cs如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('8b27820f-900b-42b8-aabc-28322e093f91')"&gt;&lt;img style="display: none" id="code_img_opened_8b27820f-900b-42b8-aabc-28322e093f91"  onclick="cnblogs_code_hide('8b27820f-900b-42b8-aabc-28322e093f91',event)" alt="" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&#xD;
&lt;div id="cnblogs_code_open_8b27820f-900b-42b8-aabc-28322e093f91" &gt;&lt;pre&gt;&lt;span style="color: #008080"&gt;  1&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: #008080"&gt;  2&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;span style="color: #008080"&gt;  3&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Web;&lt;br /&gt;&lt;span style="color: #008080"&gt;  4&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data.SqlClient;&lt;br /&gt;&lt;span style="color: #008080"&gt;  5&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;span style="color: #008080"&gt;  6&lt;/span&gt; &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data.Common;&lt;br /&gt;&lt;span style="color: #008080"&gt;  7&lt;/span&gt; &lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; DAL.SqlClient&lt;br /&gt;&lt;span style="color: #008080"&gt;  8&lt;/span&gt; {&lt;br /&gt;&lt;span style="color: #008080"&gt;  9&lt;/span&gt;     &lt;span style="color: #808080"&gt;///&lt;/span&gt; &lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 10&lt;/span&gt; &lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt; 具体的SqlServer数据库的民意调查模块相关表的访问(增/删/改/查),都是调用相应的存储过程&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 11&lt;/span&gt; &lt;span style="color: #808080"&gt;///&lt;/span&gt; &lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 12&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; SqlPollsProvider : PollsProvider&lt;br /&gt;&lt;span style="color: #008080"&gt; 13&lt;/span&gt;     {&lt;br /&gt;&lt;span style="color: #008080"&gt; 14&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; IDbConnection GetConnection()&lt;br /&gt;&lt;span style="color: #008080"&gt; 15&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 16&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlConnection(ConnectionString);&lt;br /&gt;&lt;span style="color: #008080"&gt; 17&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 18&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 19&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; ArchivePoll(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId)&lt;br /&gt;&lt;span style="color: #008080"&gt; 20&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 21&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Execute(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;ArchivePoll&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&lt;br /&gt;&lt;span style="color: #008080"&gt; 22&lt;/span&gt;                  &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] { &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@pollId&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, pollId) });&lt;br /&gt;&lt;span style="color: #008080"&gt; 23&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 24&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 25&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; DeletePoll(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId)&lt;br /&gt;&lt;span style="color: #008080"&gt; 26&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 27&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Execute(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;DeletePoll&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&lt;br /&gt;&lt;span style="color: #008080"&gt; 28&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] { &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@pollId&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, pollId) });&lt;br /&gt;&lt;span style="color: #008080"&gt; 29&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 30&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 31&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; GetcurrentPollId()&lt;br /&gt;&lt;span style="color: #008080"&gt; 32&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 33&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;  Scalar(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;GetCurrentPollID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;);&lt;br /&gt;&lt;span style="color: #008080"&gt; 34&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 35&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 36&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; PollDetail GetPoll(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId)&lt;br /&gt;&lt;span style="color: #008080"&gt; 37&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 38&lt;/span&gt;             IDataReader reader=&lt;br /&gt;&lt;span style="color: #008080"&gt; 39&lt;/span&gt;                 Reader(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;GetPoll&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] { &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@PollID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,pollId)});&lt;br /&gt;&lt;span style="color: #008080"&gt; 40&lt;/span&gt;             reader.Read();&lt;br /&gt;&lt;span style="color: #008080"&gt; 41&lt;/span&gt;             PollDetail result= GetPollFromReader(reader);&lt;br /&gt;&lt;span style="color: #008080"&gt; 42&lt;/span&gt;             reader.Close();&lt;br /&gt;&lt;span style="color: #008080"&gt; 43&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; result;&lt;br /&gt;&lt;span style="color: #008080"&gt; 44&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 45&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 46&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; List&amp;lt;PollDetail&amp;gt; GetPolls(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; includeActive, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; includeArchived)&lt;br /&gt;&lt;span style="color: #008080"&gt; 47&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 48&lt;/span&gt;             IDataReader reader = Reader(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;GetPolls&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&lt;br /&gt;&lt;span style="color: #008080"&gt; 49&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] {&lt;br /&gt;&lt;span style="color: #008080"&gt; 50&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@IncludeActive&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,includeActive),&lt;br /&gt;&lt;span style="color: #008080"&gt; 51&lt;/span&gt;                     &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@IncludeArchived&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,includeArchived)});&lt;br /&gt;&lt;span style="color: #008080"&gt; 52&lt;/span&gt;             List&amp;lt;PollDetail&amp;gt; result = GetPollListFromReader(reader);&lt;br /&gt;&lt;span style="color: #008080"&gt; 53&lt;/span&gt;             reader.Close();&lt;br /&gt;&lt;span style="color: #008080"&gt; 54&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; result;&lt;br /&gt;&lt;span style="color: #008080"&gt; 55&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 56&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 57&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; InsertPoll(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; addedBy, DateTime addedDate, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; questionText, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isCurrent)&lt;br /&gt;&lt;span style="color: #008080"&gt; 58&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 59&lt;/span&gt;             SqlParameter outparam = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@PollID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, &lt;span style="color: #800080"&gt;0&lt;/span&gt;);&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;不赋值0，报初始值错误&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 60&lt;/span&gt;             outparam.Direction = ParameterDirection.Output;&lt;br /&gt;&lt;span style="color: #008080"&gt; 61&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 62&lt;/span&gt;             Execute(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;InsertPoll&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&lt;br /&gt;&lt;span style="color: #008080"&gt; 63&lt;/span&gt;                 &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] { &lt;br /&gt;&lt;span style="color: #008080"&gt; 64&lt;/span&gt;                   &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@AddedBy&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,addedBy),&lt;br /&gt;&lt;span style="color: #008080"&gt; 65&lt;/span&gt;                   &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@AddedDate&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,addedDate),&lt;br /&gt;&lt;span style="color: #008080"&gt; 66&lt;/span&gt;                   &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@QuestionText&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,questionText),&lt;br /&gt;&lt;span style="color: #008080"&gt; 67&lt;/span&gt;                   &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@IsCurrent&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,isCurrent),&lt;br /&gt;&lt;span style="color: #008080"&gt; 68&lt;/span&gt;                   outparam&lt;br /&gt;&lt;span style="color: #008080"&gt; 69&lt;/span&gt;                 });&lt;br /&gt;&lt;span style="color: #008080"&gt; 70&lt;/span&gt;             &lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;return (int)outparam.Value;转换无效&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt; 71&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Convert.ToInt32(outparam.Value);&lt;br /&gt;&lt;span style="color: #008080"&gt; 72&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 73&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 74&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; UpdatePoll(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; questionText, &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; isCurrent)&lt;br /&gt;&lt;span style="color: #008080"&gt; 75&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 76&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Execute(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;UpdatePoll&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] {&lt;br /&gt;&lt;span style="color: #008080"&gt; 77&lt;/span&gt;              &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@PollID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,pollId),&lt;br /&gt;&lt;span style="color: #008080"&gt; 78&lt;/span&gt;              &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@QuestionText&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,questionText),&lt;br /&gt;&lt;span style="color: #008080"&gt; 79&lt;/span&gt;              &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@IsCurrent&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,isCurrent)});&lt;br /&gt;&lt;span style="color: #008080"&gt; 80&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 81&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 82&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; DeletePollOption(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; optionId)&lt;br /&gt;&lt;span style="color: #008080"&gt; 83&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 84&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Execute(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;DeletePollOption&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] { &lt;br /&gt;&lt;span style="color: #008080"&gt; 85&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@OptionID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,optionId)    });&lt;br /&gt;&lt;span style="color: #008080"&gt; 86&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 87&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 88&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; PollOptionDetail GetPollOption(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; optionId)&lt;br /&gt;&lt;span style="color: #008080"&gt; 89&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt; 90&lt;/span&gt;             IDataReader reader = Reader(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;GetPollOption&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] { &lt;br /&gt;&lt;span style="color: #008080"&gt; 91&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@OptionID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,optionId)    });&lt;br /&gt;&lt;span style="color: #008080"&gt; 92&lt;/span&gt;             reader.Read();&lt;br /&gt;&lt;span style="color: #008080"&gt; 93&lt;/span&gt;             PollOptionDetail result= GetPollOptionFromReader(reader);&lt;br /&gt;&lt;span style="color: #008080"&gt; 94&lt;/span&gt;             reader.Close();&lt;br /&gt;&lt;span style="color: #008080"&gt; 95&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; result;&lt;br /&gt;&lt;span style="color: #008080"&gt; 96&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt; 97&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt; 98&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; List&amp;lt;PollOptionDetail&amp;gt; GetPollOptions(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId)&lt;br /&gt;&lt;span style="color: #008080"&gt; 99&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;100&lt;/span&gt;             IDataReader reader = Reader(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;GetPollOptions&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] {&lt;br /&gt;&lt;span style="color: #008080"&gt;101&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@PollID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,pollId)});&lt;br /&gt;&lt;span style="color: #008080"&gt;102&lt;/span&gt;             List&amp;lt;PollOptionDetail&amp;gt; result= GetPollOptionListFromReader(reader);&lt;br /&gt;&lt;span style="color: #008080"&gt;103&lt;/span&gt;             reader.Close();&lt;br /&gt;&lt;span style="color: #008080"&gt;104&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; result;&lt;br /&gt;&lt;span style="color: #008080"&gt;105&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;106&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt;107&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; InsertPollOption(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; optionText, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; pollId, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; addedby, DateTime addedDate)&lt;br /&gt;&lt;span style="color: #008080"&gt;108&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;109&lt;/span&gt;             SqlParameter outparam = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@OptionID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, &lt;span style="color: #800080"&gt;0&lt;/span&gt;);&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;不赋值0，报初始值错误&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008080"&gt;110&lt;/span&gt;             outparam.Direction = ParameterDirection.Output;&lt;br /&gt;&lt;span style="color: #008080"&gt;111&lt;/span&gt;             Execute(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;InsertPollOption&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] {&lt;br /&gt;&lt;span style="color: #008080"&gt;112&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@OptionText&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,optionText ),&lt;br /&gt;&lt;span style="color: #008080"&gt;113&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@PollID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,pollId),&lt;br /&gt;&lt;span style="color: #008080"&gt;114&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@AddedDate&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,addedDate),&lt;br /&gt;&lt;span style="color: #008080"&gt;115&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@AddedBy&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,addedby),outparam&lt;br /&gt;&lt;span style="color: #008080"&gt;116&lt;/span&gt;             });&lt;br /&gt;&lt;span style="color: #008080"&gt;117&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Convert.ToInt32(outparam.Value);&lt;br /&gt;&lt;span style="color: #008080"&gt;118&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;119&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt;120&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; InsertVote(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; optionId)&lt;br /&gt;&lt;span style="color: #008080"&gt;121&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;122&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Execute(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;InsertVote&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] { &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@OptionID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, optionId) });&lt;br /&gt;&lt;span style="color: #008080"&gt;123&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;124&lt;/span&gt; &lt;br /&gt;&lt;span style="color: #008080"&gt;125&lt;/span&gt;         &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff"&gt;bool&lt;/span&gt; UpdatePollOption(&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; optionId, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; optionText)&lt;br /&gt;&lt;span style="color: #008080"&gt;126&lt;/span&gt;         {&lt;br /&gt;&lt;span style="color: #008080"&gt;127&lt;/span&gt;             &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; Execute(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;UpdatePollOption&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;, &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter[] { &lt;br /&gt;&lt;span style="color: #008080"&gt;128&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@OptionID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,optionId),&lt;br /&gt;&lt;span style="color: #008080"&gt;129&lt;/span&gt;               &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; SqlParameter (&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;@OptionText&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,optionText)  });&lt;br /&gt;&lt;span style="color: #008080"&gt;130&lt;/span&gt;         }&lt;br /&gt;&lt;span style="color: #008080"&gt;131&lt;/span&gt;     }&lt;br /&gt;&lt;span style="color: #008080"&gt;132&lt;/span&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&#xD;
&lt;div id="MySignature"&gt;子曰：&amp;#8220;学而时习之，不亦说乎！有朋自远方来，不亦乐乎！人不知而不愠，不亦君子乎！&amp;#8221; &lt;br /&gt;当来之世，经道灭尽，我以慈悲哀愍，特留此经止住百岁。其有众生，值斯经者，随意所愿，皆可得度。(南无阿弥陀佛) &lt;br /&gt;道可道，非常道；名可名，非常名。 &lt;br /&gt;我常说，一个国家，一个民族，亡国都不怕，最可怕的是一个国 家和民族自己的根本文化亡掉了，这就会沦为万劫不复，永远不会翻身。---南怀瑾&amp;lt;国学大师&amp;gt; &lt;br /&gt;&lt;a href="http://www.xfrs.org/"&gt;传统文化论坛网站&lt;/a&gt; &lt;/div&gt;&#xD;
&lt;div id="blog_post_info_block"&gt;&#xD;
&lt;div id="BlogPostCategory"&gt;分类: &lt;a href="http://www.cnblogs.com/netxiaochong/category/343190.html"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://www.cnblogs.com/netxiaochong/category/348119.html"&gt;设计模式&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div id="EntryTag"&gt;&lt;/div&gt;&#xD;
&lt;div id="green_channel"&gt;绿色通道：&lt;a id="green_channel_digg" onclick=";green_channel_success(this,'谢谢推荐！');" href="http://www.cnblogs.com/jiangguanghe/admin/javascript:void(0);"&gt;好文要顶&lt;/a&gt;&lt;a id="green_channel_follow" onclick=";" href="http://www.cnblogs.com/jiangguanghe/admin/javascript:void(0);"&gt;关注我&lt;/a&gt;&lt;a id="green_channel_favorite" onclick="AddToWz(2328595);return false;" href="http://www.cnblogs.com/jiangguanghe/admin/javascript:void(0);"&gt;收藏该文&lt;/a&gt;&lt;a id="green_channel_contact" href="http://space.cnblogs.com/msg/send/net%e5%b0%8f%e8%99%ab" target="_blank"&gt;与我联系&lt;/a&gt; &lt;a id="green_channel_weibo" title="分享至新浪微博" onclick="ShareToTsina()" href="http://www.cnblogs.com/jiangguanghe/admin/javascript:void(0);"&gt;&lt;img alt="" src="http://static.cnblogs.com/images/icon_sina.gif" /&gt;&lt;/a&gt; &lt;/div&gt;&#xD;
&lt;div id="digg_block"&gt;&#xD;
&lt;div id="author_profile"&gt;&#xD;
&lt;div id="author_profile_info" &gt;&lt;a href="http://home.cnblogs.com/u/netxiaochong/" target="_blank"&gt;&lt;img  alt="" src="http://pic.cnblogs.com/face/u361729.jpg?id=16205940" /&gt;&lt;/a&gt; &#xD;
&lt;div id="author_profile_detail" &gt;&lt;a href="http://home.cnblogs.com/u/netxiaochong/"&gt;net小虫&lt;/a&gt;&lt;br /&gt;&lt;a href="http://home.cnblogs.com/u/netxiaochong/followees"&gt;关注 - 2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://home.cnblogs.com/u/netxiaochong/followers"&gt;粉丝 - 8&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&lt;/div&gt;&#xD;
&lt;div id="author_profile_honor"&gt;&lt;/div&gt;&#xD;
&lt;div id="author_profile_follow"&gt;&lt;a onclick=";return false;" href="http://www.cnblogs.com/jiangguanghe/admin/javascript:void(0);"&gt;+加关注&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div id="div_digg"&gt;&#xD;
&lt;div  onclick=""&gt;&lt;span id="digg_count" &gt;0&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div  onclick=""&gt;&lt;span id="bury_count" &gt;0&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&lt;/div&gt;&#xD;
&lt;div id="digg_tips" &gt;(请您对文章做出评价)&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&lt;/div&gt;&#xD;
&lt;div id="post_next_prev"&gt;&lt;a  href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328435.html"&gt;&amp;#171; &lt;/a&gt;博主前一篇：&lt;a title="发布于2012-01-21 11:49" href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328435.html"&gt;数据访问层DAL的再次重构_2_模块的自定义设置节&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;posted @ 2012-01-21 17:33 &lt;a href="http://www.cnblogs.com/netxiaochong/"&gt;net小虫&lt;/a&gt; 阅读(132) &lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html#commentform"&gt;评论(0)&lt;/a&gt; &lt;a onclick="open_link('http://www.cnblogs.com/netxiaochong/admin/EditPosts.aspx?postid=2328595')" href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html#" rel="nofollow"&gt;编辑&lt;/a&gt; &lt;a onclick="AddToWz(2328595);return false;" href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html#"&gt;收藏&lt;/a&gt;&lt;/div&gt;&lt;img alt="" src="http://www.cnblogs.com/netxiaochong/aggbug/2328595.html?type=1&amp;amp;webview=1" width="1" height="1" /&gt; &lt;!--end: topics 文章、评论容器--&gt;&#xD;
 &#xD;
&lt;div id="comment_form" &gt;&#xD;
&lt;div id="divCommentShow"&gt;&lt;/div&gt;&#xD;
&lt;div id="comment_nav"&gt;&lt;span id="span_refresh_tips"&gt;&lt;/span&gt;&lt;a id="lnk_RefreshComments" onclick="return RefreshCommentList(2328595);" href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html#" name="commentform"&gt;刷新评论列表&lt;/a&gt;&lt;a onclick="return RefreshPage();" href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html#"&gt;刷新页面&lt;/a&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html#top"&gt;返回顶部&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div id="commentform_title"&gt;发表评论&lt;/div&gt;&lt;span style="color: red" id="tip_comment"&gt;&lt;/span&gt;&#xD;
&lt;p&gt;昵称：&lt;input id="ctl03_tbCommentAuthor"  disabled value="独臂侠" name="ctl03$tbCommentAuthor"  type="text" /&gt; &lt;/p&gt;&#xD;
&lt;p&gt;主页：&lt;input id="ctl03_tbCommentAuthorUrl"  disabled value="http://home.cnblogs.com/u/jiangguanghe/" name="ctl03$tbCommentAuthorUrl"  type="text" /&gt; &lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;评论内容： &lt;a href="http://q.cnblogs.com/" target="_blank"&gt;[小提示]新版博问上线&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&lt;img id="ubb_quote"  title="添加引用" onclick="insertUBB('tbCommentBody','quote')" alt="引用" src="http://static.cnblogs.com/images/ubb/quote.gif"&gt; &lt;img id="ubb_bold"  title="添加粗体" onclick="insertUBB('tbCommentBody','b')" alt="粗体" src="http://static.cnblogs.com/images/ubb/b.png"&gt; &lt;img id="ubb_url"  title="添加链接" onclick="insertUbbUrl('tbCommentBody')" alt="链接" src="http://static.cnblogs.com/images/ubb/lk.png"&gt; &lt;img id="ubb_indent"  title="添加首行缩进" onclick="insertIndent('tbCommentBody')" alt="缩进" src="http://static.cnblogs.com/images/ubb/indent.png"&gt; &lt;img id="ubb_code"  title="添加代码" onclick="insertUbbCode()" alt="代码" src="http://static.cnblogs.com/images/ubb/InsertCode.gif"&gt; &lt;img id="ubb_img"  title="添加图片" onclick="insertUbbImg('tbCommentBody')" alt="图片" src="http://static.cnblogs.com/images/ubb/img.gif"&gt; &lt;a  title="上传图片并插入评论框" href="http://www.cnblogs.com/jiangguanghe/admin/javascript:OpenImageUploadWindow();"&gt;上传图片&lt;/a&gt; &lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&lt;/div&gt;&lt;textarea onkeydown="return clt_enter(event)" id="tbCommentBody" &gt;&lt;/textarea&gt; &lt;/div&gt;&#xD;
&lt;p&gt;&lt;input id="btn_comment_submit"  onclick=";return false;" value="提交" type="button"&gt; &amp;nbsp;&amp;nbsp;&lt;span style="display: none" id="span_comment_canceledit"&gt;&lt;a onclick="return CancelCommentEdit()" href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html###"&gt;不改了&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;a onclick="return confirm('确认注销吗？')" href="http://passport.cnblogs.com/logout.aspx?ReturnUrl=http%3a%2f%2fwww.cnblogs.com%2fnetxiaochong%2farchive%2f2012%2f01%2f21%2f2328595.html%3flogout%3d1%23commentform"&gt;注销&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;a id="ctl03_lnkSubscribe" title="邮件订阅回复通知" onclick="return SubscribeComment();" href="http://www.cnblogs.com/UI/Controls/#%23%23"&gt;订阅回复&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;[使用Ctrl+Enter键快速提交] &lt;/p&gt;&#xD;
&lt;div style="display: none"&gt;&lt;span id="comment_edit_id"&gt;&lt;/span&gt;&lt;span id="span_parentcomment_id"&gt;0&lt;/span&gt; &lt;span id="span_parent_id"&gt;2328595&lt;/span&gt; &lt;span id="span_comment_replyto"&gt;&lt;/span&gt;&lt;span id="span_comment_title"&gt;数据访问层DAL的再次重构_3&lt;/span&gt; &lt;span id="span_comment_posted"&gt;&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div id="clear_read_link"&gt;&lt;a href="http://archive.cnblogs.com/a/2328595/" target="_blank"&gt;简洁阅读版式&lt;/a&gt;&lt;/div&gt;&#xD;
&lt;div id="site_nav_under"&gt;&lt;a title="程序员的网上家园" href="http://www.cnblogs.com/" target="_blank"&gt;首页&lt;/a&gt;&lt;a href="http://q.cnblogs.com/" target="_blank"&gt;博问&lt;/a&gt;&lt;a href="http://home.cnblogs.com/ing/" target="_blank"&gt;闪存&lt;/a&gt;&lt;a title="IT新闻" href="http://news.cnblogs.com/" target="_blank"&gt;新闻&lt;/a&gt;&lt;a href="http://home.cnblogs.com/" target="_blank"&gt;园子&lt;/a&gt;&lt;a title="程序员招聘" href="http://job.cnblogs.com/" target="_blank"&gt;招聘&lt;/a&gt;&lt;a href="http://kb.cnblogs.com/" target="_blank"&gt;知识库&lt;/a&gt; &lt;/div&gt;&#xD;
&lt;div &gt;&lt;strong&gt;最新IT新闻&lt;/strong&gt;:&lt;br /&gt;&amp;#183; &lt;a href="http://news.cnblogs.com/n/129074/" target="_blank"&gt;传Facebook与音乐服务网站Vevo正进行合作谈判&lt;/a&gt;&lt;br /&gt;&amp;#183; &lt;a href="http://news.cnblogs.com/n/129073/" target="_blank"&gt;Lumia 800销量不佳 运营商要求诺基亚降价&lt;/a&gt;&lt;br /&gt;&amp;#183; &lt;a href="http://news.cnblogs.com/n/129072/" target="_blank"&gt;越狱？不越狱？&lt;/a&gt;&lt;br /&gt;&amp;#183; &lt;a href="http://news.cnblogs.com/n/129071/" target="_blank"&gt;微软Twitter暗讽苹果iBooks Author霸王条款&lt;/a&gt;&lt;br /&gt;&amp;#183; &lt;a href="http://news.cnblogs.com/n/129070/" target="_blank"&gt;DoS工具LOIC下载量暴涨&lt;/a&gt;&lt;br /&gt;&amp;#187; &lt;a title="IT新闻" href="http://news.cnblogs.com/" target="_blank"&gt;更多新闻...&lt;/a&gt; &lt;/div&gt;&#xD;
&lt;div id="kb_block" &gt;&lt;strong&gt;最新知识库文章&lt;/strong&gt;:&lt;br /&gt;&#xD;
&lt;div id="kb_recent"&gt;&amp;#183; &lt;a href="http://kb.cnblogs.com/page/129068/" target="_blank"&gt;UML基础：统一建模语言简介&lt;/a&gt;&lt;br /&gt;&amp;#183; &lt;a href="http://kb.cnblogs.com/page/116155/" target="_blank"&gt;致年轻开发人员的一封信&lt;/a&gt;&lt;br /&gt;&amp;#183; &lt;a href="http://kb.cnblogs.com/page/113503/" target="_blank"&gt;好的程序员做不出好的软件设计&lt;/a&gt;&lt;br /&gt;&amp;#183; &lt;a href="http://kb.cnblogs.com/page/111013/" target="_blank"&gt;面向领域驱动架构的查询实现方式&lt;/a&gt;&lt;br /&gt;&amp;#183; &lt;a href="http://kb.cnblogs.com/page/110126/" target="_blank"&gt;.NET应用框架架构设计实践 - 概述&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&amp;#187; &lt;a href="http://kb.cnblogs.com/" target="_blank"&gt;更多知识库文章...&lt;/a&gt; &lt;/div&gt;&#xD;
&lt;div id="google_ad_c1" &gt;&lt;!-- cnblogs_blogpost_C1 --&gt;&#xD;
&#xD;
&lt;div style="width: 300px; height: 250px" id="div-gpt-ad-1320933818841-0"&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div id="google_ad_c2" &gt;&lt;!-- cnblogs_blogpost_C2 --&gt;&#xD;
&#xD;
&lt;div style="width: 468px; height: 60px" id="div-gpt-ad-1320933818841-1"&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div id="ad_under_comment2" &gt;&lt;a href="http://www.china-pub.com/STATIC07/1107/2011chinapub_6810_110718/2011chinapub_6810_110718.asp" rel="nofollow" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" alt="" src="http://static.cnblogs.com/images/a4/china-pub.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.china-pub.com/STATIC07/1107/zh_autumntb_110725/zh_autumntb_110725.asp" rel="nofollow" target="_blank"&gt;China-pub 2011秋季教材巡展&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.china-pub.com/static07/0901/zh_jueba_090121.asp" rel="nofollow" target="_blank"&gt;China-Pub 计算机绝版图书按需印刷服务&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&#xD;
&lt;div id="HistoryToday" &gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;!--end: forFlow --&gt;&lt;!--end: mainContent 主体内容容器--&gt;&#xD;
&#xD;
&lt;div id="sideBar"&gt;&#xD;
&lt;div id="sideBarMain"&gt;&lt;!--done--&gt;&#xD;
&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;公告&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="profile_block"&gt;昵称：&lt;a href="http://home.cnblogs.com/u/netxiaochong/"&gt;net小虫&lt;/a&gt;&lt;br /&gt;园龄：&lt;a title="入园时间：2011-12-16" href="http://home.cnblogs.com/u/netxiaochong/"&gt;1个月&lt;/a&gt;&lt;br /&gt;粉丝：&lt;a href="http://home.cnblogs.com/u/netxiaochong/followers/"&gt;8&lt;/a&gt;&lt;br /&gt;关注：&lt;a href="http://home.cnblogs.com/u/netxiaochong/followees/"&gt;2&lt;/a&gt; &#xD;
&lt;div id="p_b_follow"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div id="calendar"&gt;&#xD;
&lt;table id="Calendar1_entryCal"  title="Calendar" cellspacing="0" cellpadding="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td colspan="7"&gt;&#xD;
&lt;table  cellspacing="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td &gt;&lt;a style="color: black" title="Go to the previous month" href="http://www.cnblogs.com/jiangguanghe/admin/javascript:__doPostBack('Calendar1$entryCal','V4352')"&gt;&amp;lt;&lt;/a&gt;&lt;/td&gt;&#xD;
&lt;td align="center"&gt;2012年1月&lt;/td&gt;&#xD;
&lt;td  align="right"&gt;&lt;a style="color: black" title="Go to the next month" href="http://www.cnblogs.com/jiangguanghe/admin/javascript:__doPostBack('Calendar1$entryCal','V4414')"&gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;th  abbr="日" scope="col" align="center"&gt;日&lt;/th&gt;&#xD;
&lt;th  abbr="一" scope="col" align="center"&gt;一&lt;/th&gt;&#xD;
&lt;th  abbr="二" scope="col" align="center"&gt;二&lt;/th&gt;&#xD;
&lt;th  abbr="三" scope="col" align="center"&gt;三&lt;/th&gt;&#xD;
&lt;th  abbr="四" scope="col" align="center"&gt;四&lt;/th&gt;&#xD;
&lt;th  abbr="五" scope="col" align="center"&gt;五&lt;/th&gt;&#xD;
&lt;th  abbr="六" scope="col" align="center"&gt;六&lt;/th&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  align="center"&gt;25&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;26&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;27&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;28&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;29&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;30&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;31&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  align="center"&gt;1&lt;/td&gt;&#xD;
&lt;td align="center"&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/1/2.html"&gt;&lt;u&gt;2&lt;/u&gt;&lt;/a&gt;&lt;/td&gt;&#xD;
&lt;td align="center"&gt;3&lt;/td&gt;&#xD;
&lt;td align="center"&gt;4&lt;/td&gt;&#xD;
&lt;td align="center"&gt;5&lt;/td&gt;&#xD;
&lt;td align="center"&gt;6&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;7&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  align="center"&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/1/8.html"&gt;&lt;u&gt;8&lt;/u&gt;&lt;/a&gt;&lt;/td&gt;&#xD;
&lt;td align="center"&gt;9&lt;/td&gt;&#xD;
&lt;td align="center"&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/1/10.html"&gt;&lt;u&gt;10&lt;/u&gt;&lt;/a&gt;&lt;/td&gt;&#xD;
&lt;td align="center"&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/1/11.html"&gt;&lt;u&gt;11&lt;/u&gt;&lt;/a&gt;&lt;/td&gt;&#xD;
&lt;td align="center"&gt;12&lt;/td&gt;&#xD;
&lt;td align="center"&gt;13&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/1/14.html"&gt;&lt;u&gt;14&lt;/u&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  align="center"&gt;15&lt;/td&gt;&#xD;
&lt;td align="center"&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/1/16.html"&gt;&lt;u&gt;16&lt;/u&gt;&lt;/a&gt;&lt;/td&gt;&#xD;
&lt;td align="center"&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/1/17.html"&gt;&lt;u&gt;17&lt;/u&gt;&lt;/a&gt;&lt;/td&gt;&#xD;
&lt;td align="center"&gt;18&lt;/td&gt;&#xD;
&lt;td align="center"&gt;19&lt;/td&gt;&#xD;
&lt;td align="center"&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/1/20.html"&gt;&lt;u&gt;20&lt;/u&gt;&lt;/a&gt;&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/1/21.html"&gt;&lt;u&gt;21&lt;/u&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  align="center"&gt;22&lt;/td&gt;&#xD;
&lt;td align="center"&gt;23&lt;/td&gt;&#xD;
&lt;td align="center"&gt;24&lt;/td&gt;&#xD;
&lt;td align="center"&gt;25&lt;/td&gt;&#xD;
&lt;td align="center"&gt;26&lt;/td&gt;&#xD;
&lt;td align="center"&gt;27&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;28&lt;/td&gt;&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td  align="center"&gt;29&lt;/td&gt;&#xD;
&lt;td align="center"&gt;30&lt;/td&gt;&#xD;
&lt;td align="center"&gt;31&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;1&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;2&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;3&lt;/td&gt;&#xD;
&lt;td  align="center"&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&#xD;
&lt;div id="leftcontentcontainer"&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;搜索&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="widget_my_zzk" &gt;&lt;input onkeydown="return zzk_go_enter(event);" id="q" &gt;&amp;nbsp;&lt;input id="btnZzk"  onclick="zzk_go()" value="找找看" type="button"&gt;&lt;/div&gt;&#xD;
&lt;div id="SingleColumn1_ctl00_widget_my_google" &gt;&lt;input onkeydown="return google_go_enter(event)" id="google_q"  name="google_q"&gt;&amp;nbsp;&lt;input  onclick="google_go()" value="谷歌搜索" type="button"&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;常用链接&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;&lt;a id="SingleColumn1_ctl01_rptMainLinks_lnkLinkItem_0" href="http://www.cnblogs.com/netxiaochong/MyPosts.html"&gt;我的随笔&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a id="SingleColumn1_ctl01_rptMainLinks_lnkLinkItem_1" href="http://www.cnblogs.com/netxiaochong/MyComments.html"&gt;我的评论&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a id="SingleColumn1_ctl01_rptMainLinks_lnkLinkItem_2" title="我发表过评论的随笔" href="http://www.cnblogs.com/netxiaochong/OtherPosts.html"&gt;我的参与&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a id="SingleColumn1_ctl01_rptMainLinks_lnkLinkItem_3" href="http://www.cnblogs.com/netxiaochong/RecentComments.html"&gt;最新评论&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a id="SingleColumn1_ctl01_rptMainLinks_lnkLinkItem_4" href="http://www.cnblogs.com/netxiaochong/tag/"&gt;我的标签&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
&lt;div style="display: none" id="itemListLin_con"&gt;&#xD;
&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;最新随笔&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html"&gt;1. 数据访问层DAL的再次重构_3&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328435.html"&gt;2. 数据访问层DAL的再次重构_2_模块的自定义设置节&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/20/2328315.html"&gt;3. 数据访问层DAL的再次重构_1_建库表存储过程&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/17/2324539.html"&gt;4. ObjectDataSource的分页实现&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/16/2323968.html"&gt;5. 界面层UI实现过程(Web版)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/14/2322349.html"&gt;6. 界面层UI实现过程(桌面版)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/11/2319117.html"&gt;7. 业务逻辑层BLL实现过程&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/10/2318119.html"&gt;8. 数据访问层DAL实现过程&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/08/2316355.html"&gt;9. C#《大话设计模式》推荐&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/08/2316293.html"&gt;10. kindeditor的afterChange(asp.net应用)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;随笔分类&lt;span style="font-size: 11px; font-weight: normal"&gt;(26)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;&lt;a id="SingleColumn1_Categories_CatList_LinkList_0_Link_0" href="http://www.cnblogs.com/netxiaochong/category/343190.html"&gt;ASP.NET(24)&lt;/a&gt; &lt;a id="SingleColumn1_Categories_CatList_LinkList_0_RssLink_0" onclick="return open_link('http://www.cnblogs.com/netxiaochong/category/343190.html/rss');" href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html#"&gt;(rss)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a id="SingleColumn1_Categories_CatList_LinkList_0_Link_1" href="http://www.cnblogs.com/netxiaochong/category/348119.html"&gt;设计模式(2)&lt;/a&gt; &lt;a id="SingleColumn1_Categories_CatList_LinkList_0_RssLink_1" onclick="return open_link('http://www.cnblogs.com/netxiaochong/category/348119.html/rss');" href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html#"&gt;(rss)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;随笔档案&lt;span style="font-size: 11px; font-weight: normal"&gt;(25)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;&lt;a id="SingleColumn1_Categories_CatList_LinkList_1_Link_0" href="http://www.cnblogs.com/netxiaochong/archive/2012/01.html"&gt;2012年1月 (12)&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a id="SingleColumn1_Categories_CatList_LinkList_1_Link_1" href="http://www.cnblogs.com/netxiaochong/archive/2011/12.html"&gt;2011年12月 (13)&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;相册&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li&gt;&lt;a id="SingleColumn1_Categories_CatList_LinkList_2_Link_0" href="http://www.cnblogs.com/netxiaochong/gallery/343233.html" rel="nofollow"&gt;asp.net相册&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;积分与排名&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&lt;li &gt;积分 - 6218 &lt;/li&gt;&lt;li &gt;排名 - 11671 &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;最新评论&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="RecentCommentsBlock"&gt;&#xD;
&lt;ul&gt;&lt;li &gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328435.html#2297257"&gt;1. Re:数据访问层DAL的再次重构_2_模块的自定义设置节&lt;/a&gt;&lt;/li&gt;&lt;li &gt;谢谢，对DAL更清楚了，节日快乐！&lt;/li&gt;&lt;li &gt;--wosingren&lt;/li&gt;&lt;li &gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/17/2324539.html#2296000"&gt;2. Re:ObjectDataSource的分页实现&lt;/a&gt;&lt;/li&gt;&lt;li &gt;&lt;a title="查看所回复的评论" href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328595.html#2295676"&gt;@&lt;/a&gt;孙长宇&lt;br /&gt;谢谢！已经改正！&lt;br /&gt;感谢提醒！^_^&lt;/li&gt;&lt;li &gt;--net小虫&lt;/li&gt;&lt;li &gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/16/2323968.html#2295919"&gt;3. Re:界面层UI实现过程(Web版)&lt;/a&gt;&lt;/li&gt;&lt;li &gt;哥们，虽然很认真，但是很快会忘的，还是要注重代码能力&lt;/li&gt;&lt;li &gt;--william.chen2011&lt;/li&gt;&lt;li &gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/17/2324539.html#2295676"&gt;4. Re:OjbectDataSource的分页实现&lt;/a&gt;&lt;/li&gt;&lt;li &gt;标题的&amp;#8220;OjbectDataSource&amp;#8221;是&amp;#8220;ObjectDataSource&amp;#8221;吧。&lt;/li&gt;&lt;li &gt;--孙长宇&lt;/li&gt;&lt;li &gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/16/2323968.html#2295013"&gt;5. Re:界面层UI实现过程(Web版)&lt;/a&gt;&lt;/li&gt;&lt;li &gt;已经mvc3很久了，有时间不妨研究下，很好用。&lt;/li&gt;&lt;li &gt;--玻璃鱼儿&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;阅读排行榜&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="TopViewPostsBlock"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/14/2322349.html"&gt;1. 界面层UI实现过程(桌面版)(2064)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/10/2318119.html"&gt;2. 数据访问层DAL实现过程(1908)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/16/2323968.html"&gt;3. 界面层UI实现过程(Web版)(1679)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/11/2319117.html"&gt;4. 业务逻辑层BLL实现过程(1524)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/17/2324539.html"&gt;5. ObjectDataSource的分页实现(690)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;评论排行榜&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="TopFeedbackPostsBlock"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/10/2318119.html"&gt;1. 数据访问层DAL实现过程(9)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/14/2322349.html"&gt;2. 界面层UI实现过程(桌面版)(7)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/16/2323968.html"&gt;3. 界面层UI实现过程(Web版)(6)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/08/2316355.html"&gt;4. C#《大话设计模式》推荐(2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/17/2324539.html"&gt;5. ObjectDataSource的分页实现(2)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;div &gt;&#xD;
&lt;h3 &gt;推荐排行榜&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="TopDiggPostsBlock"&gt;&#xD;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/14/2322349.html"&gt;1. 界面层UI实现过程(桌面版)(6)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/16/2323968.html"&gt;2. 界面层UI实现过程(Web版)(4)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/10/2318119.html"&gt;3. 数据访问层DAL实现过程(4)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/17/2324539.html"&gt;4. ObjectDataSource的分页实现(2)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cnblogs.com/netxiaochong/archive/2012/01/21/2328435.html"&gt;5. 数据访问层DAL的再次重构_2_模块的自定义设置节(2)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/jiangguanghe/aggbug/2328618.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jiangguanghe/archive/2012/01/21/2328618.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jiangguanghe/archive/2011/03/16/1986189.html</id><title type="text">Razor 的详细介绍</title><summary type="text">Razor 的详细介绍 http://msdn.microsoft.com/zh-cn/library/ff849693.aspx</summary><published>2011-03-16T08:34:00Z</published><updated>2011-03-16T08:34:00Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangguanghe/archive/2011/03/16/1986189.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/archive/2011/03/16/1986189.html"/><content type="html">&lt;a href="http://msdn.microsoft.com/zh-cn/library/ff849693.aspx"&gt;Razor 的详细介绍 http://msdn.microsoft.com/zh-cn/library/ff849693.aspx&lt;/a&gt;&lt;img src="http://www.cnblogs.com/jiangguanghe/aggbug/1986189.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jiangguanghe/archive/2011/03/16/1986189.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jiangguanghe/archive/2010/09/29/1838765.html</id><title type="text">腾讯正式通过QQ客服端反击360---推送QQ电脑管家</title><summary type="text">腾讯在也不能容忍360的&amp;#8220;胡作非为&amp;#8221;了，正式拿出了QQ的杀手锏---QQ客服端来推送他的QQ电脑软件管家产品来对抗360管家同时向几亿个个QQ客服端发送这种有诱导性的安装，绝对能在瞬间把QQ的安装量提升到一亿级别看图</summary><published>2010-09-29T11:56:00Z</published><updated>2010-09-29T11:56:00Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangguanghe/archive/2010/09/29/1838765.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/archive/2010/09/29/1838765.html"/><content type="html">&lt;p&gt;腾讯在也不能容忍360的&amp;#8220;胡作非为&amp;#8221;了，正式拿出了QQ的杀手锏---QQ客服端来推送他的QQ电脑软件管家产品来对抗360管家&lt;/p&gt;&lt;p&gt;同时向几亿个个QQ客服端发送这种有诱导性的安装，绝对能在瞬间把QQ的安装量提升到一亿级别&lt;/p&gt;&lt;p&gt;看图&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/jiangguanghe/QQ%E6%88%AA%E5%9B%BE%E6%9C%AA%E5%91%BD%E5%90%8D.png" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jiangguanghe/aggbug/1838765.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jiangguanghe/archive/2010/09/29/1838765.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jiangguanghe/archive/2010/09/12/1824504.html</id><title type="text">MVC Routing 奇怪现象</title><summary type="text">今天搞了一下MVC，看到Routing的配置都是写在Global.asax文件里，心里想了想，如果很多的路径的话，那Global.asax文件不会是很大很大，所以就想想能不能把路径之类的写到一个配置文件里，每次只需要修改一下配置文件就可以了。按着这个思路去网上找了一下，果然找到了一个解决方案，是老外写的MvcXmlRouting，拿来用了一下，路由倒是配置到了RouteConfiguration....</summary><published>2010-09-12T10:31:00Z</published><updated>2010-09-12T10:31:00Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangguanghe/archive/2010/09/12/1824504.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/archive/2010/09/12/1824504.html"/><content type="html">&lt;p&gt;今天搞了一下MVC，看到Routing的配置都是写在Global.asax文件里，心里想了想，如果很多的路径的话，那Global.asax文件不会是很大很大，所以就想想能不能把路径之类的写到一个配置文件里，每次只需要修改一下配置文件就可以了。按着这个思路去网上找了一下，果然找到了一个解决方案，是老外写的&lt;a title="MvcXmlRouting" href="http://files.cnblogs.com/jiangguanghe/MvcXmlRouting.rar"&gt;&lt;font  color="#000000"&gt;MvcXmlRouting&lt;/font&gt;&lt;/a&gt;，拿来用了一下，路由倒是配置到了RouteConfiguration.config文件里，具体做法如下：&lt;/p&gt;&#xD;
&lt;p&gt;先在web.config文件里加上配置&lt;span  style="font-family: 'Courier New'; font-size: 13px; "&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;section&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="RouteConfiguration"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;type&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="MvcXmlRouting.MvcRouteConfigurationSection"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&#xD;
&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&#xD;
&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;RouteConfiguration&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;configSource&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="RouteConfiguration.config"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;然后在Global.asax文件里用下面这个方法替换到原来的配置方法&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('45df3842-340e-44ed-a738-82669ca8b8ad')"&gt;&lt;img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"  id="code_img_opened_7b44a0b9-1a35-4e5d-98dd-c39e40bd5a22" onclick="cnblogs_code_hide('7b44a0b9-1a35-4e5d-98dd-c39e40bd5a22',event)" style="display:none"&gt;&lt;div id="cnblogs_code_open_7b44a0b9-1a35-4e5d-98dd-c39e40bd5a22" &gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;RouteConfiguration&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ignore&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt;忽略对.axd文件的Route，直接处理&lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;add&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;url&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="{resource}.axd/{*pathInfo}"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;constraints&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;add&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="resource"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="\w+"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;constraints&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;add&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ignore&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;map&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;使用频率越高的路由要放到越前面！！！性能&lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;首页&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;route&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Home"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;url&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=""&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;controller&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Home"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;action&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Index"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;route&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;重置密码&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;route&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="RecoverPassword"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;url&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="RecoverPassword/{code}/{pageIndex}"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;controller&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="User"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;action&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="RecoverPassword"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;parameters&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000;"&gt;参数配置&amp;nbsp;w是字符串,d是数字&lt;/span&gt;&lt;span style="color: #008000;"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;add&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="code"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=""&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;constraint&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="\w+"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;add&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="pageIndex"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="1"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;constraint&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="\d+"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;parameters&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;route&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;map&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;RouteConfiguration&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;接下来就可以像正常那样输入地址访问了。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;不过我现在遇到了一个问题，就是在处理Ajax请求的时候，他往往报路劲不可访问的错误。在正常的配置路由时对于AJAX的请求路径是不需要配置的，按照老外的说明文档也是说不需要配置的，可是现在就是出现了路径不可访问的错误，找了老半天也没能找出原因来，不知道哪位同学能解决这个问题&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;文章不才，发到首页，还请手下留情&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jiangguanghe/aggbug/1824504.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jiangguanghe/archive/2010/09/12/1824504.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jiangguanghe/archive/2010/08/09/1795671.html</id><title type="text">中国草根互联网的终结者</title><summary type="text">首先给一条备案的消息：6月10日工信部发布关于网站备案管理系统升级的通告，通告称7月25日现有的备案系统将停止使用，6月20日起，备案系统将进行升级，原有备案方式将一律无法通过。而在新的备案系统里需要提交的备案资料见如下：　　一、主办单位营业执照原件扫描件　　二、主办单位法人有效证件原件扫描件　　三、信息安全管理协议书　　四、网站备案信息真实性核验单扫描件　　五、域名证书扫描件　　六、 法人照片就...</summary><published>2010-08-09T05:30:00Z</published><updated>2010-08-09T05:30:00Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangguanghe/archive/2010/08/09/1795671.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/archive/2010/08/09/1795671.html"/><content type="html">&lt;p&gt;首先给一条备案的消息：&lt;span  style="font-family: verdana, arial, sans-serif; line-height: 18px; font-size: 12pt; "&gt;6月10日工信部发布关于&lt;a href="http://www.gohao8.cn/" target="_self" style="text-decoration: none; color: #29568f; "&gt;&lt;span style="font-size: 12pt; "&gt;网站备案&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span  style="font-family: verdana, arial, sans-serif; line-height: 18px; font-size: 12pt; "&gt;管理系统升级的通告，通告称7月25日现有的备案系统将停止使用，&lt;/span&gt;&lt;span style="font-size: 14pt; "&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span  style="font-family: verdana, arial, sans-serif; line-height: 18px; font-size: 12pt; "&gt;6月20日起，备案系统将进行升级，原有备案方式将一律无法通过。&lt;/span&gt;&lt;span style="font-size: 12pt; "&gt;而在新的备案系统里需要提交的备案资料见如下：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;一、主办单位营业执照原件扫描件&lt;/p&gt;&lt;p&gt;二、主办单位法人有效证件原件扫描件&lt;/p&gt;&lt;p&gt;三、信息安全管理协议书&lt;/p&gt;&lt;p&gt;四、网站备案信息真实性核验单扫描件&lt;/p&gt;&lt;p&gt;五、域名证书扫描件&lt;/p&gt;&lt;p&gt;六、 法人照片&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;就上面这些资料都让人头疼了，像草根们一般都不会成立一家公司去运营网站，一般都是兼职 ，所以上面这个门槛直接PASS掉了一部分人。&lt;/p&gt;&lt;p&gt;还有现在国家对&amp;#8220;黄赌&amp;#8221;的打击，逼得网站运营者不得不花更多的时间来处理内容审核，甚至得招聘专职人员来审核内容。&lt;/p&gt;&lt;p&gt;前不久又出了一个对侵权网站的打击政策 ，一旦发现该网站侵权，就直接提交给三大网络运营商，把你直接从中国互联网中给屏蔽掉。&lt;/p&gt;&lt;p&gt;而&amp;#8220;侵权&amp;#8221;本身又是一个大而广的概念，可以说有视频侵权，图片侵权，文章侵权等等，而这三样基本上就是构成互联网的三大基石。&lt;/p&gt;&lt;p&gt;在这样的环境下草根们又有何能力去化解这些问题，特别是单枪匹马的那种草根，可以说无法解决上面的问题。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;上面这些是政策问题。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;而下面这里就是中国互联网社会的问题了。&amp;nbsp;&lt;/p&gt;&lt;p&gt;在中国互联网里做创新很难，即使你创新了，成为了某某第一个，但是这个第一并不能保证你能活下来，中国互联网的模仿者太强大的，他们拥有雄厚的实力，各个都像一只狼，都瞪大眼睛盯着前面开路的小羊，一旦发现了小羔羊开出的路前面有肉吃，&lt;/p&gt;&lt;p&gt;他们就会疯狂的奔向小羔羊毫不留情的咬碎它，能将它吃得连毛都不剩，吃饱之后继续前进，急切的将前面大片大片的土地归于自己的领土，这能让以前的开拓者和后来的跟随者连站脚的地方都没有！&amp;nbsp;&lt;/p&gt;&lt;p&gt;即使草根们不去做创新，那就现在的互联网来说各个行业竞争都已是非常激烈了，哪里都是刀光剑影的，你站着进去能不能躺着出来还是一个问号。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;市场是如此的激烈，政策又是如此的严厉，身为在风雨中飘摇的草根们该何去何从，难道终结者从2018提前到了2010吗？&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jiangguanghe/aggbug/1795671.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jiangguanghe/archive/2010/08/09/1795671.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jiangguanghe/archive/2010/03/23/1692222.html</id><title type="text">是谷歌把自己逼进死胡同，不是中国政府的错</title><summary type="text">谷歌退出中国的风波远比笔者想象得要长久。先是该公司意外地在其官方博客上宣布或将全面撤离中国市场，理由是不愿再遵守中国对信息的监管制度。随后是美国政府的质疑和西方一些媒体的炒作，谷歌与中国政府陷入谈判困局。 近期，又有消息称谷歌可能会在几个月内采取行动，关闭旗下的中文搜索引擎，谷歌公司高层近日也在美国国会表态，称退出中国已经基本确定，谷歌退出中国似乎已成定局。 从事态的发展顺序上看，商业问题政治化的...</summary><published>2010-03-23T01:39:00Z</published><updated>2010-03-23T01:39:00Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangguanghe/archive/2010/03/23/1692222.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/archive/2010/03/23/1692222.html"/><content type="html">谷歌退出中国的风波远比笔者想象得要长久。先是该公司意外地在其官方博客上宣布或将全面撤离中国市场，理由是不愿再遵守中国对信息的监管制度。随后是美国政府的质疑和西方一些媒体的炒作，谷歌与中国政府陷入谈判困局。 &#xD;
&lt;p&gt;近期，又有消息称谷歌可能会在几个月内采取行动，关闭旗下的中文搜索引擎，谷歌公司高层近日也在美国国会表态，称退出中国已经基本确定，谷歌退出中国似乎已成定局。 &#xD;
&lt;p&gt;从事态的发展顺序上看，商业问题政治化的迹象已然十分清晰。笔者原本以为谷歌事件只为炒作宣传，若单是如此，中国一些网民第一时间给予的关注目光也确实说明，谷歌通过这个炒作获得了一定的成效。然而，此时谷歌欲走还留，称还在与中国政府官员有关网络审查问题进行谈判。 &#xD;
&lt;p&gt;谷歌也许没有意识到，不论在中国，或是其他的任何国家，遵守当地的法律法规是必须的。中国的网络审查制度有其自身的要求，外企在中国就应当服从这样的制度安排。在一个国家的法律与制度面前，谷歌是没有权力站在一个对等谈判者的地位上的，就像中海油不能要求美国国会改变美国的相关资产收购法律，从而让自己可以成功收购尤尼科石油公司一样。 &#xD;
&lt;p&gt;而此时美国政府就谷歌事件继续采取强硬态度，甚至有报道称美国政府拟将谷歌事件上诉到世界贸易组织。美国政府的态度让人不得不怀疑，谷歌退出中国的背后，到底有多少是商业问题，有多少是政治问题？谷歌与美国的安全机构合作姿态日益明显，在这样的态势下，谷歌退出中国的表演，就越来越让中国网民失望了。 &#xD;
&lt;p&gt;一个公司挑战一个国家的权威，在什么时代才会成功？历史表明，只有在100多年前的殖民地、半殖民地时期，才会出现这样的先例。比如英国的东印度公司就曾压制了印度的主权。在现在这个时代，谷歌想要以威胁来达到目的，只能说是看错了时代，看错了中国。笔者相信，中国政府不可能因为谷歌威胁退出而为某一家互联网公司打开绿灯，或者如有人建议的那样，在中国的某些地区单独为谷歌开放绿灯，让谷歌可以不审查其搜索结果。 &#xD;
&lt;p&gt;目前，从相关新闻的评论上可以看出，中国网民的态度随着谷歌退出事件的发展在大幅逆转。很多网友表示，如果用退出来威胁中国政府的话，那么就请退出吧。 &#xD;
&lt;p&gt;从实际情况来看，国内竞争对手正巴不得谷歌退出后获得更大的市场机会，而网民对谷歌的一再胁迫感到厌烦，在谷歌用夸张的&amp;#8220;99%的可能&amp;#8221;来描述其退出决定后，也丝毫得不到国内网民的响应。而中国政府也绝对不可能接受一个超越中国主权的外国互联网公司。因此，谷歌目前只能靠一些外媒的支持来增添信心。如美联社16日竟然声称，&amp;#8220;没有谷歌的中国，只能是两败俱伤。&amp;#8221; &#xD;
&lt;p&gt;也许谷歌退出中国市场，确实会给一些网民带来不便，然而伤得最重的将是谷歌。谷歌失掉的不仅仅是眼下的30%的中国市场，还有未来的市场机遇。 &#xD;
&lt;p&gt;当前，中国的迅速崛起引来世界的关注，中国是在金融危机的冲击下惟一保持快速增长的世界经济大国，各国资本都想到中国来淘金。而为了配合美国近来对中国的各种打压政策，谷歌竟不惜逆潮流而动。 &#xD;
&lt;p&gt;可以说，谷歌是自己将自己逼到了死胡同：继续留在中国吧，则因为自己早早放了狠话而会大失颜面；若真的退出中国，则又是公司发展战略的大失败&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jiangguanghe/aggbug/1692222.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jiangguanghe/archive/2010/03/23/1692222.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jiangguanghe/archive/2010/03/17/1688269.html</id><title type="text">印度的美女和软件咱不得不服--&amp;gt;不服气得你就进来看</title><summary type="text">印度国宝级的美女&amp;#8220;妮哈-达尔维&amp;#8221; 不知道在中国有没有给一个美女一个&amp;#8220;国宝级&amp;#8221;的称号，也不知道谁能当此大任。总之我就没听说过&amp;#8220;中国国宝级美女&amp;#8221;，既然我们要作为大国，那也不能在这里输给啊三啊给各位天天加班的弟兄们提提神接图:</summary><published>2010-03-17T08:47:00Z</published><updated>2010-03-17T08:47:00Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangguanghe/archive/2010/03/17/1688269.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/archive/2010/03/17/1688269.html"/><content type="html">&lt;p&gt;印度国宝级的美女&lt;img src="file:///C:/Users/ADMINI%7E1/AppData/Local/Temp/moz-screenshot.png" alt="" /&gt;&amp;#8220;妮哈-达尔维&amp;#8221;&amp;nbsp;&amp;nbsp; 不知道在中国有没有给一个美女一个&amp;#8220;国宝级&amp;#8221;的称号，也不知道谁能当此大任。总之我就没听说过&amp;#8220;中国国宝级美女&amp;#8221;，既然我们要作为大国，那也不能在这里输给啊三啊&lt;/p&gt;&lt;p&gt;给各位天天加班的弟兄们提提神&lt;/p&gt;&lt;p&gt;接图:&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/jiangguanghe/168_30979_759840.jpg" width="600" height="813" /&gt;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/jiangguanghe/100104155769871.jpg" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/jiangguanghe/20091230111829796.jpg" width="550" height="707" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/jiangguanghe/eb0912300029.jpg" width="600" height="811" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/jiangguanghe/eb0912300032.jpg" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jiangguanghe/aggbug/1688269.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jiangguanghe/archive/2010/03/17/1688269.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jiangguanghe/archive/2009/09/06/1561325.html</id><title type="text">老板的愿望VS程序员的无奈</title><summary type="text">今天本来是礼拜天休息日，一个美好的周末，可全给这该死的加班给冲坏了。加班本来是一种不太正常的工作行为，加班意味着什么，意味着你这个人工作能力的高低，什么事情都得加班才能搞完，说明你的能力有问题；从公司层面上来讲，如果凡事也都要加班那就意味着公司效率有问题。为什么每做一个项目都要死去活来的加班，老板也许从来不考虑过这个问题，因为程序员的加班是免费的。程序员也很少去考虑过这个问题，因为一大把的事情等着...</summary><published>2009-09-06T07:41:00Z</published><updated>2009-09-06T07:41:00Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangguanghe/archive/2009/09/06/1561325.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/archive/2009/09/06/1561325.html"/></entry><entry><id>http://www.cnblogs.com/jiangguanghe/archive/2009/08/20/1550467.html</id><title type="text">将绝对路径变成URL路径（原创）</title><summary type="text">今天做了一个将绝对路径转换成URL路径的功能，在网上找了一下，一大堆代码但是这些代码的功能都是&amp;#8220;将绝对路径转换成相对路径&amp;#8221;，并不能达到我要的效果，我要的效果是&amp;#8220;将绝对路径转换成URL路径&amp;#8221;，该路径必须是一个完整的HTTP-URL路径废话少说，贴代码：[代码]</summary><published>2009-08-20T03:25:00Z</published><updated>2009-08-20T03:25:00Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangguanghe/archive/2009/08/20/1550467.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/archive/2009/08/20/1550467.html"/></entry><entry><id>http://www.cnblogs.com/jiangguanghe/archive/2009/08/12/1544557.html</id><title type="text">通过面试让我来谈谈我对中国软件的认识</title><summary type="text">从面试中谈看中国式的IT创业-----面试了一段时间，面过几个不同的公司，有纯软件开发的，有制造业的，有搞游戏开发，有搞培训的，形形色色，一下子接触了不同种类的公司，对中国的IT有了一个新的认识，现在拿出来给大家分享一下</summary><published>2009-08-12T08:37:00Z</published><updated>2009-08-12T08:37:00Z</updated><author><name>独臂侠</name><uri>http://www.cnblogs.com/jiangguanghe/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jiangguanghe/archive/2009/08/12/1544557.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jiangguanghe/archive/2009/08/12/1544557.html"/></entry></feed>
