<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Kingthy's blog</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/28989/rss</id><updated>2011-11-13T09:42:51Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/28989/rss"/><entry><id>http://www.cnblogs.com/kingthy/archive/2011/09/14/2176089.html</id><title type="text">我的KT库之----与VT的结合</title><summary type="text">本节介绍KT如果与VTemplate模板引擎的结合使用.</summary><published>2011-09-14T05:15:00Z</published><updated>2011-09-14T05:15:00Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kingthy/archive/2011/09/14/2176089.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/archive/2011/09/14/2176089.html"/><content type="html">&#xD;
&lt;p&gt;&lt;strong&gt;了解或者认识KT：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html"&gt;http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;在项目中如何使用KT？&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;KT是一个库，所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。 &lt;/p&gt;  &lt;p&gt;本节将介绍大家如何将KT与VT结合进行Web项目的开发。KT里的与VT相关的操作对象存放于在&amp;#8220;KT.Framework.Web&amp;#8220;下，当你已在你的项目里引用了KT库后，写下以下代码就可以使用了。&lt;/p&gt;  &lt;pre&gt;using KT.Framework.Web;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;什么是VT？&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;VT是VTemplate模板引擎的简称，你可以从下面链接里了解此模板引擎的相关资料&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://www.cnblogs.com/kingthy/archive/2009/08/17/net-vtemplate.html" href="http://www.cnblogs.com/kingthy/archive/2009/08/17/net-vtemplate.html"&gt;http://www.cnblogs.com/kingthy/archive/2009/08/17/net-vtemplate.html&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;KT里的VTemplatePage对象&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在Web Form页面开发，我们很多页面都是基于System.Web.UI.Page这个对象，这是因为Page对象帮我们实现了IHttpHandler接口，以便我们的&amp;#8220;.aspx&amp;#8221;页面能处理一个HTTP会话，并且对HTTP会话进行了&amp;#8220;事件包装&amp;#8221;，使我们能在开发中使用到Web Form里的各种事件驱动。如果我们在项目页面中直接使用VT进行处理数据，那么我们可以抛弃掉Page这个&amp;#8220;笨重&amp;#8221;的东西，因为我们不再需要那些WEB控件，也不再需要Page中那过于&amp;#8220;复杂&amp;#8221;的事件模型。我们只需要一个简单的&amp;#8220;事件模型&amp;#8221;即可，如下：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kingthy/201109/201109141315169055.png"&gt;&lt;img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="e" border="0" alt="e" src="http://images.cnblogs.com/cnblogs_com/kingthy/201109/201109141315179645.png" width="364" height="214" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;（当然，实际上是不可能就这么简单的&lt;img  alt="微笑" src="http://images.cnblogs.com/cnblogs_com/kingthy/201109/201109141315174661.png" /&gt;)&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;VTemplatePage对象则是对上面流程的实现，它也是基于IHttpHandler接口的实现。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;VTemplatePage对象的事件流程&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kingthy/201109/201109141315184171.png"&gt;&lt;img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="ee" border="0" alt="ee" src="http://images.cnblogs.com/cnblogs_com/kingthy/201109/201109141315189777.png" width="524" height="474" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;上面中的各个事件方法，在VTemplatePage里都是以虚方法实现的，因此在开发时，我们可以根据需要重载上面里的任一个事件方法，以便在某个阶段做额外的处理，比如：在&amp;#8220;OnInit&amp;#8220;事件里我们做用户权限判断处理，如果当前用户没有访问权限我们就可以拒绝他继续访问页面。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;VTemplatePage对象特别的对以下几个事件方法进行了实现处理，以便我们开发时能够更快速开发。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;OnProcessAjaxHandler&lt;/font&gt; ： Ajax委托处理事件函数，用于处理Ajax方法。（在下面会详细对此介绍）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;OnLoad&lt;/font&gt; ： 页面装载事件函数，此方法衍生一个抽象方法: &lt;font color="#9b00d3"&gt;InitPageTemplate&lt;/font&gt;， 使我们在开发时只关注此抽象方法的实现即可。并且此事件方法还增加了一个简单的缓存处理。（关于缓存见下面的LoadPageCache与SavePageCache方法解释）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;OnRender&lt;/font&gt; : 呈现页面数据事件函数，用于呈现模板数据并Response回客户端。此事件方法增加了简单缓存的处理功能。（关于缓存见下面的LoadPageCache与SavePageCache方法解释）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在了解VTemplatePage对象前，让我们先了解另外一个对象。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;站点配置对象WebSiteConfiguration&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;此配置对象用于设置站点项目的参数，比如设置站点项目路径信息、页面模板的参数信息、站点上传文件设置参数等数据。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;此对象可以映射为某个XML配置文件进行管理。如下面的XML示例：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;xml &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;" &lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;utf-8&lt;/span&gt;" &lt;span style="color: blue;"&gt;?&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;configuration&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;  &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt;设置站点的域名,如: "http://www.host.com/"。如果为空则默认&lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;HostName&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;HostName&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
  &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt;设置站点所在的根目录,默认为: "/"&lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;RootPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;/&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;RootPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
  &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt;设置站点的绝对路径地址,如: "c:\wwwroot\web\"， 如果为空则默认&lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;AppPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;AppPath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
  &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt;设置站点模板文件存放的目录,默认为: "template/default/"&lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;TemplatePath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;template/default/&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;TemplatePath&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
  &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt;设置站点模板文件的扩展名,如: ".html"&lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;TemplateFileExt&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;![CDATA[&lt;/span&gt;&lt;span style="color: gray;"&gt;.html&lt;/span&gt;&lt;span style="color: blue;"&gt;]]&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;TemplateFileExt&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
  &amp;lt;!--&lt;/span&gt;&lt;span style="color: green;"&gt;设置站点模板文件的编码,如: "gb2312"&lt;/span&gt;&lt;span style="color: blue;"&gt;--&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;TemplateFileCharset&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;utf-8&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;TemplateFileCharset&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;configuration&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;font color="#a5a5a5"&gt;如需更详细的可以查看KT项目doc目录下的website.default.config配置文件。&lt;/font&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在使用时，直接调用From&amp;lt;T&amp;gt;方法获取配置对象。如下：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration &lt;/span&gt;config = &lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration&lt;/span&gt;.From&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"website.config"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在实际项目开发时，可以根据需要对此对象进行扩展，以增加其它站点参数。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;VTemplatePage的使用&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;A、VTemplatePage对象的属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;Context&lt;/font&gt; : 返回当前的System.Web.&lt;font color="#4f81bd"&gt;HttpContext&lt;/font&gt;对象&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;Request&lt;/font&gt; : 返回当前的System.Web.&lt;font color="#4f81bd"&gt;HttpRequest&lt;/font&gt;对象&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;Response&lt;/font&gt; : 返回当前的System.Web.&lt;font color="#4f81bd"&gt;HttpResponse&lt;/font&gt;对象&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4、&lt;font color="#9b00d3"&gt;Server&lt;/font&gt; : 返回当前的System.Web.&lt;font color="#4f81bd"&gt;HttpServerUtility&lt;/font&gt;对象&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5、&lt;font color="#9b00d3"&gt;Session&lt;/font&gt; : 返回当前的System.Web.&lt;font color="#4f81bd"&gt;HttpSessionState&lt;/font&gt;对象&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;6、&lt;font color="#9b00d3"&gt;Application&lt;/font&gt; : 返回当前的System.Web.&lt;font color="#4f81bd"&gt;HttpApplicationState&lt;/font&gt;对象&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;7、&lt;font color="#9b00d3"&gt;Document&lt;/font&gt;&amp;nbsp; : 返回或设置当前的&lt;font color="#4f81bd"&gt;TemplateDocument&lt;/font&gt;对象&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;8、&lt;font color="#9b00d3"&gt;DocumentConfig&lt;/font&gt; ： 返回当前的&lt;font color="#4f81bd"&gt;TemplateDocumentConfig&lt;/font&gt;对象，用于设置模板文档的相关解析配置。这是一个虚属性，开发中可根据需要重写此属性。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;9、&lt;font color="#9b00d3"&gt;DocumentIsLoaded&lt;/font&gt; : 返回判断&lt;font color="#9b00d3"&gt;Document&lt;/font&gt;是否已装载，即模板文档是否已装载&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;10、&lt;font color="#9b00d3"&gt;IsPostBack&lt;/font&gt; : 返回当前页面是否是以POST方式访问&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;11、&lt;font color="#9b00d3"&gt;Configuration&lt;/font&gt; ：返回当前页面站点的&lt;font color="#4f81bd"&gt;WebSiteConfiguration&lt;/font&gt;对象，也就是站点的配置参数。此属性是一个抽象属性。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;12、&lt;font color="#9b00d3"&gt;PageCacheExpireTime&lt;/font&gt; ： 返回当前页面的缓存过期时效(单位:秒钟,默认为1小时,如果小于等于0则不缓存)，此属性是一个虚属性，需要页面需要缓存功能，必须重写此属性&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;13、&lt;font color="#9b00d3"&gt;PageCacheFileName&lt;/font&gt; ： 返回当前页面的缓存文件绝对地址，此属性是一个虚属性，如果需要使用页面缓存则必须重写此属性并返回真实地址&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;B、VTemplatePage对象的方法&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;LoadTemplateFromFile&lt;/font&gt; ： 从模板文件里装载模板，调用此方法后，将会对&lt;font color="#9b00d3"&gt;Document&lt;/font&gt;属性进行实例化。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;LoadCurrentPageTemplate&lt;/font&gt; : 装载当前访问页面对应的模板。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;当前访问页面对应的模板文件地址由&lt;font color="#9b00d3"&gt;Configuration&lt;/font&gt;里的配置参数计算得出，比如&lt;font color="#9b00d3"&gt;Configuration&lt;/font&gt;的配置参数为上面的XML示例里的配置。如果当前的访问页面地址为&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;/user/profile.ashx&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;那么此页面对应的模板文件即为&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;/template/default/user/profile.html&lt;/pre&gt;&#xD;
&#xD;
&lt;pre &gt;而如果Configuration里配置RootPath为&amp;#8220;/apps/&amp;#8221;，那么如果访问地址为&lt;/pre&gt;&#xD;
&#xD;
&lt;pre &gt;/apps/user/profile.ashx&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;那么此页面对应的模板文件即为&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;/apps/template/default/user/profile.html&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;LoadPageCache&lt;/font&gt; ： 装载此页面的缓存。如果页面已重写了&lt;font color="#9b00d3"&gt;PageCacheExpireTime&lt;/font&gt;与&lt;font color="#9b00d3"&gt;PageCacheFileName&lt;/font&gt;两个属性，则此方法会判断&lt;font color="#9b00d3"&gt;PageCacheFileName&lt;/font&gt;文件是否存在，如果存在并且距上次更改时间还没有超出&lt;font color="#9b00d3"&gt;PageCacheExpireTime&lt;/font&gt;的设置时间间隔，则将会直接输出(Response)缓存文件里的数据。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4、&lt;font color="#9b00d3"&gt;SavePageCache&lt;/font&gt; : 保存当前的页面到缓存里。如果页面已重写了&lt;font color="#9b00d3"&gt;PageCacheExpireTime&lt;/font&gt;与&lt;font color="#9b00d3"&gt;PageCacheFileName&lt;/font&gt;两个属性，则此方法判断当前是否已装载了模板，如果是，则将模板数据解析到缓存文件里存储。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5、&lt;font color="#9b00d3"&gt;InitPageTemplate&lt;/font&gt; ： 初始化当前的页面模板。此方法是一个抽象方法，在OnLoad事件发生时被调用。此方法类似于Web Form里的Page_Load方法。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;C、VTemplate对象的简单开发示例&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;通过上面了解了VTemplatePage的属性与方法后，现在我们可以使用它来做页面开发了。下面跟我一步一步来做一个简单的开发示例&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、打开你的Visual Studio, 新建一个Web项目(Web Application或者Web Site项目都可以)，将KT库引入到您的项目里&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、在项目里新建一个&amp;#8220;一般处理程序&amp;#8221;页面，也就是&amp;#8220;.ashx&amp;#8221;页面。比如叫&amp;#8220;firstpage.ashx&amp;#8221;，确定后VS会帮我们生成一个".ashx&amp;#8221;与".ashx.cs&amp;#8221;文件。其中".ashx.cs&amp;#8221;文件里面的内容如下：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;firstpage 的摘要说明&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;firstpage &lt;/span&gt;: &lt;span style="color: rgb(43, 145, 175);"&gt;IHttpHandler&#xD;
&lt;/span&gt;{&#xD;
&#xD;
    &lt;span style="color: blue;"&gt;public void &lt;/span&gt;ProcessRequest(&lt;span style="color: rgb(43, 145, 175);"&gt;HttpContext &lt;/span&gt;context)&#xD;
    {&#xD;
        context.Response.ContentType = &lt;span style="color: rgb(163, 21, 21);"&gt;"text/plain"&lt;/span&gt;;&#xD;
        context.Response.Write(&lt;span style="color: rgb(163, 21, 21);"&gt;"Hello World"&lt;/span&gt;);&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: blue;"&gt;public bool &lt;/span&gt;IsReusable&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return false&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;注：对于使用&amp;#8220;一般处理程序.ashx&amp;#8221;页面，是因为上面所说的，我们不需要Page里的太过于&amp;#8220;复杂&amp;#8221;的事件模型，我们只需要简单的事件模型即可。经常有群友在群里说&amp;#8220;aspx比ashx好&amp;#8221;、&amp;#8220;为什么你用ashx，不用aspx呢？&amp;#8221;、&amp;#8220;VT能在aspx下用吗？&amp;#8221;等等问题，当你看到我这里的讲解时，我相信你的心里已有答案了吧？aspx与ashx没有谁比谁好，aspx可以说是为webform而生的，因为aspx里的事件模型就是为webform而做的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3、改写一下页面的.cs代码文件里的代码，比如将上面的代码改为如下&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;firstpage 的摘要说明&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;firstpage &lt;/span&gt;: &lt;span style="color: rgb(43, 145, 175);"&gt;VTemplatePage&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;初始化页面模板&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public override void &lt;/span&gt;InitPageTemplate()&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;this&lt;/span&gt;.LoadCurrentPageTemplate();&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;站点的配置&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public override &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration &lt;/span&gt;Configuration&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get &#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration&lt;/span&gt;.From&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"website.config"&lt;/span&gt;);&#xD;
        }&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;我们的页面继承于VTemplatePage对象，由于VTemplatePage对象是一个抽象对象，所以我们还需要实现其的一个抽象方法与一个抽象属性。其中在InitPageTemplate方法里我们调用LoadCurrentPageTemplate方法，装载当前页面对应的模板文件，在Configuration属性里返回当前项目站点的配置。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4、在站点目录下建立配置文件存放目录"config"，在上面代码里，我们的站点配置是从"website.config&amp;#8221;这个配置文件读取的，所以我们需要在配置文件目录建一个website.config文件并且配置好（我们可以直接拷贝VT项目里的"website.default.config&amp;#8221;示例文件）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5、在站点目录下建模板目录"template/default/&amp;#8221;（此目录路径由配置文件来决定），并在此目录一个模板文件"firstpage.html&amp;#8221;（模板文件的扩展名也是由配置文件决定）。示例模板：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: maroon;"&gt;DOCTYPE &lt;/span&gt;&lt;span style="color: red;"&gt;html PUBLIC &lt;/span&gt;&lt;span style="color: blue;"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt; &lt;/span&gt;KT与VT的结合 --  第一个页面 &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;link &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/css" &lt;/span&gt;&lt;span style="color: red;"&gt;rel&lt;/span&gt;&lt;span style="color: blue;"&gt;="stylesheet" &lt;/span&gt;&lt;span style="color: red;"&gt;href&lt;/span&gt;&lt;span style="color: blue;"&gt;="{$Page.TemplatePath}css/common.css" /&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;h4&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;KT与VT的结合 --  第一个页面&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;h4&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ol&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{$Page}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page.SitePath = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{$Page.SitePath}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page.SiteUrl = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{$Page.SiteUrl}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page.TemplatePath  = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{$Page.TemplatePath}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page.Request.Url  = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{$Page.Request.Url}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;当前服务器时间 = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;vt&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;serverdata &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="time" &lt;/span&gt;&lt;span style="color: red;"&gt;output&lt;/span&gt;&lt;span style="color: blue;"&gt;="true" /&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ol&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;br /&gt;&lt;p&gt;&lt;/p&gt;&#xD;
注：在调用LoadCurrentPageTemplate方法后，VTemplatePage对象会自动将以下4个变量赋值到模板文件里，也就是我们可以在模板文件里随时调用此4个变量对象。&#xD;
&#xD;
&#xD;
&#xD;
&lt;p&gt;A、Page变量 : 当前的页面对象，如上面的"firstpage&amp;#8221;对象&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;B、Page.SitePath变量： 当前的站点的根目录地址，此变量值由配置文件的RootPath参数决定。如&amp;#8220;/&amp;#8221;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;C、Page.SiteUrl变量： 当前的站点URL地址。如&amp;#8220;http://www.hostname.com/&amp;#8221;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;D、Page.TemplatePath 变量： 相对于当前站点根目录地址的模板路径地址，此变量值由配置文件的TemplatePath参数决定。如"/template/default/&amp;#8221;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;经过上面几步后，我们的项目可以编译运行了，结果如下面的运行示例截图&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kingthy/201109/201109141315195764.png"&gt;&lt;img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/kingthy/201109/201109141315205024.png" width="403" height="223" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;我们的模板与页面成功进行了&amp;#8220;绑定&amp;#8221;，后面要如何去做就是发挥你们的才智时间了&lt;img  alt="微笑" src="http://images.cnblogs.com/cnblogs_com/kingthy/201109/201109141315174661.png" /&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;D、VTemplatePage对象里的简单缓存功能的启用&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;VTemplatePage对象的缓存功能是默认是简单采用对比缓存文件的更改时间来维护缓存的变化（如果需要更复杂的缓存处理，则可以重写&lt;font color="#9b00d3"&gt;LoadPageCache&lt;/font&gt;与&lt;font color="#9b00d3"&gt;SavePageCache&lt;/font&gt;方法），如果需要在页面上启用简单缓存功能，则重写&lt;font color="#9b00d3"&gt;PageCacheExpireTime&lt;/font&gt;与&lt;font color="#9b00d3"&gt;PageCacheFileName&lt;/font&gt;两个属性即可，如下面对firstpage.ashx页面的修改&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;firstpage 的摘要说明&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;firstpage &lt;/span&gt;: &lt;span style="color: rgb(43, 145, 175);"&gt;VTemplatePage&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;初始化页面模板&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public override void &lt;/span&gt;InitPageTemplate()&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;this&lt;/span&gt;.LoadCurrentPageTemplate();&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;站点的配置&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public override &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration &lt;/span&gt;Configuration&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get &#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration&lt;/span&gt;.From&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"website.config"&lt;/span&gt;);&#xD;
        }&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;缓存1分钟后过期&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;protected override int &lt;/span&gt;PageCacheExpireTime&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return &lt;/span&gt;60;&#xD;
        }&#xD;
    }&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;缓存文件&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;protected override string &lt;/span&gt;PageCacheFileName&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.Configuration.ToAbsoluteAppPath(&lt;span style="color: rgb(163, 21, 21);"&gt;"cache/firstpage.html"&lt;/span&gt;);&#xD;
        }&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;经过上面修改后，我们的"firstpage.ashx&amp;#8221;页面在1分钟之内，不管刷新多少次，页面上显示的&amp;#8220;服务器时间&amp;#8221;都是不变，直到60秒后缓存失效。并且会在站点根目录下的cache目录生成一个firstpage.html缓存文件（注：对于POST方式访问页面则默认不会启用缓存功能）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;E、VTemplatePage对象的Ajax方法委托处理&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;先让我们认识一下&amp;#8220;AjaxHandlerMethodAttribute&amp;#8221;特性类，此特性用于标记某个方法是否为Ajax方法委托方法。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;共有以下几个属性定义：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;Name&lt;/font&gt; : 定义用于处理的Ajax方法，如果未定义(null)则表示与实际的函数方法名称一样。此名称将与用户提交的"&lt;span style="color: red;"&gt;ajaxhandler&lt;/span&gt;"参数(QueryString或者Form)匹配&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;Description&lt;/font&gt; : 用于定义描述此Ajax方法的说明&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;ContentType&lt;/font&gt; : 用于定义输出数据的内容类型，如text/xml; text/plain; text/html; application/x-javascript等等。如果未定义则会自动根据ReturnType返回&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4、&lt;font color="#9b00d3"&gt;AllowBrowserCache&lt;/font&gt; : 是否允许浏览器缓存方法的处理结果，默认不允许&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5、&lt;font color="#9b00d3"&gt;IsTerminative&lt;/font&gt; : 是否在处理AJax方法委托后自动中止页面执行&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;6、&lt;font color="#9b00d3"&gt;ReturnType&lt;/font&gt; ： 数据的访问类型，如JSON、Text等，默认是Auto（自动根据方法返回值处理：如果方法返回非null值则按Json数据处理，否则按空返回处理）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;我们修改一下上面的"firstpage.ashx&amp;#8221;页面的代码，增加两个Ajax委托方法：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;firstpage 的摘要说明&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;firstpage &lt;/span&gt;: &lt;span style="color: rgb(43, 145, 175);"&gt;VTemplatePage&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;初始化页面模板&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public override void &lt;/span&gt;InitPageTemplate()&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;this&lt;/span&gt;.LoadCurrentPageTemplate();&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;站点的配置&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public override &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration &lt;/span&gt;Configuration&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get &#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration&lt;/span&gt;.From&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;WebSiteConfiguration&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"website.config"&lt;/span&gt;);&#xD;
        }&#xD;
    }&#xD;
&#xD;
&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;获取时间值&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&#xD;
    &lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;AjaxHandlerMethod&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"timer"&lt;/span&gt;)]&#xD;
    &lt;span style="color: blue;"&gt;public long &lt;/span&gt;GetTimer()&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;return &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;.Now.Ticks;&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;获取数据&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&#xD;
    &lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;AjaxHandlerMethod&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"data"&lt;/span&gt;)]&#xD;
    &lt;span style="color: blue;"&gt;public object &lt;/span&gt;GetData()&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;string &lt;/span&gt;r = Request.Form[&lt;span style="color: rgb(163, 21, 21);"&gt;"r"&lt;/span&gt;];&#xD;
        &lt;span style="color: blue;"&gt;return new&#xD;
        &lt;/span&gt;{&#xD;
            id = &lt;span style="color: rgb(43, 145, 175);"&gt;DateTime&lt;/span&gt;.Now.Ticks,&#xD;
            rnd = r&#xD;
        };&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;为了能达到演示效果，我们也将"firstpage.ashx&amp;#8221;页面对应的"firstpage.html&amp;#8221;模板文件做一下相应的修改，增加Ajax的脚本调用，如下：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color: maroon;"&gt;DOCTYPE &lt;/span&gt;&lt;span style="color: red;"&gt;html PUBLIC &lt;/span&gt;&lt;span style="color: blue;"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt; &lt;/span&gt;KT与VT的结合 --  第一个页面 &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;link &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/css" &lt;/span&gt;&lt;span style="color: red;"&gt;rel&lt;/span&gt;&lt;span style="color: blue;"&gt;="stylesheet" &lt;/span&gt;&lt;span style="color: red;"&gt;href&lt;/span&gt;&lt;span style="color: blue;"&gt;="{$Page.TemplatePath}css/common.css" /&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;h4&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;KT与VT的结合 --  第一个页面&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;h4&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ol&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{$Page}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page.SitePath = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{$Page.SitePath}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page.SiteUrl = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{$Page.SiteUrl}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page.TemplatePath  = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{$Page.TemplatePath}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page.Request.Url  = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;{$Page.Request.Url}&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;当前服务器时间 = &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;vt&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;serverdata &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="time" &lt;/span&gt;&lt;span style="color: red;"&gt;output&lt;/span&gt;&lt;span style="color: blue;"&gt;="true" /&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;li&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ol&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;h4&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Ajax操作区&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;h4&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;input &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="button" &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;="获取Timer值" &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="b1" /&amp;gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;input &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="button" &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;="获取数据" &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="b2" /&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script &lt;/span&gt;&lt;span style="color: red;"&gt;src&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/javascript"&amp;gt;&#xD;
    &lt;/span&gt;$(&lt;span style="color: maroon;"&gt;'#b1'&lt;/span&gt;).click(&lt;span style="color: blue;"&gt;function &lt;/span&gt;() {&#xD;
        $.post(&lt;span style="color: maroon;"&gt;'?'&lt;/span&gt;, { ajaxhandler: &lt;span style="color: maroon;"&gt;'timer' &lt;/span&gt;}, &lt;span style="color: blue;"&gt;function &lt;/span&gt;(timer) {&#xD;
            alert(&lt;span style="color: maroon;"&gt;'timer=' &lt;/span&gt;+ timer);&#xD;
        }, &lt;span style="color: maroon;"&gt;'json'&lt;/span&gt;);&#xD;
    });&#xD;
    $(&lt;span style="color: maroon;"&gt;'#b2'&lt;/span&gt;).click(&lt;span style="color: blue;"&gt;function &lt;/span&gt;() {&#xD;
        $.post(&lt;span style="color: maroon;"&gt;'?'&lt;/span&gt;, { ajaxhandler: &lt;span style="color: maroon;"&gt;'data'&lt;/span&gt;, r : Math.random() }, &lt;span style="color: blue;"&gt;function &lt;/span&gt;(d) {&#xD;
            alert(&lt;span style="color: maroon;"&gt;'data=' &lt;/span&gt;+ d);&#xD;
        }, &lt;span style="color: maroon;"&gt;'text'&lt;/span&gt;);&#xD;
    });&#xD;
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&#xD;
&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;最终编译后运行，页面效果如下&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kingthy/201109/201109141315224077.png"&gt;&lt;img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/kingthy/201109/201109141315236717.png" width="393" height="297" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;当我们点击上面两个按钮，将可分别获取对应的数据。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;VTemplatePage对象处理Ajax方法委托的简单原理：在HTTP会话开始时，查看QueryString或Form参数里是否有ajaxhandler值，如果有则判断当前页面对象是否包有AjaxHandlerMethodAttribute特性且名称定义相同的公开方法，如果有则调用方法。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;注意：根据我们最上面的VTemplatePage事件流程图可知，我们的Ajax方法优先于OnLoad(InitPageTemplate)方法的执行，也就是在我们的Ajax方法被执行时，我们的页面模板是还没有装载的，所以请勿在Ajax委托方法里处理模板，如需要操作请先&amp;#8220;装载模板&amp;#8221;。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;说明 ：上面所说的示例项目代码，来源于KT.WebApp项目&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a title="http://kt.codeplex.com/SourceControl/changeset/view/9738#" href="http://kt.codeplex.com/SourceControl/changeset/view/9738#"&gt;http://kt.codeplex.com/SourceControl/changeset/view/9738#&lt;/a&gt;&lt;/p&gt; &#xD;
 &#xD;
 &#xD;
&lt;img src="http://www.cnblogs.com/kingthy/aggbug/2176089.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/09/14/2176089.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kingthy/archive/2011/09/02/2163873.html</id><title type="text">我的KT库之----数据库的操作(DbCommandBuilder/DbConditionBuilder)</title><summary type="text">如果还在拼接sql语句，那你真的是hold不住了……</summary><published>2011-09-02T07:46:00Z</published><updated>2011-09-02T07:46:00Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kingthy/archive/2011/09/02/2163873.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/archive/2011/09/02/2163873.html"/><content type="html">&lt;p&gt;&lt;strong&gt;了解或者认识KT：&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html"&gt;http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;在项目中如何使用KT？&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;KT是一个库，所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。 &lt;/p&gt;  &lt;p&gt;本节将介绍大家如何使用KT库操作数据库。KT里的数据库操作对象存放于在&amp;#8220;KT.Framework.Database&amp;#8220;下，当你已在你的项目里引用了KT库后，则写下以下代码就可以使用了。&lt;/p&gt;  &lt;pre &gt;using KT.Framework.Database;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在这节里，将会向大家介绍两个用于构造数据查询命令的对象。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;数据库命令构造对象：DbCommandBuilder&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;不知道大家在平常做数据库操作时，是不是经常写INSERT或UPDATE两条SQL语句？如果是并且还在使用SQL语句拼接的话，那DbCommandBuilder就非常适合你的使用，它可以帮你构造生成INSERT或者UPDATE的参数化SQL语句。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;DbCommandBuilder的实例方法是需要你传递一个&amp;#8220;表名&amp;#8221;与&amp;#8220;DbHelper&amp;#8221;对象，如下面示例代码：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;(&lt;span style="color: #2b91af"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    &lt;span style="color: #2b91af"&gt;DbCommandBuilder &lt;/span&gt;command = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbCommandBuilder&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;, db);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;表示将对&amp;quot;user&amp;#8221;表进行构造INSERT或者UPDATE语句。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;DbCommandBuilder的方法&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;AddField&lt;/font&gt; ： 增加一个字段值。对于INSERT语句来说，这个字段将是会插入到表里；对于UPDATE语句来说，这个字段将是会被更新的。&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;command.AddField(&lt;span style="color: #a31515"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.String, 10, &lt;span style="color: #a31515"&gt;&amp;quot;张三&amp;quot;&lt;/span&gt;);&#xD;
                command.AddField(&lt;span style="color: #a31515"&gt;&amp;quot;age&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.Int32, 20);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;注: 此方法有多个重载版本，用于处理字段值的参数化。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;AddCondition&lt;/font&gt; : 增加一个条件字段值。在构造UPDATE语句时才需要使用。&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;command.AddCondition(&lt;span style="color: #a31515"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.Int32, 1);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;注: 此方法有多个重载版本，用于处理字段值的参数化。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;GetParameter&lt;/font&gt; : 获取某个字段参数。只能获取在&lt;font color="#9b00d3"&gt;AddField&lt;/font&gt;或者&lt;font color="#9b00d3"&gt;AddCondition&lt;/font&gt;方法添加的字段参数。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4、&lt;font color="#9b00d3"&gt;ContainParameter&lt;/font&gt; : 判断是否存在某个字段参数，只能判断在&lt;font color="#9b00d3"&gt;AddField&lt;/font&gt;或者&lt;font color="#9b00d3"&gt;AddCondition&lt;/font&gt;方法添加的字段参数。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5、&lt;font color="#9b00d3"&gt;Insert&lt;/font&gt; : 执行INSERT语句命令&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #2b91af"&gt;DbCommandBuilder &lt;/span&gt;command = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbCommandBuilder&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;, db);&#xD;
command.AddField(&lt;span style="color: #a31515"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.String, 10, &lt;span style="color: #a31515"&gt;&amp;quot;张三&amp;quot;&lt;/span&gt;);&#xD;
command.AddField(&lt;span style="color: #a31515"&gt;&amp;quot;age&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.Int32, 20);&#xD;
&lt;span style="color: blue"&gt;var &lt;/span&gt;r = command.Insert();&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;执行此方法后，将会在user表里插入一行数据，等同于执行以下sql语句&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #a31515"&gt;INSERT INTO `user` (`name`,`age`) VALUES (@name,@age)&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;6、&lt;font color="#9b00d3"&gt;Update&lt;/font&gt; ： 执行UPDATE语句命令&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #2b91af"&gt;DbCommandBuilder &lt;/span&gt;command = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbCommandBuilder&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;, db);&#xD;
command.AddField(&lt;span style="color: #a31515"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.String, 10, &lt;span style="color: #a31515"&gt;&amp;quot;张三&amp;quot;&lt;/span&gt;);&#xD;
command.AddField(&lt;span style="color: #a31515"&gt;&amp;quot;age&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.Int32, 20);&#xD;
command.AddCondition(&lt;span style="color: #a31515"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.Int32, 1);&#xD;
&lt;span style="color: blue"&gt;var &lt;/span&gt;r = command.Update();&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;执行此方法后，将会更新user表里id=1的记录，等同于执行以下sql语句&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #a31515"&gt;UPDATE `user` SET `name`=@name,`age`=@age WHERE `id`=@id&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;7、&lt;font color="#9b00d3"&gt;ClearAll&lt;/font&gt; : 清空所有添加的字段值或者条件字段值&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;DbCommandBuilder的属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;DbHelper&lt;/font&gt; ： 获取对应的DbHelper实例对象&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;TableName&lt;/font&gt; : 获取当前操作的表名&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;InsertCommandText&lt;/font&gt; : 获取当前字段构造的INSERT语句&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #2b91af"&gt;DbCommandBuilder &lt;/span&gt;command = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbCommandBuilder&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;, db);&#xD;
command.AddField(&lt;span style="color: #a31515"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.String, 10, &lt;span style="color: #a31515"&gt;&amp;quot;张三&amp;quot;&lt;/span&gt;);&#xD;
command.AddField(&lt;span style="color: #a31515"&gt;&amp;quot;age&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.Int32, 20);&#xD;
command.DbHelper.ExecuteNonQuery(command.InsertCommandText, command.Parameters);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;上面的代码等同于直接执行command.&lt;font color="#9b00d3"&gt;Insert&lt;/font&gt;()方法。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4、&lt;font color="#9b00d3"&gt;UpdateCommandText&lt;/font&gt; : 获取当前字段构造的UPDATE语句&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #2b91af"&gt;DbCommandBuilder &lt;/span&gt;command = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbCommandBuilder&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;user&amp;quot;&lt;/span&gt;, db);&#xD;
command.AddField(&lt;span style="color: #a31515"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.String, 10, &lt;span style="color: #a31515"&gt;&amp;quot;张三&amp;quot;&lt;/span&gt;);&#xD;
command.AddField(&lt;span style="color: #a31515"&gt;&amp;quot;age&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.Int32, 20);&#xD;
command.AddCondition(&lt;span style="color: #a31515"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.Int32, 1);&#xD;
command.DbHelper.ExecuteNonQuery(command.UpdateCommandText, command.Parameters);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;上面的代码等同于直接执行command.&lt;font color="#9b00d3"&gt;Update&lt;/font&gt;()方法。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5、&lt;font color="#9b00d3"&gt;Parameters&lt;/font&gt; : 获取当前字段值的参数。其返回的是一个数组，包含当前所有字段的参数值。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;数据查询条件构造对象：DbConditionBuilder&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在平时查询数据时，经常都要写不同的查询条件，如果你还是在拼接SQL条件语句，那么DbConditionBuilder也是非常适合你的使用，它可以帮你构造条件语句，并可以参数化处理条件值。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;DbConditionBuilder的方法&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;Add&lt;/font&gt; : 添加一个条件&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #2b91af"&gt;DbConditionBuilder &lt;/span&gt;condition = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbConditionBuilder&lt;/span&gt;();&#xD;
                condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;id&amp;gt;1&amp;quot;&lt;/span&gt;); &lt;span style="color: green"&gt;//简单添加一个条件，其条件关系是&amp;#8220;and&amp;#8221;&#xD;
                &lt;/span&gt;condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;id&amp;gt;2&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbConditionRelation&lt;/span&gt;.OR); &lt;span style="color: green"&gt;//简单添加一个条件，其条件关系是&amp;#8220;or&amp;#8221;&#xD;
                &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;par = db.CreateDbParameter(&lt;span style="color: #a31515"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.String, 20, db.EscapeString(&lt;span style="color: #a31515"&gt;&amp;quot;张三&amp;quot;&lt;/span&gt;));&#xD;
                condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;name=&amp;quot; &lt;/span&gt;+ par.ParameterName, par);  &lt;span style="color: green"&gt;//添加一个条件，并对条件值实行参数化处理，其条件关系是&amp;#8220;and&amp;#8221;&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;上面的条件语句为&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #a31515"&gt;id&amp;gt;1 OR id&amp;gt;2 AND name=@name&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;注意：对于没有进行参数化处理的值，为避免出现&amp;#8220;注入&amp;#8221;漏洞，请记得将字符串值转义处理！如上面的&amp;#8220;db.EscapeString(&lt;span style="color: #a31515"&gt;&amp;quot;张三&amp;quot;&lt;/span&gt;)&amp;#8221;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;AddFormat&lt;/font&gt; : 添加一个条件，并可以进行格式化处理&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #2b91af"&gt;DbConditionBuilder &lt;/span&gt;condition = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbConditionBuilder&lt;/span&gt;();&#xD;
                condition.AddFormat(&lt;span style="color: #a31515"&gt;&amp;quot;id&amp;gt;{0}&amp;quot;&lt;/span&gt;, 1);  &lt;span style="color: green"&gt;//简单添加一个条件，其条件关系是&amp;#8220;and&amp;#8221;&#xD;
                &lt;/span&gt;condition.AddFormat(&lt;span style="color: #a31515"&gt;&amp;quot;name='{0}'&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbConditionRelation&lt;/span&gt;.OR, db.EscapeString(&lt;span style="color: #a31515"&gt;&amp;quot;张三&amp;quot;&lt;/span&gt;)); &lt;span style="color: green"&gt;//简单添加一个条件，其条件关系是&amp;#8220;or&amp;#8221;&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;上面的条件语句为&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;font color="#c0504d"&gt;id&amp;gt;1 OR name='张三'&lt;/font&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;注意：为避免出现&amp;#8220;注入&amp;#8221;漏洞，请记得将字符串值转义处理！如上面的&amp;#8220;db.EscapeString(&lt;span style="color: #a31515"&gt;&amp;quot;张三&amp;quot;&lt;/span&gt;)&amp;#8221;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;BeginParentheses&lt;/font&gt; : 开始左括号的写入&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4、&lt;font color="#9b00d3"&gt;EndParentheses&lt;/font&gt; : 结束括号的写入&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #2b91af"&gt;DbConditionBuilder &lt;/span&gt;condition = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbConditionBuilder&lt;/span&gt;();&#xD;
                condition.BeginParentheses();&#xD;
                condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;id&amp;gt;1&amp;quot;&lt;/span&gt;); &lt;span style="color: green"&gt;//简单添加一个条件，其条件关系是&amp;#8220;and&amp;#8221;&#xD;
                &lt;/span&gt;condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;id&amp;gt;2&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbConditionRelation&lt;/span&gt;.OR); &lt;span style="color: green"&gt;//简单添加一个条件，其条件关系是&amp;#8220;or&amp;#8221;&#xD;
                &lt;/span&gt;condition.EndParentheses();&#xD;
                &lt;span style="color: blue"&gt;var &lt;/span&gt;par = db.CreateDbParameter(&lt;span style="color: #a31515"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.String, 20, db.EscapeString(&lt;span style="color: #a31515"&gt;&amp;quot;张三&amp;quot;&lt;/span&gt;));&#xD;
                condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;name=&amp;quot; &lt;/span&gt;+ par.ParameterName, par);  &lt;span style="color: green"&gt;//添加一个条件，并对条件值实行参数化处理，其条件关系是&amp;#8220;and&amp;#8221;&#xD;
&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;上面的条件语句为&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #a31515"&gt; (id&amp;gt;1 OR id&amp;gt;2) AND name=@name&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5、&lt;font color="#9b00d3"&gt;Clear&lt;/font&gt; : 清空所有条件&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;6、&lt;font color="#9b00d3"&gt;ToString&lt;/font&gt; : 已重写，输出带&amp;quot;WHERE&amp;#8220;部分的条件语句&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #2b91af"&gt;DbConditionBuilder &lt;/span&gt;condition = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbConditionBuilder&lt;/span&gt;();&#xD;
condition.BeginParentheses();&#xD;
condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;id&amp;lt;1000&amp;quot;&lt;/span&gt;); &#xD;
condition.BeginParentheses();&#xD;
condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;age&amp;gt;20&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbConditionRelation&lt;/span&gt;.OR);&#xD;
condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;age&amp;lt;=30&amp;quot;&lt;/span&gt;);&#xD;
condition.EndParentheses();&#xD;
condition.EndParentheses();&#xD;
&lt;span style="color: blue"&gt;var &lt;/span&gt;par = db.CreateDbParameter(&lt;span style="color: #a31515"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.String, 20, &lt;span style="color: blue"&gt;string&lt;/span&gt;.Concat(db.EscapeString(&lt;span style="color: #a31515"&gt;&amp;quot;张&amp;quot;&lt;/span&gt;), &lt;span style="color: #a31515"&gt;&amp;quot;%&amp;quot;&lt;/span&gt;));&#xD;
condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;name like &amp;quot; &lt;/span&gt;+ par.ParameterName, par);&#xD;
&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(condition.ToString());&lt;/pre&gt;&#xD;
&#xD;
&#xD;
&#xD;
&lt;p&gt;上面代码将输出以下语句&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #a31515"&gt;WHERE (id&amp;lt;1000 OR (age&amp;gt;20 AND age&amp;lt;=30)) AND name like @name&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;DbConditionBuilder的属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;Condition&lt;/font&gt; ： 获取当前的条件语句&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #2b91af"&gt;DbConditionBuilder &lt;/span&gt;condition = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;DbConditionBuilder&lt;/span&gt;();&#xD;
condition.BeginParentheses();&#xD;
condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;id&amp;lt;1000&amp;quot;&lt;/span&gt;); &#xD;
condition.BeginParentheses();&#xD;
condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;age&amp;gt;20&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbConditionRelation&lt;/span&gt;.OR);&#xD;
condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;age&amp;lt;=30&amp;quot;&lt;/span&gt;);&#xD;
condition.EndParentheses();&#xD;
condition.EndParentheses();&#xD;
&lt;span style="color: blue"&gt;var &lt;/span&gt;par = db.CreateDbParameter(&lt;span style="color: #a31515"&gt;&amp;quot;name&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;DbType&lt;/span&gt;.String, 20, &lt;span style="color: blue"&gt;string&lt;/span&gt;.Concat(db.EscapeString(&lt;span style="color: #a31515"&gt;&amp;quot;张&amp;quot;&lt;/span&gt;), &lt;span style="color: #a31515"&gt;&amp;quot;%&amp;quot;&lt;/span&gt;));&#xD;
condition.Add(&lt;span style="color: #a31515"&gt;&amp;quot;name like &amp;quot; &lt;/span&gt;+ par.ParameterName, par);&#xD;
&lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(condition.Condition);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;上面代码将输出以下语句&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: #a31515"&gt;(id&amp;lt;1000 OR (age&amp;gt;20 AND age&amp;lt;=30)) AND name like @name&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;HasCondition&lt;/font&gt; : 判断构造器里面是否有条件&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;Parameters&lt;/font&gt; : 获取当前条件中的条件参数值&lt;/p&gt; &lt;img src="http://www.cnblogs.com/kingthy/aggbug/2163873.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/09/02/2163873.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kingthy/archive/2011/08/31/2161039.html</id><title type="text">VTemplate模板引擎的使用—Function标签</title><summary type="text">VT里的function标签作用即是在模板里调用某个方法并将返回值赋给某个变量（定义了var的情况）。</summary><published>2011-08-31T09:59:00Z</published><updated>2011-08-31T09:59:00Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kingthy/archive/2011/08/31/2161039.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/archive/2011/08/31/2161039.html"/><content type="html">&#xD;
&lt;p&gt;&lt;strong&gt;了解或者认识VTemplate：&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;VTemplate也被网友们简称VT，它是一个基于.net里的模板引擎。 &lt;/p&gt;  &lt;p&gt;&lt;a title="免费开源的模板引擎VTemplate" href="http://www.cnblogs.com/kingthy/archive/2009/08/17/net-vtemplate.html"&gt;http://www.cnblogs.com/kingthy/archive/2009/08/17/net-vtemplate.html&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;现在让我们了解一下VT里最常用的function标签。 &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#000000" size="4"&gt;Function标签&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;其定义格式:&lt;/p&gt;  &lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;vt:function&lt;/span&gt; &lt;span &gt;var&lt;/span&gt;&lt;span &gt;="变量"&lt;/span&gt; &lt;span &gt;method&lt;/span&gt;&lt;span &gt;="方法名"&lt;/span&gt; &lt;span &gt;type&lt;/span&gt;&lt;span &gt;="类型或实例变量"&lt;/span&gt; &lt;span &gt;args&lt;/span&gt;&lt;span &gt;="参数"&lt;/span&gt; &lt;span &gt;output&lt;/span&gt;&lt;span &gt;="true/false"&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;它的作用即是在VT里调用某个方法并将返回值赋给某个变量（定义了var的情况）。 &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;假设我们现有这样的一个类定义&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;namespace &lt;/span&gt;Test&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Db&#xD;
    &lt;/span&gt;{&#xD;
        &lt;span style="color: blue;"&gt;public &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DataTable &lt;/span&gt;GetData()&#xD;
        {&#xD;
            &lt;span style="color: green;"&gt;//这里是详细的代码&#xD;
        &lt;/span&gt;}&#xD;
&#xD;
        &lt;span style="color: blue;"&gt;public &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DataTable &lt;/span&gt;GetDataByName(&lt;span style="color: blue;"&gt;string &lt;/span&gt;name)&#xD;
        {&#xD;
            &lt;span style="color: green;"&gt;//这里详细的代码&#xD;
        &lt;/span&gt;}&#xD;
&#xD;
        &lt;span style="color: blue;"&gt;public static &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DataTable &lt;/span&gt;GetDbData()&#xD;
        {&#xD;
            &lt;span style="color: green;"&gt;//这里是详细的代码&#xD;
        &lt;/span&gt;}&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;现在我们要调用其定义的方法。 &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;静态方法的调用&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在我们的程序代码里，如果要调用上面类的GetDbData静态方法，我们一般这样写（完整写法）&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;data = Test.&lt;span style="color: rgb(43, 145, 175);"&gt;Db&lt;/span&gt;.GetDbData();&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;而将上面的语句转成VT的模板标签后，就需要写成这样的function标签 &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;vt:function&lt;/span&gt; &lt;span &gt;var&lt;/span&gt;&lt;span &gt;="data"&lt;/span&gt; &lt;span &gt;method&lt;/span&gt;&lt;span &gt;="GetDbData"&lt;/span&gt; &lt;span &gt;type&lt;/span&gt;&lt;span &gt;="Test.Db"&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;也就是function标签里的type属性我们需要写Db类的完整定义路径。 &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;实例方法的调用&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在我们的程序代码里，如果要调用类实现的方法，我们一般这样写&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Db&lt;/span&gt;();&#xD;
&lt;span style="color: blue;"&gt;var &lt;/span&gt;data = db.GetData();&lt;/pre&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;而将上面代码转成VT的模板标签后，我们的function标签就是这样写 &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;vt:function&lt;/span&gt; &lt;span &gt;var&lt;/span&gt;&lt;span &gt;="data"&lt;/span&gt; &lt;span &gt;method&lt;/span&gt;&lt;span &gt;="GetData"&lt;/span&gt; &lt;span &gt;type&lt;/span&gt;&lt;span &gt;="$db"&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&lt;/span&gt;&amp;nbsp;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;function标签里的type属性我们写为&amp;#8220;$db&amp;#8221;，这就表示，我们调用的方法是&amp;#8220;db&amp;#8221;这个变量的实例方法。 &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;但这个变量是从哪里来呢？这个变量也是同程序代码里一样，也是需要你在VT里对其赋值，比如下面的示例代码：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;TemplateDocument &lt;/span&gt;document = &lt;span style="color: rgb(43, 145, 175);"&gt;TemplateDocument&lt;/span&gt;.FromFileCache(&lt;span style="color: rgb(163, 21, 21);"&gt;@"c:\template\test.html"&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;Encoding&lt;/span&gt;.UTF8);&#xD;
            document.SetValue(&lt;span style="color: rgb(163, 21, 21);"&gt;"db"&lt;/span&gt;, &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Db&lt;/span&gt;());&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;上面代码里我们调用了SetValue方法，将&amp;#8220;db&amp;#8221;这个变量赋值到了VT模板里，这样模板里就可以调用此变量的值或方法了。 &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;带参数的方法调用&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如上面Db类里的GetDataByName方法，在程序代码里我们一般这样写&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Db&lt;/span&gt;();&#xD;
            &lt;span style="color: blue;"&gt;var &lt;/span&gt;data = db.GetDataByName(&lt;span style="color: rgb(163, 21, 21);"&gt;"car"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;而对于带参数的方法，在VT模板里，我们就可以使用function标签里的args属性，如下面&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;vt:function&lt;/span&gt; &lt;span &gt;var&lt;/span&gt;&lt;span &gt;="data"&lt;/span&gt; &lt;span &gt;method&lt;/span&gt;&lt;span &gt;="GetDataByName"&lt;/span&gt; &lt;span &gt;type&lt;/span&gt;&lt;span &gt;="$db"&lt;/span&gt; &lt;span &gt;args&lt;/span&gt;&lt;span &gt;="car"&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;而如果我们的参数不是一个常量值，而是一个变量值，我们也可以在args属性里调用，如下面 &lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;vt:function&lt;/span&gt; &lt;span &gt;var&lt;/span&gt;&lt;span &gt;="data"&lt;/span&gt; &lt;span &gt;method&lt;/span&gt;&lt;span &gt;="GetDataByName"&lt;/span&gt; &lt;span &gt;type&lt;/span&gt;&lt;span &gt;="$db"&lt;/span&gt; &lt;span &gt;args&lt;/span&gt;&lt;span &gt;="$name"&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;但name变量也是需要赋值才可以使用（如通过SetValue方法），并且类型要一致，如果不一致，VT引擎将会尝试转换类型，如果类型转换成功则执行方法，如果失败将不会执行方法！！(参数类型不匹配时，因为会尝试转换，所以这里的效率会非常低，请尽量避免）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如果我们的方法里有多个参数，我们可以通过定义多个args属性，但要注意它们的定义顺序是同方法的参数定义顺序一样的。如下面的示例&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;public &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DataTable &lt;/span&gt;GetDataBy(&lt;span style="color: blue;"&gt;string &lt;/span&gt;name, &lt;span style="color: blue;"&gt;int &lt;/span&gt;category)&#xD;
{&#xD;
    &lt;span style="color: green;"&gt;//这里详细的代码&#xD;
&lt;/span&gt;}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;VT里的function标签我们就可以写成这样&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;vt:function&lt;/span&gt; &lt;span &gt;var&lt;/span&gt;&lt;span &gt;="data"&lt;/span&gt; &lt;span &gt;method&lt;/span&gt;&lt;span &gt;="GetDataBy"&lt;/span&gt; &lt;span &gt;type&lt;/span&gt;&lt;span &gt;="$db"&lt;/span&gt; &lt;span &gt;args&lt;/span&gt;&lt;span &gt;="car"&lt;/span&gt; &lt;span &gt;args&lt;/span&gt;&lt;span &gt;="1"&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;参数的&lt;strong&gt;&lt;font color="#ff0000"&gt;自定义&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;上面的例子里，如果我们的方法参数非常多，用args定义是可以做到，但是却非常的不直观，并且如果参数定义的顺序或类型一错，将会导致我们的方法无法正确执行！如果能换一种方式，比如下面这样的定义&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;vt:function&lt;/span&gt; &lt;span &gt;var&lt;/span&gt;&lt;span &gt;="data"&lt;/span&gt; &lt;span &gt;method&lt;/span&gt;&lt;span &gt;="GetDataBy"&lt;/span&gt; &lt;span &gt;type&lt;/span&gt;&lt;span &gt;="$db"&lt;/span&gt; &lt;span &gt;pName&lt;/span&gt;&lt;span &gt;="car"&lt;/span&gt; &lt;span &gt;pCategory&lt;/span&gt;&lt;span &gt;="1"&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;这样我们的模板代码看起来就非常的直观明了。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;VT模板里允许在标签里添加自定义属性，所以我们上面的标签定义是符合格式的，但是我们为了能使自定义属性当作参数使用，我们就需要改写GetDataBy方法，如下&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;public &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DataTable &lt;/span&gt;GetDataBy()&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;var &lt;/span&gt;document = &lt;span style="color: rgb(43, 145, 175);"&gt;TemplateDocument&lt;/span&gt;.CurrentRenderingDocument;&#xD;
    &lt;span style="color: blue;"&gt;var &lt;/span&gt;tag = document == &lt;span style="color: blue;"&gt;null &lt;/span&gt;? &lt;span style="color: blue;"&gt;null &lt;/span&gt;: document.CurrentRenderingTag;&#xD;
    &lt;span style="color: blue;"&gt;if &lt;/span&gt;(tag == &lt;span style="color: blue;"&gt;null&lt;/span&gt;) &lt;span style="color: blue;"&gt;return null&lt;/span&gt;;&#xD;
&#xD;
    &lt;span style="color: blue;"&gt;var &lt;/span&gt;name = tag.Attributes.GetValue(&lt;span style="color: rgb(163, 21, 21);"&gt;"pName"&lt;/span&gt;);&#xD;
    &lt;span style="color: blue;"&gt;var &lt;/span&gt;category = tag.Attributes.GetValue(&lt;span style="color: rgb(163, 21, 21);"&gt;"pCategory"&lt;/span&gt;).As&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(0);&#xD;
&#xD;
    &lt;span style="color: green;"&gt;//这里是详细的代码&#xD;
&#xD;
&lt;/span&gt;}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;GetDataBy方法变成了无参数方法，并在方法里我们调用了&amp;#8220;&lt;span style="color: rgb(43, 145, 175);"&gt;TemplateDocument&lt;/span&gt;.CurrentRenderingDocument&amp;#8221;获取当前正在呈现解析数据的模板文档对象，再通过&amp;#8220;document.CurrentRenderingTag&amp;#8221;获取当前呈现解析数据的模板标签对象。如果我们的GetDataBy方法是通过上面的function标签调用执行的，则&amp;#8220;document.CurrentRenderingTag&amp;#8221;获取到的标签对象就是此function标签，所以我们可以获取此标签里的所有自定义属性值，从而得到pName与pCategory里定义的值。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;注：各个模板标签都有自己的关键属性，这些是无法在自定义属性里获取的，比如"id&amp;#8220;、&amp;#8220;name&amp;#8220;这些是不能用做自定义属性的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;用户自定义方法&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如果我们有些方法是私有的，比如&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;private &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DataTable &lt;/span&gt;GetUserData(object[] o)&#xD;
{&#xD;
&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;或者匿名方法&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;UserDefinedFunction &lt;font color="#000000"&gt;GetUserData&lt;/font&gt;&lt;/span&gt; = (o) =&amp;gt;&#xD;
{&#xD;
    &lt;span style="color: green;"&gt;//这里是详细的处理代码&#xD;
&lt;/span&gt;};&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;对于这两种情况，我们是无法直接通过function标签调用的，因为我们无法写type属性！因为type属性需要类名或者是类实例变量，并且是只能调用公开方法&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;而对于这两种情况，则我们需要先在模板里注册用户自定义函数，才能通过function标签调用。如下示例&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;TemplateDocument &lt;/span&gt;document = &lt;span style="color: rgb(43, 145, 175);"&gt;TemplateDocument&lt;/span&gt;.FromFileCache(&lt;span style="color: rgb(163, 21, 21);"&gt;@"c:\template\test.html"&lt;/span&gt;, &lt;span style="color: rgb(43, 145, 175);"&gt;Encoding&lt;/span&gt;.UTF8);&#xD;
document.RegisterGlobalFunction(&lt;span style="color: rgb(163, 21, 21);"&gt;"GetUserData"&lt;/span&gt;, GetUserData);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;注册了自定义函数后，我们就可以写无type属性的function标签，如下&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&amp;lt;vt:function var=&lt;span &gt;"data"&lt;/span&gt; method=&lt;span &gt;"GetUserData"&lt;/span&gt; /&amp;gt;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;VT在处理这种没有type属性的方法时，将会在&amp;#8220;自定义函数&amp;#8221;列表里查找同名的方法，如果找到则执行方法，否则不处理。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;小提示&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;对于无参数的实例方法，可以直接在变量表达式里执行，所以在任意标签里可直接使用，不一定需要通过function标签执行，如下面示例&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;vt:set&lt;/span&gt; &lt;span &gt;var&lt;/span&gt;&lt;span &gt;="data"&lt;/span&gt; &lt;span &gt;value&lt;/span&gt;&lt;span &gt;="$db.GetData()"&lt;/span&gt; &lt;span &gt;/&amp;gt;&lt;/span&gt;&#xD;
&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;vt:foreach&lt;/span&gt; &lt;span &gt;from&lt;/span&gt;&lt;span &gt;="$db.GetData()"&lt;/span&gt; &lt;span &gt;item&lt;/span&gt;&lt;span &gt;="data"&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;.......&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;vt:foreach&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt; &#xD;
&lt;img src="http://www.cnblogs.com/kingthy/aggbug/2161039.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/31/2161039.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kingthy/archive/2011/08/27/2155619.html</id><title type="text">我的KT库之----数据库的操作(DbCommandExecutor)</title><summary type="text">DbCommandExecutor里封装了常用的数据执行命令。通过DbConnection或DbHelper实例化一个实例</summary><published>2011-08-27T09:00:00Z</published><updated>2011-08-27T09:00:00Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kingthy/archive/2011/08/27/2155619.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/archive/2011/08/27/2155619.html"/><content type="html">&#xD;
&lt;p&gt;&lt;strong&gt;了解或者认识KT：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html"&gt;http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;在项目中如何使用KT？&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;KT是一个库，所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。&lt;/p&gt;  &lt;p&gt;本节将介绍大家如何使用KT库操作数据库。KT里的数据库操作对象存放于在&amp;#8220;KT.Framework.Database&amp;#8220;下，当你已在你的项目里引用了KT库后，则写下以下代码就可以使用了。&lt;/p&gt;  &lt;pre&gt;using KT.Framework.Database;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;数据库命令执行对象: DbCommandExecutor&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;DbCommandExecutor里封装了常用的数据执行命令。通过DbConnection或DbHelper实例化一个实例，如下面&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;OleDbConnection &lt;/span&gt;connection = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;OleDbConnection&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\db.mdb"&lt;/span&gt;);&#xD;
&lt;span style="color: rgb(43, 145, 175);"&gt;DbCommandExecutor &lt;/span&gt;executor = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbCommandExecutor&lt;/span&gt;(connection);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;或者&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection);&#xD;
&lt;span style="color: rgb(43, 145, 175);"&gt;DbCommandExecutor &lt;/span&gt;executor = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbCommandExecutor&lt;/span&gt;(db);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;但建议的是直接调用DbHelper里的Executor属性直接获取对应的DbCommandHelper实例，如下面范例&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection);&#xD;
&lt;span style="color: rgb(43, 145, 175);"&gt;DbCommandExecutor &lt;/span&gt;executor = db.Executor;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;DbCommandExecutor的方法&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;font color="#008000"&gt;注：以下的演示代码使用的表结构如下，表名：user&lt;/font&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;table border="1" cellspacing="0" cellpadding="2" width="401"&gt;&lt;tbody&gt;&#xD;
    &lt;tr&gt;&#xD;
      &lt;td valign="top" width="134"&gt;id&lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="135"&gt;int&lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="130"&gt;标识字段&lt;/td&gt;&#xD;
    &lt;/tr&gt;&#xD;
&#xD;
    &lt;tr&gt;&#xD;
      &lt;td valign="top" width="134"&gt;name&lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="135"&gt;nvarchar(20)&lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="130"&gt;姓名&lt;/td&gt;&#xD;
    &lt;/tr&gt;&#xD;
&#xD;
    &lt;tr&gt;&#xD;
      &lt;td valign="top" width="134"&gt;age&lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="135"&gt;int&lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="130"&gt;年龄&lt;/td&gt;&#xD;
    &lt;/tr&gt;&#xD;
&#xD;
    &lt;tr&gt;&#xD;
      &lt;td valign="top" width="134"&gt;phone&lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="135"&gt;nvarchar(20)&lt;/td&gt;&#xD;
&#xD;
      &lt;td valign="top" width="130"&gt;电话&lt;/td&gt;&#xD;
    &lt;/tr&gt;&#xD;
  &lt;/tbody&gt;&lt;/table&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;ExecuteIdentity&lt;/font&gt; ： 执行命令，并且返回数据库的最后标识值。此方法一般用于执行INSERT命令&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;OleDbConnection &lt;/span&gt;connection = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;OleDbConnection&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\db.mdb"&lt;/span&gt;);&#xD;
&lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;long &lt;/span&gt;id = db.Executor.ExecuteIdentity(&lt;span style="color: rgb(163, 21, 21);"&gt;"insert into `user` (`name`,`age`,`phone`) values ('小明',20,'13833233322')"&lt;/span&gt;);&#xD;
    &lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(id);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;此方法如在OleDbConnection/OdbcConnection执行环境下，将调用&amp;#8220;&lt;span style="color: rgb(163, 21, 21);"&gt;SELECT @@IDENTITY &lt;/span&gt;&amp;#8221;语句获取标识值；如果是在SqlConnection执行环境下，则调用&amp;#8220;&lt;span style="color: rgb(163, 21, 21);"&gt;SELECT SCOPE_IDENTITY() &lt;/span&gt;&amp;#8221;获取标识值；而如果是MySql执行环境下，则调用&amp;#8220;&lt;span style="color: rgb(163, 21, 21);"&gt;SELECT LAST_INSERT_ID() &lt;/span&gt;&amp;#8221;获取标识值。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;ExistRow&lt;/font&gt; ： 判断是否存在某行数据符合条件的数据&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;bool &lt;/span&gt;exist = db.Executor.ExistRow(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"id=2"&lt;/span&gt;);&#xD;
    &lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(exist);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;GetRow&amp;lt;T&amp;gt;&lt;/font&gt; : 获取某行数据，并将行数据映射为某个数据对象&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    &lt;span style="color: green;"&gt;//通过Id值获取数据&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;user = db.Executor.GetRow&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, 1);&#xD;
    &lt;span style="color: green;"&gt;//通过条件获取数据&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;user2 = db.Executor.GetRow&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"id=3 and age=30"&lt;/span&gt;);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4、&lt;font color="#9b00d3"&gt;GetRowList&amp;lt;T&amp;gt;&lt;/font&gt; : 获取某些行数据，并将行数据映射为某个数据对象&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    &lt;span style="color: green;"&gt;//获取某个表里的所有数据&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;users = db.Executor.GetRowList&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;);&#xD;
    &lt;span style="color: green;"&gt;//通过条件获取数据&#xD;
    &lt;/span&gt;users = db.Executor.GetRowList&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"id&amp;gt;2"&lt;/span&gt;);&#xD;
    &lt;span style="color: green;"&gt;//通过条件获取数据，并按id降序排列返回&#xD;
    &lt;/span&gt;users = db.Executor.GetRowList&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"id&amp;gt;2"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"id desc"&lt;/span&gt;);&#xD;
    &lt;span style="color: green;"&gt;//获取符合条件的前10条数据&#xD;
    &lt;/span&gt;users = db.Executor.GetRowList&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;&amp;gt;(10, &lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"id&amp;gt;2"&lt;/span&gt;);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5、&lt;font color="#9b00d3"&gt;DeleteRow&lt;/font&gt; : 删除某些数据行，并返回已删除的行数&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    &lt;span style="color: green;"&gt;//删除id=1,id=2, id=3的数据行&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;int &lt;/span&gt;r = db.Executor.DeleteRow(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, 1, 2, 3);&#xD;
    &lt;span style="color: green;"&gt;//删除符合条件的数据行&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;int &lt;/span&gt;r1 = db.Executor.DeleteRow(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"id&amp;gt;2"&lt;/span&gt;);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;6、&lt;font color="#9b00d3"&gt;RemoveRow&amp;lt;T&amp;gt;&lt;/font&gt; : 删除某些数据行，并返回被删除的行数据&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    &lt;span style="color: green;"&gt;//删除id=1,id=2, id=3的数据行并返回行数据&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;rows = db.Executor.RemoveRow&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, 1, 2, 3);&#xD;
    &lt;span style="color: green;"&gt;//删除符合条件的数据行并返回行数据&#xD;
    &lt;/span&gt;rows = db.Executor.RemoveRow&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"id&amp;gt;2"&lt;/span&gt;);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;7、&lt;font color="#9b00d3"&gt;Insert&lt;/font&gt; ： 将某个对象插入到某个数据表。对象需要插入的数据（属性）需要用&lt;font color="#4f81bd"&gt;DbFieldAttribute&lt;/font&gt;做属性标记&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;注：以下示例代码中的&lt;font color="#4f81bd"&gt;DbUser&lt;/font&gt;类结构请看下面的&lt;font color="#4f81bd"&gt;DbFieldAttribute&lt;/font&gt;说明&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;OleDbConnection &lt;/span&gt;connection = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;OleDbConnection&lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\db.mdb"&lt;/span&gt;);&#xD;
&lt;span style="color: blue;"&gt;var &lt;/span&gt;dbuser = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;();&#xD;
dbuser.Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"小明"&lt;/span&gt;;&#xD;
dbuser.Age = 23;&#xD;
dbuser.Phone = &lt;span style="color: rgb(163, 21, 21);"&gt;"13800138000"&lt;/span&gt;;&#xD;
&lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;var &lt;/span&gt;f = db.Executor.Insert(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, dbuser);&#xD;
    &lt;span style="color: blue;"&gt;if &lt;/span&gt;(f)&#xD;
    {&#xD;
        &lt;span style="color: green;"&gt;//输出当前新记录的id值&#xD;
        &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(dbuser.Id);&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;8、&lt;font color="#9b00d3"&gt;Update&lt;/font&gt; : 将某个对象更新到某个数据表。对象需要更新的数据（属性）需要用&lt;font color="#4f81bd"&gt;DbFieldAttribute&lt;/font&gt;做属性标记&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;注：以下示例代码中的DbUser类结构请看下面的&lt;font color="#4f81bd"&gt;DbFieldAttribute&lt;/font&gt;说明&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;dbuser = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;();&#xD;
dbuser.Id = 2;&#xD;
dbuser.Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"小明"&lt;/span&gt;;&#xD;
dbuser.Age = 23;&#xD;
dbuser.Phone = &lt;span style="color: rgb(163, 21, 21);"&gt;"13800138000"&lt;/span&gt;;&#xD;
&lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;var &lt;/span&gt;f = db.Executor.Update(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, dbuser);&#xD;
    &lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(f ? &lt;span style="color: rgb(163, 21, 21);"&gt;"更新成功" &lt;/span&gt;: &lt;span style="color: rgb(163, 21, 21);"&gt;"更新失败"&lt;/span&gt;);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;上面代码将会自动更新&amp;#8220;id=2&amp;#8221;的记录值。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;数据字段属性标记：&lt;font color="#ff0000"&gt;DbFieldAttribute&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;此属性标记是用于标记对象中的哪些属性在&lt;font color="#4f81bd"&gt;DbCommandExecutor&lt;/font&gt;的&lt;font color="#9b00d3"&gt;Insert&lt;/font&gt;或&lt;font color="#9b00d3"&gt;Update&lt;/font&gt;方法中是需要处理的。如下面的类结构定义&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;用户对象&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser &lt;/span&gt;: &lt;span style="color: rgb(43, 145, 175);"&gt;DbObject&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: blue;"&gt;public &lt;/span&gt;DbUser()&#xD;
    {&#xD;
        &#xD;
    }&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;编号&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;DbField&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbType&lt;/span&gt;.Int32, Identity=&lt;span style="color: blue;"&gt;true&lt;/span&gt;, PrimaryKey=&lt;span style="color: blue;"&gt;true&lt;/span&gt;)]&#xD;
    &lt;span style="color: blue;"&gt;public int &lt;/span&gt;Id&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.GetData&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Id"&lt;/span&gt;, 0);&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;set&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(163, 21, 21);"&gt;"Id"&lt;/span&gt;] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;姓名&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;DbField&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbType&lt;/span&gt;.String, Size=20, Groups = 1)]&#xD;
    &lt;span style="color: blue;"&gt;public string &lt;/span&gt;Name&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.GetData&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;set&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;年龄&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;DbField&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbType&lt;/span&gt;.Int32, Groups = 1|2)]&#xD;
    &lt;span style="color: blue;"&gt;public int &lt;/span&gt;Age&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.GetData&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Age"&lt;/span&gt;, 0);&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;set&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(163, 21, 21);"&gt;"Age"&lt;/span&gt;] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;电话&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;DbField&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbType&lt;/span&gt;.String, Size = 20, Groups = 2)]&#xD;
    &lt;span style="color: blue;"&gt;public string &lt;/span&gt;Phone&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.GetData&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Phone"&lt;/span&gt;, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;set&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(163, 21, 21);"&gt;"Phone"&lt;/span&gt;] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;标记了Id、Name、Age、Phone四个属性是需要处理的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;DbFieldAttribute的属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;Name&lt;/font&gt; : 定义对应于数据库的字段名称。如果为空或null则默认采用属性名称&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;姓名&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;DbField&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbType&lt;/span&gt;.String, Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"UserName"&lt;/span&gt;, Size = 20)]&#xD;
&lt;span style="color: blue;"&gt;public string &lt;/span&gt;Name&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;get&lt;/span&gt;;&#xD;
    &lt;span style="color: blue;"&gt;set&lt;/span&gt;;&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;此属性定义了Name值，所以表示此属性是对应于数据库的&amp;#8220;username&amp;#8221;字段。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;DbType&lt;/font&gt; : 数据字段类型&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;姓名&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;DbField&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbType&lt;/span&gt;.String, Size = 20)]&#xD;
&lt;span style="color: blue;"&gt;public string &lt;/span&gt;Name&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;get&lt;/span&gt;;&#xD;
    &lt;span style="color: blue;"&gt;set&lt;/span&gt;;&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;对应的是DbType.String类型。如果采用空类型构造函数，则表示采用系统自动检测，如下&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;姓名&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;DbField&lt;/span&gt;(Size = 20)]&#xD;
&lt;span style="color: blue;"&gt;public string &lt;/span&gt;Name&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;get&lt;/span&gt;;&#xD;
    &lt;span style="color: blue;"&gt;set&lt;/span&gt;;&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;因为未定义DbType，所以在运行Insert或Update方法，KT会自动根据属性类型&amp;#8220;string&amp;#8221;决定使用DbType.String类型。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;PrimaryKey&lt;/font&gt; ： 是否是主键字段。如果是则在UPDATE时将使用此属性值做为更新条件&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;4、&lt;font color="#9b00d3"&gt;Identity&lt;/font&gt; : 是否是自增标识字段，如果是则不参与INSERT与UPDATE，并且在INSERT后会自动获取&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;5、&lt;font color="#9b00d3"&gt;Size&lt;/font&gt; ： 用于标记字段值的长度大小&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;6、&lt;font color="#9b00d3"&gt;Groups&lt;/font&gt; ： 字段所在组，在插入或更新数据时可根据组更新或者插入部分字段值。&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;dbuser = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;();&#xD;
dbuser.Id = 2;&#xD;
dbuser.Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"小明"&lt;/span&gt;;&#xD;
dbuser.Age = 23;&#xD;
dbuser.Phone = &lt;span style="color: rgb(163, 21, 21);"&gt;"13800138000"&lt;/span&gt;;&#xD;
&lt;span style="color: blue;"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;var &lt;/span&gt;f = db.Executor.Update(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, dbuser, 1);&#xD;
    &lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(f ? &lt;span style="color: rgb(163, 21, 21);"&gt;"更新成功" &lt;/span&gt;: &lt;span style="color: rgb(163, 21, 21);"&gt;"更新失败"&lt;/span&gt;);&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;上面代码则只更新属于组1的数据，也即是只更新&amp;#8220;Name&amp;#8221;与&amp;#8220;Age&amp;#8221;数据，&amp;#8220;Phone&amp;#8220;数据由于属于组2不会被更新！如果改为以下代码&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;f = db.Executor.Update(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, dbuser, 2);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;也即是只更新属于&amp;#8220;组2&amp;#8221;的数据，因为&amp;#8220;Age&amp;#8221;是被定义为混合组&amp;#8220;Groups=1|2&amp;#8220;，所以表示Age属于&amp;#8220;组1&amp;#8221;且也属于&amp;#8220;组2&amp;#8221;数据。所以上面代码里&amp;#8220;Age&amp;#8220;与&amp;#8220;Phone&amp;#8220;数据将会被更新。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如果将代码改为以下&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;f = db.Executor.Update(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, dbuser, 1|2);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;则表示同时更新&amp;#8220;组1&amp;#8221;与&amp;#8220;组2&amp;#8221;的数据，所以&amp;#8220;Name&amp;#8220;、&amp;#8220;Age&amp;#8221;、&amp;#8220;Phone&amp;#8221;都会被同时更新。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;7、&lt;font color="#9b00d3"&gt;Insertable&lt;/font&gt; ： 是否允许进行INSERT操作，默认允许&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;此属性可设置为以下三种值：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbFieldOperable&lt;/span&gt;.Allowed :&amp;nbsp; 允许操作&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbFieldOperable&lt;/span&gt;.OnlyGroup:&amp;nbsp; 只允许同组的操作&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbFieldOperable&lt;/span&gt;.Unallowed:&amp;nbsp; 不允许操作，也即是不会参与到INSERT操作中&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;姓名&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;[&lt;span style="color: rgb(43, 145, 175);"&gt;DbField&lt;/span&gt;(Size = 20, Groups=1, Insertable = &lt;span style="color: rgb(43, 145, 175);"&gt;DbFieldOperable&lt;/span&gt;.OnlyGroup)]&#xD;
&lt;span style="color: blue;"&gt;public string &lt;/span&gt;Name&#xD;
{&#xD;
    &lt;span style="color: blue;"&gt;get&lt;/span&gt;;&#xD;
    &lt;span style="color: blue;"&gt;set&lt;/span&gt;;&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;上面代码由于设置为只允许同组的操作，并且定义了属于&amp;#8220;组1&amp;#8221;数据，所以&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;db.Executor.Insert(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, dbuser);     &lt;span style="color: green;"&gt;//Name不参与INSERT&#xD;
                &lt;/span&gt;db.Executor.Insert(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, dbuser, 1);  &lt;span style="color: green;"&gt;//因为设置了插入组1数据，所以Name将会参与INSERT&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;8、&lt;font color="#9b00d3"&gt;Updateable&lt;/font&gt; ： 是否允许进行UPDATE操作，默认允许&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;此属性类似&lt;font color="#9b00d3"&gt;Insertable&lt;/font&gt; &lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;DbFieldAttribute的两个特殊常量&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;EmptyGroup&lt;/font&gt; ： 表示空组，常量：0&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如在Insert与Update方法中，传递此值，则表示是所有定义为&amp;#8220;&lt;span style="color: rgb(43, 145, 175);"&gt;DbFieldOperable&lt;/span&gt;.Allowed&amp;#8221;的数据&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: green;"&gt;//以下两个方法相同效果&#xD;
&lt;/span&gt;db.Executor.Insert(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, dbuser);     &#xD;
db.Executor.Insert(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, dbuser, &lt;span style="color: rgb(43, 145, 175);"&gt;DbFieldAttribute&lt;/span&gt;.EmptyGroup); &lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;NoGroup&lt;/font&gt;&amp;nbsp; : 表示不属于任何组，常量：-1&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如在Insert与Update方法中，传递此值，则表示只处理所有未定义&amp;#8220;Groups&amp;#8221;的属性数据。&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;db.Executor.Insert(&lt;span style="color: rgb(163, 21, 21);"&gt;"user"&lt;/span&gt;, dbuser, &lt;span style="color: rgb(43, 145, 175);"&gt;DbFieldAttribute&lt;/span&gt;.NoGroup); &lt;/pre&gt; &#xD;
&lt;img src="http://www.cnblogs.com/kingthy/aggbug/2155619.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/27/2155619.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kingthy/archive/2011/08/26/2155058.html</id><title type="text">我的KT库之----数据库的操作(DbHelper)</title><summary type="text">DbHelper类似于微软的SqlHelper，但又有不同的区别。DbHelper是对DbConnection对象进行封装，并且是一个实例对象，在使用它时必须进行实例化</summary><published>2011-08-26T11:06:00Z</published><updated>2011-08-26T11:06:00Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kingthy/archive/2011/08/26/2155058.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/archive/2011/08/26/2155058.html"/><content type="html">&lt;p&gt;&lt;strong&gt;了解或者认识KT：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html"&gt;http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;在项目中如何使用KT？&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;KT是一个库，所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本节将介绍大家如何使用KT库操作数据库。KT里的数据库操作对象存放于在&amp;#8220;KT.Framework.Database&amp;#8220;下，当你已在你的项目里引用了KT库后，则写下以下代码就可以使用了。&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;KT.Framework.Database;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;数据库帮助对象: &lt;font color="#ff0000"&gt;DbHelper&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;DbHelper类似于微软的SqlHelper，但又有不同的区别。&lt;/p&gt;&#xD;
&lt;p&gt;DbHelper是对DbConnection对象进行封装，并且是一个实例对象，在使用它时必须进行实例化，如下面示例&lt;/p&gt;&lt;pre &gt;&lt;span style="color: rgb(43,145,175)"&gt;OleDbConnection &lt;/span&gt;connection = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;OleDbConnection&lt;/span&gt;(&lt;span style="color: rgb(163,21,21)"&gt;"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\db.mdb"&lt;/span&gt;);&#xD;
&lt;span style="color: rgb(43,145,175)"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;DbHelper&lt;/span&gt;(connection);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在实例化DbHelper时传入了一个&lt;span style="color: rgb(43,145,175)"&gt;OleDbConnection&lt;/span&gt;对象，之后在DbHelper进行的操作大部分都是针对&lt;span style="color: rgb(43,145,175)"&gt;OleDbConnection&lt;/span&gt;对象进行的，并且在每执行一次命令都会自动恢复DbConnection对象的原状态（如：原状态是关闭的，则在执行命令时将会自动打开，执行完后将恢复关闭状态）。&lt;/p&gt;&#xD;
&lt;p&gt;DbHelper还有一个实例化重载函数，可设置是否保持DbConnection对象的打开状态，如下面的代码&lt;/p&gt;&lt;pre &gt;&lt;span style="color: rgb(43,145,175)"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;DbHelper&lt;/span&gt;(connection, &lt;span style="color: blue"&gt;true&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;使用此重载函数实例化后，DbConnection在被打开(Open)之后，将会一值保持打开状态，直到手动关闭(Close)为此&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;DbHelper的方法&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;ChangeDbConnection&lt;/font&gt; ： 更换DbConnection&lt;/p&gt;&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;BeginTransaction&lt;/font&gt; : 启动事务，启动之后所有数据执行命令都将在同一个事务里执行。&lt;/p&gt;&#xD;
&lt;p&gt;3、&lt;font color="#9b00d3"&gt;CommitTransaction&lt;/font&gt; ： 提交事务&lt;/p&gt;&#xD;
&lt;p&gt;4、&lt;font color="#9b00d3"&gt;RollbackTransaction&lt;/font&gt; : 回滚事务&lt;/p&gt;&#xD;
&lt;p&gt;5、&lt;font color="#9b00d3"&gt;Open&lt;/font&gt;与&lt;font color="#9b00d3"&gt;Close&lt;/font&gt; ： 打开/关闭DbConnection&lt;/p&gt;&#xD;
&lt;p&gt;6、&lt;font color="#9b00d3"&gt;CreateDbCommand&lt;/font&gt; : 建立一个DbCommand对象&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;command = db.CreateDbCommand(&lt;span style="color: rgb(163,21,21)"&gt;"select * from [user]"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;7、&lt;font color="#9b00d3"&gt;CreateDbCommandWrapped&lt;/font&gt; : 建立一个已对DbCommand包装了的DbCommandWrapped对象&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;command = db.CreateDbCommandWrapped(&lt;span style="color: rgb(163,21,21)"&gt;"select * from [user]"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;8、&lt;font color="#9b00d3"&gt;CreateDbDataAdapter&lt;/font&gt; : 建立一个DbDataAdapter对象&lt;/p&gt;&#xD;
&lt;p&gt;9、&lt;font color="#9b00d3"&gt;CreateDbParameter&lt;/font&gt; : 建立一个DbParameter参数对象。注意：参数名不需要带前缀&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;pName = db.CreateDbParameter(&lt;span style="color: rgb(163,21,21)"&gt;"name"&lt;/span&gt;, &lt;span style="color: rgb(43,145,175)"&gt;DbType&lt;/span&gt;.String, 30, &lt;span style="color: rgb(163,21,21)"&gt;"张三"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;10、&lt;font color="#9b00d3"&gt;ExecuteScalar&lt;/font&gt; ： 执行命令并返回第一行第一列的数据&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;id = db.ExecuteScalar(&lt;span style="color: rgb(163,21,21)"&gt;"select top 1 Id from [user]"&lt;/span&gt;).As&amp;lt;&lt;span style="color: blue"&gt;int&lt;/span&gt;&amp;gt;();&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;11、&lt;font color="#9b00d3"&gt;ExecuteReader&lt;/font&gt; : 执行命令并返回DbReader数据流&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;reader = db.ExecuteReader(&lt;span style="color: rgb(163,21,21)"&gt;"select * from [user]"&lt;/span&gt;))&#xD;
{&#xD;
    &lt;span style="color: blue"&gt;while &lt;/span&gt;(reader.Read())&#xD;
    {&#xD;
        &lt;span style="color: green"&gt;//读取数据&#xD;
    &lt;/span&gt;}&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;12、&lt;font color="#9b00d3"&gt;ExecuteNonQuery&lt;/font&gt; : 执行命令并返回受影响的行数&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;success = db.ExecuteNonQuery(&lt;span style="color: rgb(163,21,21)"&gt;"update [user] set name='李四' where id=1"&lt;/span&gt;) &amp;gt; 0;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;13、&lt;font color="#9b00d3"&gt;ExecuteDataSet&lt;/font&gt; : 执行命令并返回DataSet对象&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;dataset = db.ExecuteDataSet(&lt;span style="color: rgb(163,21,21)"&gt;"select * from [user]"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;14、&lt;font color="#9b00d3"&gt;ExecuteDbObject&amp;lt;T&amp;gt;&lt;/font&gt; : 执行命令并返回一个&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/24/2152641.html" target="_blank"&gt;数据对象&lt;/a&gt;。&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;user = db.ExecuteDbObject&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"select * from [user] where id=1"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;15、&lt;font color="#9b00d3"&gt;ExecuteDbObjectList&amp;lt;T&amp;gt;&lt;/font&gt; : 执行命令并返回&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/24/2152641.html" target="_blank"&gt;数据对象&lt;/a&gt;列表&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;users = db.ExecuteDbObjectList&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"select * from [user]"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;16、&lt;font color="#9b00d3"&gt;FillDataSet&lt;/font&gt; : 执行集合并填充DataSet数据表&lt;/p&gt;&#xD;
&lt;p&gt;17、&lt;span style="color: #9900cc"&gt;GetDbParameterName &lt;/span&gt;: 获取一个带前缀的参数名称&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;pName = db.GetDbParameterName(&lt;span style="color: rgb(163,21,21)"&gt;"name"&lt;/span&gt;);  &lt;span style="color: green"&gt;//如果传入的是SqlConnection、OleDbConnection对象则返回&amp;#8220;@name&amp;#8221;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;18、&lt;font color="#9b00d3"&gt;QuoteIdentifier&lt;/font&gt; : 对标识符(表名、列名)进行处理。也就是在表名或列名前后加上相应的引用符（如Sql server则是加入&amp;#8220;[&amp;#8221;与&amp;#8220;]&amp;#8221;，但在MySql里则是&amp;#8220;`&amp;#8221;）&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;sql = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: rgb(163,21,21)"&gt;"select {0},{1} from {2}"&lt;/span&gt;,&#xD;
        db.QuoteIdentifier(&lt;span style="color: rgb(163,21,21)"&gt;"name"&lt;/span&gt;),&#xD;
        db.QuoteIdentifier(&lt;span style="color: rgb(163,21,21)"&gt;"age"&lt;/span&gt;),&#xD;
        db.QuoteIdentifier(&lt;span style="color: rgb(163,21,21)"&gt;"user"&lt;/span&gt;));&lt;/pre&gt;&#xD;
&lt;p&gt;上面语句经过这样处理后，则可以兼容所有数据库，当DbHelper当前是对SqlConnection执行操作，则上面的sql等于&lt;/p&gt;&lt;pre &gt;&lt;span style="color: rgb(163,21,21)"&gt;select [name],[age] from [user]&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;而如果是对OleDbConnection的Access环境下，则是这样的语句&lt;/p&gt;&lt;pre &gt;&lt;span style="color: rgb(163,21,21)"&gt;select `name`,`age` from `user`&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;嗯？是不是和MySql数据库的语法一样？。&lt;/p&gt;&#xD;
&lt;p&gt;但需要注意的是，如果是在OleDbConnection或OdbcConnection执行环境，如果数据源还处于未打开(Open)的状态，则调用此方法后，DbHelper会自动打开数据源并保持打开状态。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;19、&lt;font color="#9b00d3"&gt;EscapeString&lt;/font&gt; ： 对字符串数据进行转义处理。比如Sql server数据库则需要字符串里的单引号进行转义。&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;text = db.EscapeString(&lt;span style="color: rgb(163,21,21)"&gt;"当前时间是'2011-08-01 20:33'"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;对于SqlConnection或者OleDbConnection返回的都是&lt;/p&gt;&lt;pre &gt;&lt;span style="color: rgb(163,21,21)"&gt;当前时间是''2011-08-01 20:33''&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;而如果是在MySql环境下则返回的是&lt;/p&gt;&lt;pre &gt;&lt;span style="color: rgb(163,21,21)"&gt;当前时间是\'2011-08-01 20:33\'&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;DbHelper的属性&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1、&lt;font color="#9b00d3"&gt;Connection&lt;/font&gt; ： 返回当前执行的数据库连接对象(DbConnection)&lt;/p&gt;&#xD;
&lt;p&gt;2、&lt;font color="#9b00d3"&gt;DbTransaction&lt;/font&gt; : 返回或设置在执行命令时使用的事务，一般通过&lt;font color="#9b00d3"&gt;BeginTransaction&lt;/font&gt;方法启用事务，如果需要使用其它外部事务则可以设置此属性进行更改。&lt;/p&gt;&#xD;
&lt;p&gt;3、&lt;span style="color: #9900cc"&gt;DbTransactionIsCreatedByDbConnection &lt;/span&gt;： 返回&lt;font color="#9b00d3"&gt;DbTransaction&lt;/font&gt; 是否是通过&lt;font color="#9b00d3"&gt;BeginTransaction&lt;/font&gt;方法建立的还是由外部手工设置的。&lt;/p&gt;&#xD;
&lt;p&gt;4、&lt;font color="#9b00d3"&gt;KeepConnection&lt;/font&gt; ：当前的DbHelper是否是处于保持打开状态模式的。&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;DbHelper&lt;/span&gt;(connection))&#xD;
{&#xD;
    db.ExecuteNonQuery(&lt;span style="color: rgb(163,21,21)"&gt;"update [user] set age=22 where id=1"&lt;/span&gt;);                &lt;span style="color: green"&gt;//打开一次，执行完后又关闭&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;user = db.ExecuteDbObject&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"select * from [user] where id=1"&lt;/span&gt;); &lt;span style="color: green"&gt;//打开一次，执行完后又关闭&#xD;
&lt;/span&gt;}&lt;/pre&gt;&#xD;
&lt;p&gt;上面代码里，执行两次命令共需要打开2次DbConnection。&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;DbHelper &lt;/span&gt;db = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;DbHelper&lt;/span&gt;(connection, &lt;span style="color: blue"&gt;true&lt;/span&gt;))&#xD;
{&#xD;
    db.ExecuteNonQuery(&lt;span style="color: rgb(163,21,21)"&gt;"update [user] set age=22 where id=1"&lt;/span&gt;);                &lt;span style="color: green"&gt;//打开一次，执行完后又不关闭&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;user = db.ExecuteDbObject&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"select * from [user] where id=1"&lt;/span&gt;); &lt;span style="color: green"&gt;//直接执行&#xD;
&lt;/span&gt;}&lt;/pre&gt;&#xD;
&lt;p&gt;上面代码，则只需要打开1次DbConnection&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;5、&lt;font color="#9b00d3"&gt;Executor&lt;/font&gt; ： 返回一个DbCommandExecutor对象(关于此对象见后文）。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #808000"&gt;&amp;nbsp;注：DbHelper里的内部方法很多是虚方法，所以你可以根据你的需要对其重写以适用不同的数据库，比如KT里提供的MySqlDbHelper，就是继承于DbHelper并重写部分内部方法，以便适应MySql数据库环境。&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;数据命令的包装对象:&lt;font color="#ff0000"&gt;DbCommandWrapped&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;对于DbCommand有一个小问题，在执行命令时，如果使用了参数，在执行完成后如果忘记了调用Clear方法清除，将会导致那些参数无法再次使用！！具体可查看我的这篇文章《&lt;a href="http://www.cnblogs.com/kingthy/archive/2008/06/19/1225235.html"&gt;认父亲的DbParameter!!&lt;/a&gt;》&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;所以我在KT对DbCommand加了一个包装对象，类似如下的代码：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green"&gt;对DbCommand进行包装&#xD;
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;DbCommandWrapped &lt;/span&gt;: &lt;span style="color: rgb(43,145,175)"&gt;IDisposable&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &#xD;
    /// &amp;lt;/summary&amp;gt;&#xD;
    /// &amp;lt;param name="command"&amp;gt;&amp;lt;/param&amp;gt;&#xD;
    /// &amp;lt;param name="keepConnection"&amp;gt;&amp;lt;/param&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;DbCommandWrapped(&lt;span style="color: rgb(43,145,175)"&gt;DbCommand &lt;/span&gt;command) &#xD;
    {&#xD;
        &lt;span style="color: blue"&gt;this&lt;/span&gt;.Command = command;&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;DbCommand &lt;/span&gt;Command;&#xD;
&#xD;
    &lt;span style="color: blue"&gt;public void &lt;/span&gt;Dispose()&#xD;
    {&#xD;
        &lt;span style="color: blue"&gt;if &lt;/span&gt;(&lt;span style="color: blue"&gt;this&lt;/span&gt;.Command != &lt;span style="color: blue"&gt;null&lt;/span&gt;)&#xD;
        {&#xD;
            &lt;span style="color: blue"&gt;this&lt;/span&gt;.Command.Parameters.Clear();&#xD;
            &lt;span style="color: blue"&gt;this&lt;/span&gt;.Command.Dispose();&#xD;
        }&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;有了这个包装对象，我们在执行命令时直接using一下就可以回收参数了，如下面代码&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;pId = db.CreateDbParameter(&lt;span style="color: rgb(163,21,21)"&gt;"@id"&lt;/span&gt;, &lt;span style="color: rgb(43,145,175)"&gt;DbType&lt;/span&gt;.Int32, 1);&#xD;
&lt;span style="color: blue"&gt;using &lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;command = db.CreateDbCommandWrapped(&lt;span style="color: rgb(163,21,21)"&gt;"update [user] set age=22 where id=@id"&lt;/span&gt;, pId))&#xD;
{&#xD;
    command.ExecuteNonQuery();&#xD;
}&#xD;
&lt;span style="color: green"&gt;//pId可以再次使用&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;user = db.ExecuteDbObject&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;DbUser&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"select * from [user] where id=@id"&lt;/span&gt;, pId);&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/kingthy/aggbug/2155058.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/26/2155058.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kingthy/archive/2011/08/24/2152641.html</id><title type="text">我的KT库之----数据对象</title><summary type="text">什么是数据对象数据对象可用于简单处理数据的存储与交互，如将数据进行实体化处理。KT里的数据对象DbObject对象类似于一个“字典”对象，添加到数据对象里的数据都被放入内部的一个“槽”里进行维护</summary><published>2011-08-24T15:00:00Z</published><updated>2011-08-24T15:00:00Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kingthy/archive/2011/08/24/2152641.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/archive/2011/08/24/2152641.html"/><content type="html">&#xD;
&lt;p&gt;&lt;strong&gt;了解或者认识KT：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html"&gt;http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;在项目中如何使用KT？&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;KT是一个库，所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。&lt;/p&gt;  &lt;p&gt;本节将介绍大家认识KT库里的数据对象(DbObject)。KT里的数据对象是KT简易ORM框架里的一个对象角色，它存放于在&amp;#8220;KT.Framework&amp;#8220;下，当你已在你的项目里引用了KT库后，则写下以下代码就可以使用数据对象了。&lt;/p&gt;  &lt;pre &gt;using KT.Framework;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;什么是数据对象&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;数据对象可用于简单处理数据的存储与交互，如将数据进行实体化处理。KT里的数据对象DbObject对象类似于一个&amp;#8220;字典&amp;#8221;对象，添加到数据对象里的数据都被放入内部的一个&amp;#8220;槽&amp;#8221;里进行维护，如以下的代码:&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbObject &lt;/span&gt;obj = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbObject&lt;/span&gt;();&#xD;
obj[&lt;span style="color: rgb(163, 21, 21);"&gt;"name"&lt;/span&gt;] = &lt;span style="color: rgb(163, 21, 21);"&gt;"张三"&lt;/span&gt;;&#xD;
obj[&lt;span style="color: rgb(163, 21, 21);"&gt;"age"&lt;/span&gt;] = 23;&#xD;
&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163, 21, 21);"&gt;"姓名:{0}"&lt;/span&gt;, obj[&lt;span style="color: rgb(163, 21, 21);"&gt;"name"&lt;/span&gt;]);&#xD;
&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163, 21, 21);"&gt;"年龄:{0}"&lt;/span&gt;, obj[&lt;span style="color: rgb(163, 21, 21);"&gt;"age"&lt;/span&gt;]);&#xD;
&#xD;
&lt;span style="color: green;"&gt;//或者通过SetData/GetData&amp;lt;T&amp;gt;方法设置/获取数据&#xD;
&lt;/span&gt;obj.SetData(&lt;span style="color: rgb(163, 21, 21);"&gt;"name"&lt;/span&gt;, &lt;span style="color: rgb(163, 21, 21);"&gt;"李四"&lt;/span&gt;);&#xD;
&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163, 21, 21);"&gt;"姓名:{0}"&lt;/span&gt;, obj.GetData&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"name"&lt;/span&gt;));&#xD;
&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163, 21, 21);"&gt;"年龄:{0}"&lt;/span&gt;, obj.GetData&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"age"&lt;/span&gt;));&#xD;
&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.Read();&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;扩展数据对象&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;虽可以直接将数据对象当作一个字典对象使用，但很多场合下我们却是需要将数据进行实体化处理，所以我们需要将数据对象进行扩展。如以下的代码示例：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;用户对象&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser &lt;/span&gt;: &lt;span style="color: rgb(43, 145, 175);"&gt;DbObject&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: blue;"&gt;public &lt;/span&gt;User()&#xD;
    {&#xD;
&#xD;
    }&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;姓名&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public string &lt;/span&gt;Name&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.GetData&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;set&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;年龄&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public int &lt;/span&gt;Age&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.GetData&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Age"&lt;/span&gt;, 0);&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;set&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(163, 21, 21);"&gt;"Age"&lt;/span&gt;] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这样扩展后，我们的数据对象User就是强类型的了，如下面的使用代码示例：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser &lt;/span&gt;user = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;();&#xD;
user.Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"张三"&lt;/span&gt;;&#xD;
user.Age = 12;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;有时我们的类里需要使用到类内部的&amp;#8220;字段&amp;#8221;，则我们也可以将&amp;#8220;字段&amp;#8221;关联到数据对象里，如下面的扩展方法处理&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;用户对象&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser &lt;/span&gt;: &lt;span style="color: rgb(43, 145, 175);"&gt;DbObject&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: blue;"&gt;public &lt;/span&gt;DbUser()&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;this&lt;/span&gt;.AddInternalData(&lt;span style="color: rgb(163, 21, 21);"&gt;"Id"&lt;/span&gt;, () =&amp;gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.Id, (o) =&amp;gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.Id = o.As&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;());&#xD;
    }&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;编号&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public int &lt;/span&gt;Id;&#xD;
&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;姓名&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public string &lt;/span&gt;Name&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.GetData&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;set&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;年龄&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public int &lt;/span&gt;Age&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.GetData&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Age"&lt;/span&gt;, 0);&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;set&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(163, 21, 21);"&gt;"Age"&lt;/span&gt;] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;我们通过&amp;#8220;AddInternalData&amp;#8221;方法，将Id字段加入到了数据对象里，这样我们就可以在数据对象里使用&amp;#8221;Id&amp;#8221;数据了，如下面代码&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser &lt;/span&gt;user = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;();&#xD;
            user[&lt;span style="color: rgb(163, 21, 21);"&gt;"Id"&lt;/span&gt;] = 33;&#xD;
            &lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(user.Id);  &lt;span style="color: green;"&gt;//输出33&#xD;
            &lt;/span&gt;user.Id = 22;&#xD;
            &lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(user.GetData&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Id"&lt;/span&gt;));  &lt;span style="color: green;"&gt;//输出22&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;还有一种情况，有时对一种数据，我们多有种不同的名称，比如&amp;#8220;用户名&amp;#8221;，有时使用为&amp;#8220;name&amp;#8220;，有时又为&amp;#8220;username&amp;#8220;，比如以下两句SQL语句&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(163, 21, 21);"&gt;SELECT Name FROM [User]&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(163, 21, 21);"&gt;SELECT B.BookName,U.UserId,U.Name AS UserName FROM [Book] B INNER JOIN [User] U ON U.Id=B.UserId&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;在第一句SQL语句里，因为只单纯查询用户表，所以可以使用&amp;#8220;name&amp;#8221;做用户的名称，但在第二句SQL语句里，为了区别用户的数据，又采用了"username&amp;#8221;做为用户名数据，对于这种情况，我们也可以在数据对象里进行扩展，如以下示例代码&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;用户对象&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser &lt;/span&gt;: &lt;span style="color: rgb(43, 145, 175);"&gt;DbObject&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: blue;"&gt;public &lt;/span&gt;DbUser()&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;this&lt;/span&gt;.AddInternalData(&lt;span style="color: rgb(163, 21, 21);"&gt;"Id"&lt;/span&gt;, () =&amp;gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.Id, (o) =&amp;gt; &lt;span style="color: blue;"&gt;this&lt;/span&gt;.Id = o.As&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;());&#xD;
    }&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;编号&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public int &lt;/span&gt;Id;&#xD;
&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;姓名&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public string &lt;/span&gt;Name&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.GetData&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;, &lt;span style="color: blue;"&gt;null&lt;/span&gt;);&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;set&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
    &lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green;"&gt;年龄&#xD;
    &lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue;"&gt;public int &lt;/span&gt;Age&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;get&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;return this&lt;/span&gt;.GetData&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Age"&lt;/span&gt;, 0);&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;set&#xD;
        &lt;/span&gt;{&#xD;
            &lt;span style="color: blue;"&gt;this&lt;/span&gt;[&lt;span style="color: rgb(163, 21, 21);"&gt;"Age"&lt;/span&gt;] = &lt;span style="color: blue;"&gt;value&lt;/span&gt;;&#xD;
        }&#xD;
    }&#xD;
&#xD;
    &lt;span style="color: blue;"&gt;protected override bool &lt;/span&gt;OnBeforeSetData(&lt;span style="color: blue;"&gt;string &lt;/span&gt;name, &lt;span style="color: blue;"&gt;object &lt;/span&gt;value)&#xD;
    {&#xD;
        &lt;span style="color: blue;"&gt;if &lt;/span&gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"username"&lt;/span&gt;.Equals(name, &lt;span style="color: rgb(43, 145, 175);"&gt;StringComparison&lt;/span&gt;.OrdinalIgnoreCase))&#xD;
        {&#xD;
            &lt;span style="color: green;"&gt;//调用内部的SetDataImp方法，可避免再一次触发OnBeforeSetData方法&#xD;
            &lt;/span&gt;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.SetDataImp(&lt;span style="color: rgb(163, 21, 21);"&gt;"name"&lt;/span&gt;, value);&#xD;
&#xD;
            &lt;span style="color: green;"&gt;/**&#xD;
             * 注：以下两种方式都会再一次触发OnBeforeSetData方法，所以尽量不要使用&#xD;
             * this.SetData("name", value);&#xD;
             * this.Name = value.As&lt;/span&gt;&lt;span style="color: gray;"&gt;&amp;lt;string&amp;gt;&lt;/span&gt;&lt;span style="color: green;"&gt;();&#xD;
            **/&#xD;
            &lt;/span&gt;&lt;span style="color: blue;"&gt;return false&lt;/span&gt;;&#xD;
        }&#xD;
        &lt;span style="color: blue;"&gt;return base&lt;/span&gt;.OnBeforeSetData(name, value);&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;使用示例&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser &lt;/span&gt;user = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;();&#xD;
            user.Name = &lt;span style="color: rgb(163, 21, 21);"&gt;"张三"&lt;/span&gt;;&#xD;
            &lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(user.Name);  &lt;span style="color: green;"&gt;//输出"张三"&#xD;
            &lt;/span&gt;user[&lt;span style="color: rgb(163, 21, 21);"&gt;"username"&lt;/span&gt;] = &lt;span style="color: rgb(163, 21, 21);"&gt;"李四"&lt;/span&gt;;&#xD;
            &lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(user.Name);  &lt;span style="color: green;"&gt;//输出"李四"&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;数据对象的使用&lt;/strong&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;在上面示例代码里，也许会有很多同学都会问&amp;#8220;这样的数据对象，看不出它的好处在哪里，并且比直接写一个类结构还更复杂&amp;#8221;，是的，直接这样使用数据对象，真的体现不出它的好处在哪里，但如果将数据对象与&amp;#8220;数据库&amp;#8221;挂上关系，那就可以体现数据对象的好处在哪里了。比如我们的数据库有这样的两个表&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;p&gt;表1：User 用户表&lt;/p&gt;&#xD;
&lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Id&lt;/td&gt;&lt;td valign="top" width="200"&gt;int&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Name&lt;/td&gt;&lt;td valign="top" width="200"&gt;nvarchar(20)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Age&lt;/td&gt;&lt;td valign="top" width="200"&gt;int&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Phone&lt;/td&gt;&lt;td valign="top" width="200"&gt;nvarchar(20)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;LocationId&lt;/td&gt;&lt;td valign="top" width="200"&gt;int&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&#xD;
&#xD;
&#xD;
&lt;p&gt;表2：Location 位置表&lt;/p&gt;&#xD;
&lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Id&lt;/td&gt;&lt;td valign="top" width="200"&gt;int&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;UserId&lt;/td&gt;&lt;td valign="top" width="200"&gt;int&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;City&lt;/td&gt;&lt;td valign="top" width="200"&gt;nvarchar(30)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Address&lt;/td&gt;&lt;td valign="top" width="200"&gt;nvarchar(200)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Zipcode&lt;/td&gt;&lt;td valign="top" width="200"&gt;nvarchar(6)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;现在我们需要获取User表里的数据，比如有以下的SQL语句&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(163, 21, 21);"&gt;SELECT * FROM [User]&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;根据上表可以知道，这样的查询语句，将获取到的数据共有5个(Id,Name,Age,Phone,LocationId)，但如果将这些数据映射到某个实体类去，并且实现数据的一一对应，那我们就需要定义这5个属性或字段，如下面的类&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: gray;"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green;"&gt;用户对象&#xD;
&lt;/span&gt;&lt;span style="color: gray;"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue;"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;User &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: blue;"&gt;public &lt;/span&gt;User()&#xD;
    {&#xD;
&#xD;
    }&#xD;
    &lt;span style="color: blue;"&gt;public int &lt;/span&gt;Id { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&#xD;
    &lt;span style="color: blue;"&gt;public string &lt;/span&gt;Name { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&#xD;
    &lt;span style="color: blue;"&gt;public int &lt;/span&gt;Age { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&#xD;
    &lt;span style="color: blue;"&gt;public string &lt;/span&gt;Phone { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&#xD;
    &lt;span style="color: blue;"&gt;public int &lt;/span&gt;LocationId { &lt;span style="color: blue;"&gt;get&lt;/span&gt;; &lt;span style="color: blue;"&gt;set&lt;/span&gt;; }&#xD;
}&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;但假如我们现在在获取用户数据时还需要同时获取用户的地址位置数据，如以下的SQL语句&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(163, 21, 21);"&gt;SELECT U.Id,U.Name,L.City,L.Address,L.Zipcode FROM [User] U INNER JOIN [Location] L ON L.Id=U.Location.Id&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;这条查询语句我们共需要获取Id,Name,City,Address,Zipcode这5个数据，很明显，这里的数据与上面的User类结构是不相同的，也就是如果需要将这条SQL语句映射为类对象，我们又需要建多一个类结构对象。也就是每当我们SQL语句有变化时，我们就需要增加不同的类对象，这样对我们来说是非常麻烦且工作量是非常之大的。&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;如果我们使用数据对象来做数据映射，因为数据对象本来就是一个&amp;#8220;字典&amp;#8221;对象，所以不管我们的SQL语句如何变化，数据都是进入到数据对象里的&amp;#8220;槽&amp;#8221;里，再根据&amp;#8220;扩展数据对象&amp;#8221;反映到对象的&amp;#8220;属性&amp;#8221;或&amp;#8220;字段&amp;#8221;里。比如上面两句SQL语句我们都可以将其映射为&amp;#8220;扩展数据对象&amp;#8221;那段里定义的&amp;#8220;&lt;font color="#4bacc6"&gt;DbUser&lt;/font&gt;&amp;#8221;对象，对于未&amp;#8220;扩展&amp;#8221;的&amp;#8220;Phone,LocationId,City,Address,Zipcode&amp;#8220;等数据，我们则可以在需要时通过数据对象的&amp;#8220;GetData&amp;lt;T&amp;gt;&amp;#8221;方法获取，如下：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;phone = user.GetData&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"Phone"&lt;/span&gt;);&#xD;
&lt;span style="color: blue;"&gt;var &lt;/span&gt;locationId = user.GetData&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163, 21, 21);"&gt;"LocationId"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;从上面的示例中，我们可以看到DbObject有点类似于DataTable，确切的说应该是像DataRow，只当一个相同的DbObject列表集时，才能说象DataTable。KT也提供了DbObject的扩展方法，通过扩展方法DataTable与List&amp;lt;DbObject&amp;gt;可以互相转换。如下示例：&lt;/p&gt;&#xD;
&#xD;
&lt;pre &gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DataTable &lt;/span&gt;table = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;DataTable&lt;/span&gt;();&#xD;
            table.Columns.Add(&lt;span style="color: rgb(163, 21, 21);"&gt;"name"&lt;/span&gt;, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;string&lt;/span&gt;));&#xD;
            table.Columns.Add(&lt;span style="color: rgb(163, 21, 21);"&gt;"age"&lt;/span&gt;, &lt;span style="color: blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color: blue;"&gt;int&lt;/span&gt;));&#xD;
            table.Rows.Add(&lt;span style="color: rgb(163, 21, 21);"&gt;"张三"&lt;/span&gt;, 20);&#xD;
            table.Rows.Add(&lt;span style="color: rgb(163, 21, 21);"&gt;"李四"&lt;/span&gt;, 30);&#xD;
            &lt;span style="color: blue;"&gt;var &lt;/span&gt;users = table.ToDbObjectList&amp;lt;&lt;span style="color: rgb(43, 145, 175);"&gt;DbUser&lt;/span&gt;&amp;gt;();&#xD;
            &lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(users.Count);    &lt;span style="color: green;"&gt;//输出：2&#xD;
            &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(users[0].Name);  &lt;span style="color: green;"&gt;//输出：张三&#xD;
            &lt;/span&gt;&lt;span style="color: blue;"&gt;var &lt;/span&gt;userTable = users.ToDataTable();&#xD;
            &lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(userTable.Rows.Count);  &lt;span style="color: green;"&gt;//输出：2&#xD;
            &lt;/span&gt;&lt;span style="color: rgb(43, 145, 175);"&gt;Console&lt;/span&gt;.WriteLine(userTable.Rows[0][&lt;span style="color: rgb(163, 21, 21);"&gt;"Name"&lt;/span&gt;]);&lt;span style="color: green;"&gt;//输出：张三&#xD;
&lt;/span&gt;&lt;/pre&gt; &#xD;
&lt;img src="http://www.cnblogs.com/kingthy/aggbug/2152641.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/24/2152641.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kingthy/archive/2011/08/20/2147355.html</id><title type="text">【原创】腾讯微博的XSS攻击漏洞</title><summary type="text">相信大家都知道新浪微博在6月28日发生的XSS攻击事件了吧？在那晚里，大量新浪微博用户自动发送微博信息和自动关注一名叫“hellosamy“的用户。  究竟XSS攻击为什么能有这么大的威力？现在很多网站都采用了Cookie记录访问者的登录状态，在进行某些功能操作时（比如：发微博），服务器判断用户的Cookie记录的登录状态，如果用户是登录状态的则允许操作。正常情况下这样的操作看起来是安全的，因为服...</summary><published>2011-08-20T09:44:00Z</published><updated>2011-08-20T09:44:00Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kingthy/archive/2011/08/20/2147355.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/archive/2011/08/20/2147355.html"/><content type="html">&#xD;
&lt;p&gt;相信大家都知道新浪微博在6月28日发生的XSS攻击事件了吧？在那晚里，大量新浪微博用户自动发送微博信息和自动关注一名叫&amp;#8220;hellosamy&amp;#8220;的用户。&lt;/p&gt;  &lt;p&gt;究竟XSS攻击为什么能有这么大的威力？现在很多网站都采用了Cookie记录访问者的登录状态，在进行某些功能操作时（比如：发微博），服务器判断用户的Cookie记录的登录状态，如果用户是登录状态的则允许操作。正常情况下这样的操作看起来是安全的，因为服务器假想那些操作都是用户自己主动提交的操作。但假如攻击者进行了恶意的渗透（页面脚本注入或会话截取），模拟了用户的操作，这样这些操作就是恶意的并且可能是带有&amp;#8220;危险&amp;#8221;性的！比如新浪微博里的自动发微博、自动关注等等。&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;XSS攻击分成两类&lt;/p&gt;  &lt;p&gt;一类是来自内部的攻击，主要指的是利用网页自身的漏洞，将恶意脚本注入到网页，当用户访问此页面时，恶意脚本也会跟着执行，这样恶意脚本就能利用到用户的所有状态数据执行恶意操作，比如发微博、私信等（新浪微博的XSS攻击就是此类）。 &lt;/p&gt;  &lt;p&gt;另一类则是来自外部的攻击，主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。如当我们要渗透一个站点，我们自己构造一个有跨站漏洞的网页，然后构造跨站语句，通过结合其它技术，如社会工程学等，欺骗目标服务器的管理员打开。&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;新浪微博的XSS攻击事件过去了，腾讯微博目前还没有发生此类事件，但这不表明腾讯微博是安全的：）&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;因为我这几天都在捣鼓腾讯微博的小应用开发，所以很经常去逛腾讯微博应用频道，想看看最近推荐的应用有哪些（其实是想看到自己的应用有没有被推荐出来，很可惜！没有，失望：(！），昨晚在闲逛腾讯微博的应用频道，突然好奇心突起，测试了一下，竟然被我发现一个XSS注入点！&lt;/p&gt;  &lt;p&gt;腾讯微博的应用介绍地址基本都是这样的：&lt;/p&gt;  &lt;p&gt;&lt;a title="http://app.t.qq.com/app/intro/24042/test9/http%253A%252F%252Fappst.qq.com%252Fcgi-bin%252Fwbapps%252Fwb_appstore_app.cgi%253Fappid%253D24042" href="http://app.t.qq.com/app/intro/xxxxxxxxx"&gt;http://app.t.qq.com/app/intro/xxxxxxxxx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;比如这个不知是什么虾米的&amp;#8220;test9&amp;#8220;应用的介绍地址是这样的：&lt;/p&gt;  &lt;p&gt;&lt;a title="http://app.t.qq.com/app/intro/24042/test9/http%253A%252F%252Fappst.qq.com%252Fcgi-bin%252Fwbapps%252Fwb_appstore_app.cgi%253Fappid%253D24042" href="http://app.t.qq.com/app/intro/24042/test9/http%253A%252F%252Fappst.qq.com%252Fcgi-bin%252Fwbapps%252Fwb_appstore_app.cgi%253Fappid%253D24042"&gt;http://app.t.qq.com/app/intro/24042/test9/http%253A%252F%252Fappst.qq.com%252Fcgi-bin%252Fwbapps%252Fwb_appstore_app.cgi%253Fappid%253D24042&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;看到后面的&amp;#8220;http%253A%252F%252Fappst.qq.com%252Fcgi-bin%252Fwbapps%252Fwb_appstore_app.cgi%253Fappid%253D24042&amp;#8221;这串东西没有？很明显是一个URL地址，这个URL地址在哪里用到呢？我们打开那应用的介绍地址，然后查看一下源码，会发现这个URL地址会在一个iframe里出现，如下图：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kingthy/201108/201108201743564659.png"&gt;&lt;img style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/kingthy/201108/201108201743581114.png" width="720" height="444" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;如果我们在那URL里加点东西会怎样？试试，改这样的地址:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://app.t.qq.com/app/intro/24042/test9/http%253A%252F%252Fappst.qq.com%252Fcgi-bin%252Fwbapps%252Fwb_appstore_app.cgi%253Fappid%253D24042%22%20onload=%22alert('Hello');" href="http://app.t.qq.com/app/intro/24042/test9/http%253A%252F%252Fappst.qq.com%252Fcgi-bin%252Fwbapps%252Fwb_appstore_app.cgi%253Fappid%253D24042%22%20onload=%22alert('Hello');"&gt;http://app.t.qq.com/app/intro/24042/test9/http%253A%252F%252Fappst.qq.com%252Fcgi-bin%252Fwbapps%252Fwb_appstore_app.cgi%253Fappid%253D24042%22%20onload=%22alert('Hello');&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;也就是将那URL改为这样的URL数据（未编码）&lt;/p&gt;  &lt;pre &gt;http://appst.qq.com/cgi-bin/wbapps/wb_appstore_app.cgi?appid=24042" onload="alert('Hello');&lt;/pre&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;访问上面的链接，浏览器向我Say hello（如下），很好！很好！&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kingthy/201108/20110820174359459.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/kingthy/201108/201108201743599280.png" width="746" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;源码就成了这样的：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kingthy/201108/201108201744009803.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/kingthy/201108/201108201744002278.png" width="749" height="45" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;注意：在IE9下，上面的XSS注入无效，只对IE8及以下有效&lt;/font&gt;&lt;/strong&gt;，IE9里将会这样提示：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kingthy/201108/20110820174400850.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/kingthy/201108/201108201744009737.png" width="750" height="42" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;并且上面的代码里会自动将onload给转换掉，如下图：&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kingthy/201108/201108201744018210.png"&gt;&lt;img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/kingthy/201108/201108201744033900.png" width="766" height="384" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;虽然IE9里不能构成XSS攻击，但是现在有多少人在用IE9呢？&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;好了，注入点有了，后面该做什么的就做什么吧，打酱油的打酱油，泡妞的泡妞吧。具体如何打酱油、泡妞，我就不再教你们了，嘿嘿，我没有你们这么坏：）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;真的想看XSS攻击效果？&lt;a href="http://goo.gl/7e7tb" target="_blank"&gt;请猛点这里！&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt; (注：此演示需要在您已登录腾讯微博的情况下才能XSS攻击成功，如果成功，你将会自动关注我的微博&lt;a href="http://t.qq.com/kingthy"&gt;http://t.qq.com/kingthy&lt;/a&gt;和发送一条微博信息）&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;备注说明：此漏洞在我发此日志前我已告诉腾讯官方，所以如果你看到我这篇文章后，发现上面的漏洞根本无法使用了，那就是腾讯已修复了此漏洞。如果还未修复，那只能说腾讯不重视或者还在打酱油ING&amp;#8230;&amp;#8230;&lt;/p&gt;&#xD;
&#xD;
&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000" size="4"&gt;声明：请勿利用此漏洞做任何非法的事！否则造成的任何后果都全由你个人承担！本人概不负责！！！！&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000" size="4"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;文章转载请注明本人博客来源地址！&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &#xD;
&lt;img src="http://www.cnblogs.com/kingthy/aggbug/2147355.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/20/2147355.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kingthy/archive/2011/08/16/2140410.html</id><title type="text">我的KT库之-----缓存与配置</title><summary type="text">本节将介绍大家认识KT库里的缓存与配置，KT的缓存只是对System.Web.Cache的简单封装；KT的配置也是采用标准的XML文件进行配置。</summary><published>2011-08-16T03:37:00Z</published><updated>2011-08-16T03:37:00Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kingthy/archive/2011/08/16/2140410.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/archive/2011/08/16/2140410.html"/><content type="html">&lt;p&gt;&lt;strong&gt;了解或者认识KT：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html"&gt;http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;在项目中如何使用KT？&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;KT是一个库，所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本节将介绍大家认识KT库里的缓存与配置。它们都存放在&amp;#8220;KT.Core&amp;#8220;下，当你已在你的项目里引用了KT库后，则写下以下代码就可以使用到KT里的缓存与配置对象了。&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;KT.Core;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="5"&gt;缓存&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;KT的缓存只是简单的对.NET的缓存Cache进行了一个简单的包装，以便更方便的使用。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1、增加一个缓存项&lt;/strong&gt;：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: green"&gt;//增加一个长时效的缓存项&#xD;
&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;Cache&lt;/span&gt;.Add(&lt;span style="color: rgb(163,21,21)"&gt;"key1"&lt;/span&gt;, &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.Now);&#xD;
&lt;span style="color: green"&gt;//增加一个具有绝对过滤时间的缓存项&#xD;
&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;Cache&lt;/span&gt;.Add(&lt;span style="color: rgb(163,21,21)"&gt;"key2"&lt;/span&gt;, &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.Now, &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.Today.AddDays(1));&#xD;
&lt;span style="color: green"&gt;//增加一个与文件关联的缓存项，如果文件有更改则缓存失效&#xD;
&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;Cache&lt;/span&gt;.Add(&lt;span style="color: rgb(163,21,21)"&gt;"key3"&lt;/span&gt;, &lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.Now, &lt;span style="color: rgb(163,21,21)"&gt;"c:\cache.txt"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2、删除缓存项&lt;/strong&gt;&lt;/p&gt;&lt;pre &gt;&lt;span style="color: green"&gt;//删除对应键值的缓存项&#xD;
&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;Cache&lt;/span&gt;.Remove(&lt;span style="color: rgb(163,21,21)"&gt;"key1"&lt;/span&gt;);&#xD;
&lt;span style="color: green"&gt;//清空所有缓存&#xD;
&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;Cache&lt;/span&gt;.Clear();&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;3、获取某个缓存项&lt;/strong&gt;&lt;/p&gt;&lt;pre &gt;&lt;span style="color: green"&gt;//获取对应键值的缓存项&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;object &lt;/span&gt;value = &lt;span style="color: rgb(43,145,175)"&gt;Cache&lt;/span&gt;.Get(&lt;span style="color: rgb(163,21,21)"&gt;"key1"&lt;/span&gt;);&#xD;
&lt;span style="color: green"&gt;//获取对应键值的缓存项，如果缓存没有数据，则调用委托获取数据并存入缓存后返回&#xD;
&lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;DateTime &lt;/span&gt;time = &lt;span style="color: rgb(43,145,175)"&gt;Cache&lt;/span&gt;.GetOrAdd&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"key2"&lt;/span&gt;, () =&amp;gt;&#xD;
{&#xD;
    &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;DateTime&lt;/span&gt;.Now;&#xD;
});&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="5"&gt;&lt;strong&gt;配置&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;平时在项目开发中，参数配置都习惯在项目配置文件(app.config或web.config)的AppSettings节点中配置，比如以下示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;appSettings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;api_key&lt;/span&gt;" &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;key-2011&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&#xD;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;api_secret&lt;/span&gt;" &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;iu5r324323423422&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&#xD;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;appSettings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;程序代码里要使用参数时，直接调用即可，如下代码：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;string &lt;/span&gt;api_key = &lt;span style="color: rgb(43,145,175)"&gt;ConfigurationManager&lt;/span&gt;.AppSettings[&lt;span style="color: rgb(163,21,21)"&gt;"api_key"&lt;/span&gt;];&#xD;
&lt;span style="color: blue"&gt;string &lt;/span&gt;api_secret = &lt;span style="color: rgb(43,145,175)"&gt;ConfigurationManager&lt;/span&gt;.AppSettings[&lt;span style="color: rgb(163,21,21)"&gt;"api_secret"&lt;/span&gt;];&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果我们的参数非常的多，这将会导致我们的项目配置文件非常的大。并且如果在web项目中，我们的配置参数在运行过程中需要更改，则将会导致我们的web站点应用程序的重启！对于正常运行的项目来说，程序的重启是希望不要发生的，因为这将会导致session的丢失等相关问题。虽然我们可以在appSettings节点里使用file属性采用外部文件来配置避免这问题，但在某些场合下，file属性却是无能为力了。比如需要分多个配置文件存储不同的数据，file属性是无法做到的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;KT的配置&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;1、KT的配置文件&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;KT的配置文件，默认存储于程序根目录下的config目录，当然，你也可以自定义配置的存储路径，比如在app.config或web.config里的AppSettings节点里配置以下设置。&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;appSettings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
    &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt;方法1：设置绝对路径&lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&#xD;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;KT.SETTINGS.BASEPATH&lt;/span&gt;" &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;c:\data\config\&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&#xD;
    &amp;lt;!--&lt;/span&gt;&lt;span style="color: green"&gt;方法2：设置相对路径&lt;/span&gt;&lt;span style="color: blue"&gt;--&amp;gt;&#xD;
    &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;KT.SETTINGS.BASEPATH&lt;/span&gt;" &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;~/data/config/&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&#xD;
  &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;appSettings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;如果未设置则默认是程序的根目录(Web应用程序则是站点根目录；Windows应用程序则是可执行文件所在的目录)下的config目录&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;KT的配置文件采用的是标准xml文件，如下示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;" &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;" &lt;span style="color: blue"&gt;?&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;k1&lt;/span&gt;" &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k2&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k2&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k.name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;aliey&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k.name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k.age&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;20&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k.age&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;上面配置中，共定义了4个参数。其中k1参数的定义同.net里的appSettings一样，通过&amp;lt;add&amp;gt;节点元素定义；其它的参数都是采用节点形式定义。&lt;/p&gt;&#xD;
&lt;p&gt;KT的配置文件有两个特殊的节点&lt;font color="#c0504d"&gt;&amp;lt;add&amp;gt;&lt;/font&gt;与&lt;font color="#c0504d"&gt;&amp;lt;include&amp;gt;&lt;/font&gt;节点。&lt;/p&gt;&#xD;
&lt;p&gt;1、&lt;font color="#d16349"&gt;&amp;lt;add&amp;gt;&lt;/font&gt;节点：&lt;font color="#9b00d3"&gt;如果定义此节点，并且带有&amp;#8220;&lt;font color="#ff0000"&gt;key&lt;/font&gt;&amp;#8221;属性&lt;/font&gt;，则表示增加一个参数，参数值由&amp;#8220;&lt;font color="#ff0000"&gt;value&lt;/font&gt;&amp;#8221;属性定义。如果定义此节点，但不带有任何属性，则看作普通的参数"add&amp;#8221;对待。如下面示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;" &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;" &lt;span style="color: blue"&gt;?&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;k1&lt;/span&gt;" &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;action/add&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;共定义了&amp;#8220;k1&amp;#8221;与&amp;#8220;add&amp;#8221;两个参数。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2、&lt;font color="#c0504d"&gt;&amp;lt;include&amp;gt;&lt;/font&gt;节点：如果定义此节点，并且带有&amp;#8220;&lt;font color="#ff0000"&gt;file&lt;/font&gt;&amp;#8221;属性，则表示是引用相关的配置文件。否则如果不带有任何属性，则看作普通的参数&amp;#8220;include&amp;#8221;对待。如下面示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;" &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;" &lt;span style="color: blue"&gt;?&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;k1&lt;/span&gt;" &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;action/add&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;include &lt;/span&gt;&lt;span style="color: red"&gt;file&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;mysettings.xml&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;include &lt;/span&gt;&lt;span style="color: red"&gt;file&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;font color="#0000ff"&gt;c:\config\&lt;/font&gt;&lt;span style="color: blue"&gt;mysettings2.xml&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;include&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;action/include&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;include&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;共导入了&amp;#8220;&lt;span style="color: blue"&gt;mysettings.xml&lt;/span&gt;&amp;#8221;与&amp;#8220;&lt;font color="#0000ff"&gt;c:\config\&lt;/font&gt;&lt;span style="color: blue"&gt;mysettings2.xml&lt;/span&gt;&amp;#8221;两个配置文件里的配置参数，并且还定义了一个&amp;#8220;include&amp;#8221;参数，其中file属性的值可以是相对路径或绝对路径，如果是相对路径则是&amp;#8220;相对于当前配置文件所在的路径&amp;#8221;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;所有参数的节点都可以重复定义，但参数最终的值将由最后一个定义节点决定(注：&amp;#8220;&amp;lt;include file=&amp;#8221;&amp;#8221;&amp;gt;&amp;#8221;节点是例外)，即最后定义的将覆盖先前定义的值。如下示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;" &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;" &lt;span style="color: blue"&gt;?&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;k1&lt;/span&gt;" &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k1&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k1&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;最终，&amp;#8220;k1"的值是&amp;#8220;2&amp;#8221;。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;2、配置参数的获取&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;参数的获取是通过KT.Core.Settings实例类获取，此类共有几个静态方法和属性。&lt;/p&gt;&#xD;
&lt;p&gt;A、&lt;font color="#0000ff"&gt;BasePath&lt;/font&gt; : 返回存储配置文件所在的基路径。此值可以通过上面所说的方法，在appSettings里修改。默认是程序根目录下的config目录.&lt;/p&gt;&#xD;
&lt;p&gt;B、&lt;font color="#0000ff"&gt;Default&lt;/font&gt; : 返回默认存储配置文件的所有配置参数值。此默认配置参数存储于基路径下的"settings.config"文件。&lt;/p&gt;&#xD;
&lt;p&gt;C、&lt;font color="#0000ff"&gt;From&lt;/font&gt; ： 从配置文件获取配置参数。配置文件可以是相对路径或绝对路径，如果是相对路径则相对于BasePath。&lt;/p&gt;&#xD;
&lt;p&gt;D、&lt;font color="#0000ff"&gt;Get&amp;lt;T&amp;gt;&lt;/font&gt;： 从配置文件获取配置参数并映射为某个实体类。配置文件可以是相对路径或绝对路径，如果是相对路径则相对于BasePath。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;假如以下配置存储在基路径下的settings.config文件&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;xml &lt;/span&gt;&lt;span style="color: red"&gt;version&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1.0&lt;/span&gt;" &lt;span style="color: red"&gt;encoding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;utf-8&lt;/span&gt;" &lt;span style="color: blue"&gt;?&amp;gt;&#xD;
&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;key&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;k1&lt;/span&gt;" &lt;span style="color: red"&gt;value&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;1&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k2&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;2&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k2&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k.name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;aliey&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k.name&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
  &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k.age&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;20&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;k.age&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&#xD;
&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;settings&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;那我们可以这样获取参数&amp;#8220;k1&amp;#8221;、&amp;#8220;k2&amp;#8221;、&amp;#8220;k.name&amp;#8221;的值&lt;/p&gt;&lt;pre &gt;&lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(43,145,175)"&gt;Settings&lt;/span&gt;.Default[&lt;span style="color: rgb(163,21,21)"&gt;"k1"&lt;/span&gt;]);&#xD;
&lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(43,145,175)"&gt;Settings&lt;/span&gt;.Default[&lt;span style="color: rgb(163,21,21)"&gt;"k2"&lt;/span&gt;]);&#xD;
&lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(43,145,175)"&gt;Settings&lt;/span&gt;.Default[&lt;span style="color: rgb(163,21,21)"&gt;"k.name"&lt;/span&gt;]);&#xD;
&lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(43,145,175)"&gt;Settings&lt;/span&gt;.Default[&lt;span style="color: rgb(163,21,21)"&gt;"k.age"&lt;/span&gt;]);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果我们配置文件不是默认的&amp;#8220;settings.config&amp;#8221;文件，那我们可以这样获取配置&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;setttings = &lt;span style="color: rgb(43,145,175)"&gt;Settings&lt;/span&gt;.From(&lt;span style="color: rgb(163,21,21)"&gt;"mysettings.xml"&lt;/span&gt;);&#xD;
&lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(setttings[&lt;span style="color: rgb(163,21,21)"&gt;"k1"&lt;/span&gt;]);&#xD;
&lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(setttings[&lt;span style="color: rgb(163,21,21)"&gt;"k2"&lt;/span&gt;]);&#xD;
&lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(setttings[&lt;span style="color: rgb(163,21,21)"&gt;"k.name"&lt;/span&gt;]);&#xD;
&lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(setttings[&lt;span style="color: rgb(163,21,21)"&gt;"k.age"&lt;/span&gt;]);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;如果我们的配置文件结构可以映射为某个类，比如上面的配置文件可以映射为以下类结构&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;KItem&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: blue"&gt;public string &lt;/span&gt;Name { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&#xD;
    &lt;span style="color: blue"&gt;public int &lt;/span&gt;Age { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&#xD;
}&#xD;
&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;AppSettings&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: blue"&gt;public int &lt;/span&gt;K1 { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&#xD;
    &lt;span style="color: blue"&gt;public int &lt;/span&gt;K2 { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&#xD;
    &lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;KItem &lt;/span&gt;K { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; } &#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;那我们还可以直接通过Get&amp;lt;T&amp;gt;方法直接获取配置实体类，如下面的示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;app = &lt;span style="color: rgb(43,145,175)"&gt;Settings&lt;/span&gt;.Get&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;AppSettings&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"mysettings.xml"&lt;/span&gt;);&#xD;
 &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"K1={0}"&lt;/span&gt;, app.K1);&#xD;
 &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"K2={0}"&lt;/span&gt;, app.K2);&#xD;
 &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"K.Name={0}"&lt;/span&gt;, app.K.Name);&#xD;
 &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"K.Age={0}"&lt;/span&gt;, app.K.Age);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;由于&lt;font color="#4bacc6"&gt;AppSettings&lt;/font&gt;里的属性&amp;#8220;K&amp;#8221;是一个&amp;#8220;&lt;font color="#4f81bd"&gt;KItem&lt;/font&gt;&amp;#8221;类型，所以KT将会自动将&amp;#8220;&lt;font color="#c0504d"&gt;&amp;lt;k.name&amp;gt;&lt;/font&gt;&amp;#8221;和&amp;#8220;&lt;font color="#c0504d"&gt;&amp;lt;k.age&amp;gt;&lt;/font&gt;&amp;#8221;这两个节点映射为&amp;#8220;&lt;font color="#4bacc6"&gt;KItem&lt;/font&gt;&amp;#8221;类型的值.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注：KT的配置都已启用缓存功能，所以不需要担心它的效率问题。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font size="4"&gt;&lt;strong&gt;我们可以用KT的配置做什么？&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#8064a2"&gt;A、各应用程序之间的配置可以互相独立存放&lt;/font&gt;。 比如在WEB环境下，同一个站点下有多个不同的WEB应用程序，如论坛、博客、接口服务等等，那我们可以将它们的配置分别以不同的文件名存放于&amp;#8220;基路径&amp;#8221;下，如&amp;#8220;forum.config&amp;#8221;, &amp;#8220;blog.config&amp;#8221;,"service.config&amp;#8220;，再调用From或Get&amp;lt;T&amp;gt;方法读取不同的文件名即可。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#8064a2"&gt;B、各应用程序之间的配置可以共享使用&lt;/font&gt;。比如上面例子所说的，如果&amp;#8220;论坛&amp;#8221;程序要调用&amp;#8220;博客&amp;#8221;里的参数，则我们可以在论坛的配置参数里加入&amp;#8220;&amp;lt;include file=&amp;#8220;blog.config&amp;#8221;&amp;gt;&amp;#8221;节点引入&amp;#8220;博客&amp;#8221;的配置参数。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#8064a2"&gt;C、各应用程序的配置可以统一存放&lt;/font&gt;。比如在WEB环境下，我们有A、B、C三个站点，这三个站点都需要用到同一个数据库，于是我们分别在这三个站点下写了一个同样用户名与密码的&amp;#8220;ConnectionString&amp;#8220;配置参数，当某一天，我们修改了数据库的用户密码，那我们就要分别打开这三个站点的目录去修改&amp;#8220;ConnectionString&amp;#8221;配置参数。而如果我们将A、B、C三个站点的KT配置的基路径设置为同一个目录，那我们就只要打开一个目录就可以修改到三个站点的参数了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kingthy/aggbug/2140410.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/16/2140410.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kingthy/archive/2011/08/11/2135390.html</id><title type="text">我的KT库之-----对象池</title><summary type="text">本节将介绍大家认识KT库里的对象池和如何使用它们，对象池，顾名思义就是用于存储对象的池，在它的生命周期内维护着它里面的所有对象，当对象池被销毁时，它里面的所有对象也将跟着销毁。</summary><published>2011-08-11T10:43:00Z</published><updated>2011-08-11T10:43:00Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kingthy/archive/2011/08/11/2135390.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/archive/2011/08/11/2135390.html"/><content type="html">&lt;p&gt;&lt;strong&gt;了解或者认识KT：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html"&gt;http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;在项目中如何使用KT？&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;KT是一个库，所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本节将介绍大家认识KT库里的对象池和如何使用它们。KT里的对象池对象都存放在&amp;#8220;KT.Core.ObjectPool&amp;#8220;下，当你已在你的项目里引用了KT库后，则写下以下代码就可以使用到KT里的所有对象池了。&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;using &lt;/span&gt;KT.Core.ObjectPool;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;先了解一下对象池&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;对象池，顾名思义就是用于存储对象的池（汗-_-!!)，在它的生命周期内维护着它里面的所有对象，确保在同一个生命周期内对象池里的数据的唯一性。当对象池被销毁时，它里面的所有对象也将跟着销毁。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;它的接口定义：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green"&gt;对象池接口&#xD;
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;public interface &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;IObjectPool &lt;/span&gt;: &lt;span style="color: rgb(43,145,175)"&gt;IDisposable&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green"&gt;添加对象，如果已存在key，则更新旧值&#xD;
    &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    /// &amp;lt;param name="key"&amp;gt;&lt;/span&gt;&lt;span style="color: green"&gt;键值&lt;/span&gt;&lt;span style="color: gray"&gt;&amp;lt;/param&amp;gt;&#xD;
    /// &amp;lt;param name="value"&amp;gt;&amp;lt;/param&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;Add(&lt;span style="color: blue"&gt;object &lt;/span&gt;key, &lt;span style="color: blue"&gt;object &lt;/span&gt;value);&#xD;
&#xD;
    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green"&gt;判断是否存在某个对象&#xD;
    &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    /// &amp;lt;param name="key"&amp;gt;&amp;lt;/param&amp;gt;&#xD;
    /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;bool &lt;/span&gt;Contains(&lt;span style="color: blue"&gt;object &lt;/span&gt;key);&#xD;
&#xD;
    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green"&gt;移除某个对象&#xD;
    &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    /// &amp;lt;param name="key"&amp;gt;&amp;lt;/param&amp;gt;&#xD;
    /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;bool &lt;/span&gt;Remove(&lt;span style="color: blue"&gt;object &lt;/span&gt;key);&#xD;
&#xD;
    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green"&gt;返回某个对象,如果不存在则返回null&#xD;
    &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    /// &amp;lt;param name="key"&amp;gt;&amp;lt;/param&amp;gt;&#xD;
    /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;object &lt;/span&gt;Get(&lt;span style="color: blue"&gt;object &lt;/span&gt;key);&#xD;
&#xD;
    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green"&gt;返回对象池中已存储的对象数量&#xD;
    &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;Count { &lt;span style="color: blue"&gt;get&lt;/span&gt;; }&#xD;
&#xD;
    &lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&#xD;
    /// &lt;/span&gt;&lt;span style="color: green"&gt;清空对象池&#xD;
    &lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
    &lt;/span&gt;&lt;span style="color: blue"&gt;void &lt;/span&gt;Clear();&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;目前在KT里实现了此接口的共有两个对象，如下：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kingthy/201108/201108111841518012.jpg"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="kt_1" border="0" alt="kt_1" src="http://images.cnblogs.com/cnblogs_com/kingthy/201108/201108111841564203.jpg" width="480" height="191" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;其中&lt;font color="#4bacc6"&gt;DictionaryObjectPool&lt;/font&gt;是采用Hashtable实现的对象池，用于向其它对象池提供基础服务。&lt;font color="#4bacc6"&gt;ObjectPoolBase&lt;/font&gt;则是一个抽象类，是其它对象池的基类。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;对象池的种类&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;根据生命周期的不同，可分为不同种类的对象池，KT目前共有以下几种：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;A、WebApplicationObjectPool&lt;/strong&gt;&lt;/font&gt;: 基于ASP.NET 应用程序的对象池&lt;/p&gt;&#xD;
&lt;p&gt;对于同一个ASP.NET应用程序（同一个Web站点程序）来说，对象池里的数据都是共用的，使用示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: rgb(43,145,175)"&gt;WebApplicationObjectPool&lt;/span&gt;.Instance.Add(&lt;span style="color: rgb(163,21,21)"&gt;"数据"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"数据值"&lt;/span&gt;);&#xD;
&lt;span style="color: blue"&gt;var &lt;/span&gt;value1 = &lt;span style="color: rgb(43,145,175)"&gt;WebApplicationObjectPool&lt;/span&gt;.Instance.Get(&lt;span style="color: rgb(163,21,21)"&gt;"数据"&lt;/span&gt;).As&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;();&#xD;
&#xD;
&lt;span style="color: green"&gt;//通过扩展方法获取数据&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;value2 = &lt;span style="color: rgb(43,145,175)"&gt;WebApplicationObjectPool&lt;/span&gt;.Instance.GetOrAdd&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"数据1"&lt;/span&gt;, () =&amp;gt; &lt;span style="color: rgb(163,21,21)"&gt;"数据值1"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;注意：如果需要在ASP.NET应用程序结束时自动回收数据，请在Global.asax里的Application_End事件里加上回收代码，如下示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;protected void &lt;/span&gt;Application_End(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: rgb(43,145,175)"&gt;EventArgs &lt;/span&gt;e)&#xD;
{&#xD;
    &lt;span style="color: rgb(43,145,175)"&gt;WebApplicationObjectPool&lt;/span&gt;.Instance.Dispose();&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;B、WebSessionObjectPool&lt;/font&gt;&lt;/strong&gt; : 基于ASP.NET Session会话期的对象池&lt;/p&gt;&#xD;
&lt;p&gt;对于同一个Session会话来说，对象池里的数据都是共用的，使用示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: rgb(43,145,175)"&gt;WebSessionObjectPool&lt;/span&gt;.Instance.Add(&lt;span style="color: rgb(163,21,21)"&gt;"数据"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"数据值"&lt;/span&gt;);&#xD;
&lt;span style="color: blue"&gt;var &lt;/span&gt;value1 = &lt;span style="color: rgb(43,145,175)"&gt;WebSessionObjectPool&lt;/span&gt;.Instance.Get(&lt;span style="color: rgb(163,21,21)"&gt;"数据"&lt;/span&gt;).As&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;();&#xD;
&#xD;
&lt;span style="color: green"&gt;//通过扩展方法获取数据&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;value2 = &lt;span style="color: rgb(43,145,175)"&gt;WebSessionObjectPool&lt;/span&gt;.Instance.GetOrAdd&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"数据1"&lt;/span&gt;, () =&amp;gt; &lt;span style="color: rgb(163,21,21)"&gt;"数据值1"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;注意：如果需要在Session失效时自动回收数据，请在Global.asax里的Session_End事件里加上回收代码，如下示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;protected void &lt;/span&gt;Session_End(&lt;span style="color: blue"&gt;object &lt;/span&gt;sender, &lt;span style="color: rgb(43,145,175)"&gt;EventArgs &lt;/span&gt;e)&#xD;
{&#xD;
    &lt;span style="color: rgb(43,145,175)"&gt;WebSessionObjectPool&lt;/span&gt;.Instance.Dispose();&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;C、WebRequestObjectPool&lt;/strong&gt;&lt;/font&gt; : 基于ASP.NET Request请求上下文的对象池&lt;/p&gt;&#xD;
&lt;p&gt;对于同一个Http Web Request会话来说，对象池里的数据都是共用的，使用示例：&lt;/p&gt;&lt;pre &gt;&lt;font color="#4bacc6"&gt;WebRequestObjectPool&lt;/font&gt;.Instance.Add(&lt;span style="color: rgb(163,21,21)"&gt;"数据"&lt;/span&gt;, &lt;span style="color: rgb(163,21,21)"&gt;"数据值"&lt;/span&gt;);&#xD;
&lt;span style="color: blue"&gt;var &lt;/span&gt;value1 = &lt;font color="#4bacc6"&gt;WebRequestObjectPool&lt;/font&gt;.Instance.Get(&lt;span style="color: rgb(163,21,21)"&gt;"数据"&lt;/span&gt;).As&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;();&#xD;
&#xD;
&lt;span style="color: green"&gt;//通过扩展方法获取数据&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;value2 = &lt;font color="#4bacc6"&gt;WebRequestObjectPool&lt;/font&gt;.Instance.GetOrAdd&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"数据1"&lt;/span&gt;, () =&amp;gt; &lt;span style="color: rgb(163,21,21)"&gt;"数据值1"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;p&gt;注意：如果需要在Http Request完成时自动回收数据，请在web.config里注册WebRequestObjectPoolModule，如下示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;httpModules&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
            &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;add &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;WebRequestObjectPoolModule&lt;/span&gt;" &lt;span style="color: red"&gt;type&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;"&lt;span style="color: blue"&gt;KT.Core.ObjectPool.WebRequestObjectPoolModule&lt;/span&gt;" &lt;span style="color: blue"&gt;/&amp;gt;&#xD;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163,21,21)"&gt;httpModules&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&#xD;
&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;D、ThreadCallObjectPool&lt;/strong&gt;&lt;/font&gt; : 基于线程调用的对象池。此对象池可以在ASP.NET和Application环境下使用。&lt;/p&gt;&#xD;
&lt;p&gt;对于同一个线程来说，对象池里的数据是共用的。使用示例：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;Program&#xD;
&lt;/span&gt;{&#xD;
    &lt;span style="color: blue"&gt;static void &lt;/span&gt;Main(&lt;span style="color: blue"&gt;string&lt;/span&gt;[] args)&#xD;
    {&#xD;
        &lt;span style="color: blue"&gt;for &lt;/span&gt;(&lt;span style="color: blue"&gt;var &lt;/span&gt;i = 0; i &amp;lt; 100; i++)&#xD;
        {&#xD;
            &lt;span style="color: rgb(43,145,175)"&gt;Thread &lt;/span&gt;th = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;Thread&lt;/span&gt;(()=&amp;gt;{&#xD;
                &lt;span style="color: blue"&gt;var &lt;/span&gt;name = &lt;span style="color: rgb(43,145,175)"&gt;ThreadCallObjectPool&lt;/span&gt;.Instance.GetOrAdd&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color: rgb(163,21,21)"&gt;"K"&lt;/span&gt;, ()=&amp;gt;&lt;span style="color: rgb(43,145,175)"&gt;Thread&lt;/span&gt;.CurrentThread.Name);&#xD;
                &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Thread: {0}, K={1}"&lt;/span&gt;, &lt;span style="color: rgb(43,145,175)"&gt;Thread&lt;/span&gt;.CurrentThread.Name, name);&#xD;
                &lt;span style="color: rgb(43,145,175)"&gt;Thread&lt;/span&gt;.Sleep(10);&#xD;
                &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.WriteLine(&lt;span style="color: rgb(163,21,21)"&gt;"Thread: {0}, K={1}"&lt;/span&gt;, &lt;span style="color: rgb(43,145,175)"&gt;Thread&lt;/span&gt;.CurrentThread.Name, &lt;span style="color: rgb(43,145,175)"&gt;ThreadCallObjectPool&lt;/span&gt;.Instance.Get(&lt;span style="color: rgb(163,21,21)"&gt;"K"&lt;/span&gt;));&#xD;
            });&#xD;
            th.Name = i.ToString();&#xD;
            th.Start();&#xD;
        }&#xD;
        &lt;span style="color: rgb(43,145,175)"&gt;Console&lt;/span&gt;.Read();&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用对象池上下文&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;KT里提供一个当前上下文的对象池调用&amp;#8220;ObjectPoolContext&amp;#8221;，此对象会自动根据您所处的上下文环境，调用对应的对象池实例。比如你当前的程序是运行在ASP.NET Web环境下，则会调用&lt;font color="#4bacc6"&gt;WebRequestObjectPool&lt;/font&gt;而如果是在Application环境下则会调用&lt;span style="color: rgb(43,145,175)"&gt;ThreadCallObjectPool&lt;/span&gt;对象池，如下示例代码：&lt;/p&gt;&lt;pre &gt;&lt;span style="color: gray"&gt;/// &amp;lt;summary&amp;gt;&#xD;
/// &lt;/span&gt;&lt;span style="color: green"&gt;商家模块&#xD;
&lt;/span&gt;&lt;span style="color: gray"&gt;/// &amp;lt;/summary&amp;gt;&#xD;
&lt;/span&gt;&lt;span style="color: blue"&gt;public &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;IMerchantsModule &lt;/span&gt;MerchantsModule&#xD;
{&#xD;
    &lt;span style="color: blue"&gt;get&#xD;
    &lt;/span&gt;{&#xD;
        &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;ObjectPoolContext&lt;/span&gt;.Current.GetOrAdd&amp;lt;&lt;span style="color: rgb(43,145,175)"&gt;IMerchantsModule&lt;/span&gt;&amp;gt;(&#xD;
            &lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: rgb(43,145,175)"&gt;MerchantsModule&lt;/span&gt;), () =&amp;gt;&#xD;
            {&#xD;
                &lt;span style="color: blue"&gt;return new &lt;/span&gt;&lt;span style="color: rgb(43,145,175)"&gt;MerchantsModule&lt;/span&gt;(&lt;span style="color: blue"&gt;this&lt;/span&gt;.DbHelper);&#xD;
            });&#xD;
    }&#xD;
}&#xD;
以上代码，不管是在ASP.NET环境还是在Application环境都可以正常运行。&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/kingthy/aggbug/2135390.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/11/2135390.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kingthy/archive/2011/08/08/2131148.html</id><title type="text">我的KT库之-----扩展方法</title><summary type="text">目前KT库只针对“Object”、“String”、“DateTime”、“IDictionary”,“NameValueCollection”等对象数据进行了方法扩展。</summary><published>2011-08-08T09:17:00Z</published><updated>2011-08-08T09:17:00Z</updated><author><name>Kingthy</name><uri>http://www.cnblogs.com/kingthy/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2131148.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2131148.html"/><content type="html"> &#xD;
&lt;p&gt;&lt;strong&gt;了解或者认识KT：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html"&gt;http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;在项目中如何使用KT？&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;KT是一个库，所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;本节将介绍大家认识KT库里的扩展方法和如何去使用扩展方法。KT里的扩展方法存放在&amp;#8220;KT.Core.Extensions&amp;#8220;下，当你已在你的项目里引用了KT库后，则写下以下代码就可以使用到KT里的所有扩展方法了。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;using&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; KT.Core.Extensions;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;目前KT库只针对&amp;#8220;Object&amp;#8221;、&amp;#8220;String&amp;#8221;、&amp;#8220;DateTime&amp;#8221;、&amp;#8220;IDictionary&amp;#8221;,&amp;#8220;NameValueCollection&amp;#8221;等对象数据进行了方法扩展。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;A、Object的扩展方法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1）、As&amp;lt;T&amp;gt;方法&lt;/strong&gt; : 万能转换方法&lt;/p&gt;&lt;p&gt;将某种类型的数据转换为另外一种类型数据，如果转换失败则返回对应类型的默认值，如下示例代码：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.As&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //i = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;float&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; f &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;0.22&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.As&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;float&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&amp;nbsp;&amp;nbsp; //f = 0.22f&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DayOfWeek dayOfWeek &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Friday&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.As&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;DayOfWeek&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&amp;nbsp; //dayOfWeek = Friday&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime time &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;2011-01-01&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.As&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;DateTime&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //time = 2011-01-01&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Stream stream &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; MemoryStream()).As&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Stream&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&amp;nbsp; //stream = MemoryStream&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; value &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;long&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; l &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; value.As&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;long&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //l = 0L&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;从上面的示例代码可以看出，As&amp;lt;T&amp;gt;扩展方法有点类似于as操作符与Convert类的结合体。但As&amp;lt;T&amp;gt;和Convert类又有几点不同。&lt;/p&gt;&lt;p&gt;A)、如果类型转换失败，As&amp;lt;T&amp;gt;扩展不会抛出任何的错误，只是返回对应类型的默认值。如上面例子中的&amp;#8220;long l = value.As&amp;lt;long&amp;gt;();&amp;#8220;，因为null无法转换为long类型，所以返回long类型的默认值&amp;#8220;0&amp;#8221;。&lt;/p&gt;&lt;p&gt;B)、支持转换为枚举类型。如上例中将&amp;#8220;Friday&amp;#8221;字符串转换为DayofWeek枚举，如果转换失败，则返回枚举定义中的第一个项！&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;注：此方法还有一个重载方法，即是多了一个默认值参数，当转换失败时返回方法传递的默认值。如下示例：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;object&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; value &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;long&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; l &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; value.As&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;long&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1L&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&amp;nbsp; //l = -1L&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;因为value=null，无法转换为long类型的值，所以返回-1L。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2)、ToJson方法&lt;/strong&gt;: 将对象解析为Json格式的字符串&lt;/p&gt;&lt;p&gt;如果对象值为DateTime则返回一个JavaScript脚本的Date对象;如果是字符串，则对于非英文字母、数字的字符，将解析为&amp;#8220;\uxxxx&amp;#8220;格式的字符。&lt;/p&gt;&lt;p&gt;示例代码：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; User user &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; User();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user.Age &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;12&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user.Name &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;张三&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user.CreatedTime &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; DateTime.Now;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user.Location.Address &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;广东广州&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user.Location.Zipcode &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;510000&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(user.ToJson());&lt;/span&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;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;{&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Name&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;\u5f20\u4e09&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Age&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;12&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;CreatedTime&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Date(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;1312790227779&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;),&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Address&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;\u5e7f\u4e1c\u5e7f\u5dde&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Zipcode&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;510000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Location&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:{&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Address&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;\u5e7f\u4e1c\u5e7f\u5dde&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Zipcode&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;510000&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;}}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3)、IfNull&amp;lt;T&amp;gt;方法&lt;/strong&gt;：如果对象为null则调用委托方法。&lt;/p&gt;&lt;p&gt;有时我们会经常这样做if条件判断：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; GetCurrentUserData(User user)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (user &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;==&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;如果user为null则获取当前会话的用户&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; GetCurrentContextUser();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;其它操作代码&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;有了此IfNull&amp;lt;T&amp;gt;扩展方法后，我们就可以省去此if了，可以直接写成这样：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;static&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;void&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; GetCurrentUserData(User user)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; user &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; user.IfNull&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;User&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(GetCurrentContextUser);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;其它操作代码&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;B、String的扩展方法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1)、MD5方法&lt;/strong&gt;：采用UTF-8编码获取字符串的MD5哈希值（小写输出）&lt;/p&gt;&lt;p&gt;示例代码：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;管理员&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.MD5());&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;b1dae9bc5cabbc13e4bee21af11cdb8d&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;管理员&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.MD5(Encoding.GetEncoding(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;gbk&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)));&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;8178134ede762c42e41a7b1695082e28&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;注：此方法有一个重载方法，用于设置求取MD5哈希值时使用的文本编码。如上例代码，对于汉字，如果采用不同编码获取到的哈希值是不同的。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2)、IfEmpty方法&lt;/strong&gt;：如果字符串为null或空字符值，则返回替代值或调用委托函数获取新值，类似于Object的IfNull&amp;lt;T&amp;gt;方法&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3)、IsInteger方法&lt;/strong&gt;：判断字符串是否都是由阿拉伯数字组成的，即是否由（0-9）数字组成的字符串&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4)、IsDateTime方法&lt;/strong&gt;：判断是否是日期时间格式的字符串&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5)、IsValidEmail方法&lt;/strong&gt;：判断字符串的格式是否是邮件地址格式（注：此方法判断的邮件格式要求较宽松，只要符合&lt;a href="&amp;#109;&amp;#97;&amp;#105;&amp;#108;&amp;#116;&amp;#111;&amp;#58;&amp;#88;&amp;#88;&amp;#88;&amp;#64;&amp;#88;&amp;#88;&amp;#88;&amp;#46;&amp;#88;&amp;#88;"&gt;XXX@XXX.XX&lt;/a&gt;格式的都会认为符合）&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6)、IsMatch方法&lt;/strong&gt;：判断字符串是否符合某种正则表达式的模式格式，如下面代码就是IsInteger方法的实现：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;0123123&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.IsMatch(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;@"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;^\d+$&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;7)、IsContain方法&lt;/strong&gt;：判断字符串中是否包含有某个分隔项。示例代码：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;A,B,C,D&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.IsContain(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;A&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;A,B,C,D&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.IsContain(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;E&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;false&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;A,B,C,D&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.IsContain(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;false&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;A,B,C,D&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.IsContain(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;注：此方法有一个重载方法，用于指示判断时是否区分大小写&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;8)、Replace方法&lt;/strong&gt;：字符串替换方法&lt;/p&gt;&lt;p&gt;此方法有几种不同的重载方法。&lt;/p&gt;&lt;p&gt;a)、是否不区分大小写替换,示例代码：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;AbabAe&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Replace(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;a&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;C&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;true&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;); &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;CbCbCe&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;b)、带前缀、后缀的整批替换（集合），示例代码：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dictionary&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; items &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Dictionary&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; items.Add(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;姓名&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;张三&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; items.Add(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;年龄&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;20&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; items.Add(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;婚否&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;未婚&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;用户：[姓名]，今年[年龄]岁，婚姻状况：[婚否]&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Replace(items, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;输出：&amp;#8220;用户：张三，今年20岁，婚姻状况：未婚&amp;#8221;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;c)、带前缀、后缀的整批替换（委托）、示例代码：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;UBB转换示例&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; text &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;[b]粗体[/b][i]斜体[/i][red]红色[/red]&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; text.Replace(key &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;switch&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (key.ToLower())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;case&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;b&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;case&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;/b&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;case&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;i&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;lt;i&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;case&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;/i&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;lt;/i&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;case&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;red&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;lt;font color=\"red\"&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;case&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;/red&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&amp;lt;/font&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;default&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;return&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;null&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;[&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;]&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(text);&amp;nbsp;&amp;nbsp; //输出:"&amp;lt;strong&amp;gt;粗体&amp;lt;/strong&amp;gt;&amp;lt;i&amp;gt;斜体&amp;lt;/i&amp;gt;&amp;lt;font color="red"&amp;gt;红色&amp;lt;/font&amp;gt;"&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;9)、ToJavaScriptString方法&lt;/strong&gt;：将字符串格式化为Javascript脚本里的字符串，对于非英文字母、数字的字符将格式为&amp;#8220;\uxxxx&amp;#8221;格式的字符。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;10)、ConvertTo方法&lt;/strong&gt;：将字符串值转换为其它类型。此方法是Object里的As&amp;lt;T&amp;gt;方法的核心方法。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;11）、ReadAllLines方法&lt;/strong&gt;：将字符串按行读取，并返回所有行数据数组。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;C、DateTime的扩展方法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1)、ToTimestamp方法&lt;/strong&gt;：获取某个日期时间的时间戳值，时间戳值的计算是从1970-01-01 0:0:0开始计算的总毫秒数&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2)、FromTimestamp方法&lt;/strong&gt;：将某个时间戳值转换为当前时间值。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3)、ToRFC822Time方法&lt;/strong&gt;：获取某个日期时间的RFC822定义的格式字符串，此格式时间在邮件交互里经常使用到。如"Thu, 21 Dec 2000 16:01:07 +0800"&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;D、IDictionary的扩展方法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1)、GetOrDefault方法&lt;/strong&gt;： 从IDictionary对象里获取数据，如果没有数据则返回一个默认的值&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2)、GetOrAdd方法&lt;/strong&gt;： 从IDictionary对象里获取数据，如果没有数据则调用委托获取数据并添加到集合后返回。示例代码：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dictionary&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; items &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Dictionary&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(items.GetOrDefault(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;姓名&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;张三&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //张三&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(items.GetOrAdd(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;姓名&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, () &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;李四&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp;&amp;nbsp; //李四&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(items.GetOrDefault(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;姓名&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;张三&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //李四&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;E、NameValueCollection的扩展方法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1)、Get&amp;lt;T&amp;gt;方法&lt;/strong&gt;： 从NameValueCollection获取某个值，并且转换为对应类型，如果转换失败返回默认值&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2)、TrimGet&amp;lt;T&amp;gt;方法&lt;/strong&gt;：从NameValueCollection获取某个值，并去掉值的前后空白后转换为对应类型，如果转换失败则返回默认值。&lt;/p&gt;&lt;p&gt;示例代码：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; i &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Request.QueryString.Get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;id&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; name &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Request.QueryString.TrimGet&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;string&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;name&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; year &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Request.Form.Get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;int&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;year&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;2011&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;);&lt;br /&gt;DateTime time &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Request.From.Get&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;DateTime&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;createdtime&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;,DateTime.Now);&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3）、CopyTo&amp;lt;T&amp;gt;方法&lt;/strong&gt;：将NameValueCollection里的所有数据复制到某个对象中&lt;/p&gt;&lt;p&gt;假如我们的Web表格里提交了如下数据：&lt;/p&gt;&lt;p&gt;name=张三&amp;amp;age=12&amp;amp;location.zipcode=510000&amp;amp;location.city=广州&amp;amp;createdtime=2011-01-01 12:00:00&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&lt;div&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;User&amp;nbsp;user&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&amp;nbsp;User();&lt;br /&gt;Request.From.CopyTo(user);&lt;br /&gt;Response.Write(user.ToJson());&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;运行以上代码后，user里的各个属性字段将对应取得上面提交的值。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;好了，目前KT里的扩展方法只提供了这么多，虽然少，但却都是非常有用的功能函数。如果你有更好的扩展方法或建议，希望你能加入到KT项目的更新开发中来：）&lt;/p&gt;&lt;p&gt;&lt;/p&gt; &lt;img src="http://www.cnblogs.com/kingthy/aggbug/2131148.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kingthy/archive/2011/08/08/2131148.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
