<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_MicroCoder</title><subtitle type="text">{编程之美}</subtitle><id>http://feed.cnblogs.com/blog/u/34863/rss</id><updated>2012-04-14T15:02:33Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/34863/rss"/><entry><id>http://www.cnblogs.com/dushouke/archive/2012/03/16/2400467.html</id><title type="text">Proxy Pattern - C# 3.0 Design Patterns</title><summary type="text">Proxy Pattern属于Structural Patterns 介绍： Proxy Pattern的作用是为其他对象提供一个代理以控制对这个对象的访问，如何你的对象创建非常昂贵；需要访问控制；是一个远程对象或者调用之前需要采取一些其他操作，那么你可以考虑为该对象创建一个代理。 设计于实现： ISubject：一个公共的接口供代理和被代理对象继承 Subject：需要被代理...</summary><published>2012-03-16T08:10:00Z</published><updated>2012-03-16T08:10:00Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dushouke/archive/2012/03/16/2400467.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/archive/2012/03/16/2400467.html"/><content type="html">&lt;p&gt;Proxy Pattern属于Structural Patterns&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;介绍：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Proxy Pattern的作用是为其他对象提供一个代理以控制对这个对象的访问，如何你的对象创建非常昂贵；需要访问控制；是一个远程对象或者调用之前需要采取一些其他操作，那么你可以考虑为该对象创建一个代理。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;设计于实现：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203161609482553.png"&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="QQ截图20120316154658" border="0" alt="QQ截图20120316154658" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203161609512714.png" width="660" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;ISubject：一个公共的接口供代理和被代理对象继承&lt;/p&gt;  &lt;p&gt;Subject：需要被代理的对象&lt;/p&gt;  &lt;p&gt;Proxy：代理对象 A class that creates, controls, enhances, and authenticates access to a Subject&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; ISubject&lt;br/&gt;    {&lt;br/&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; Request();&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Subject : ISubject&lt;br/&gt;    {&lt;br/&gt;        &lt;span class="preproc"&gt;#region&lt;/span&gt; ISubject Members&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Request()&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Subject Request &amp;quot;&lt;/span&gt;;&lt;br/&gt;        }&lt;br/&gt;        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Proxy : ISubject&lt;br/&gt;    {&lt;br/&gt;        Subject subject;&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Request()&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (subject == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br/&gt;            {&lt;br/&gt;                Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Subject inactive&amp;quot;&lt;/span&gt;);&lt;br/&gt;                subject = &lt;span class="kwrd"&gt;new&lt;/span&gt; Subject();&lt;br/&gt;            }&lt;br/&gt;            Console.WriteLine(&lt;span class="str"&gt;&amp;quot;Subject active&amp;quot;&lt;/span&gt;);&lt;br/&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Proxy: Call to &amp;quot;&lt;/span&gt; + subject.Request();&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProtectionProxy : ISubject&lt;br/&gt;    {&lt;br/&gt;        &lt;span class="rem"&gt;// An authentication proxy first asks for a password&lt;/span&gt;&lt;br/&gt;        Subject subject;&lt;br/&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; password = &lt;span class="str"&gt;&amp;quot;Abracadabra&amp;quot;&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Authenticate(&lt;span class="kwrd"&gt;string&lt;/span&gt; supplied)&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (supplied != password)&lt;br/&gt;            {&lt;br/&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Protection Proxy: No access&amp;quot;&lt;/span&gt;;&lt;br/&gt;            }&lt;br/&gt;            subject = &lt;span class="kwrd"&gt;new&lt;/span&gt; Subject();&lt;br/&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Protection Proxy: Authenticated&amp;quot;&lt;/span&gt;;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Request()&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;if&lt;/span&gt; (subject == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Protection Proxy: Authenticate first&amp;quot;&lt;/span&gt;;&lt;br/&gt;            }&lt;br/&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;&amp;quot;Protection Proxy: Call to &amp;quot;&lt;/span&gt; + subject.Request();&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    [TestFixture]&lt;br/&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProxyPatternTest&lt;br/&gt;    {&lt;br/&gt;        [Test]&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; T1()&lt;br/&gt;        {&lt;br/&gt;            ISubject subject = &lt;span class="kwrd"&gt;new&lt;/span&gt; Proxy();&lt;br/&gt;            Console.WriteLine(subject.Request());&lt;br/&gt;&lt;br/&gt;            ISubject subject2 = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProtectionProxy();&lt;br/&gt;&lt;br/&gt;            Console.WriteLine(subject2.Request());&lt;br/&gt;&lt;br/&gt;            Console.WriteLine((subject2 &lt;span class="kwrd"&gt;as&lt;/span&gt; ProtectionProxy).Authenticate(&lt;span class="str"&gt;&amp;quot;Abracadabra&amp;quot;&lt;/span&gt;));&lt;br/&gt;            Console.WriteLine(subject2.Request());&lt;br/&gt;&lt;br/&gt;        }&lt;br/&gt;    }&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{font-size: small;color: black;font-family: consolas, "Courier New", courier, monospace;background-color: #ffffff;/*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {background-color: #f4f4f4;width: 100%;margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;p&gt;&lt;strong&gt;Decorator Pattern 和 Proxy Pattern 的区别：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Decorator Pattern 有&amp;quot;Smart Proxy&amp;quot; 可见两者有相同之处，在Decorator Pattern中装饰者和被装饰者都实现了相同的接口，这个Proxy Pattern一样代理和被代理的对象也同样实现了相同的接口。同时装饰者和代理都可以对实际的对象进行控制。&lt;/p&gt;&lt;p&gt;但是两者最显著的区别是Proxy Pattern是在代理类内部创建对象的实例，而Decorator Pattern是通过参数传递对象的实例。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;var component = new Component();  &lt;br /&gt;&lt;strong&gt; //Component是通过构造函数的方式传递给DecoratorB的    &lt;br /&gt;&lt;/strong&gt; var decoratorB = new DecoratorB(component);  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;public class Proxy : ISubject  &lt;br /&gt;{  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Subject subject;  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public string Request()  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (subject == null)  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(&amp;quot;Subject inactive&amp;quot;);  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt; //在代理的内部创建类（Subject）的实例    &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; subject = new Subject();  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; …  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }  &lt;br /&gt;&amp;#160;&amp;#160; }  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;参考文章：&lt;/p&gt;&lt;p&gt;1、&lt;a href="http://powerdream5.wordpress.com/2007/11/17/the-differences-between-decorator-pattern-and-proxy-pattern/" target="_blank"&gt;The differences between Decorator Pattern and Proxy Pattern&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;2、&lt;a href="http://stackoverflow.com/questions/350404/how-do-the-proxy-decorator-adaptor-and-bridge-patterns-differ"&gt;How do the Proxy, Decorator, Adaptor, and Bridge Patterns differ?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/dushouke/aggbug/2400467.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dushouke/archive/2012/03/16/2400467.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dushouke/archive/2012/03/16/2400274.html</id><title type="text">Decorator Pattern - C# 3.0 Design Patterns</title><summary type="text">Decorator Pattern属于Structural Patterns介绍：Decorator pattern的作用是提供一种方式动态的给一个对象添加新的职责或状态，被装饰的对象并不知道被“装饰”了。A key implementation point in the Decorator pattern is that decorators both inherit the original class and contain an instantiation of it.实现：UML 类图 public interface IComponent { string...</summary><published>2012-03-16T06:47:00Z</published><updated>2012-03-16T06:47:00Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dushouke/archive/2012/03/16/2400274.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/archive/2012/03/16/2400274.html"/><content type="html">&lt;p&gt;Decorator Pattern属于Structural Patterns&lt;/p&gt;&lt;p&gt;&lt;strong&gt;介绍：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Decorator pattern的作用是提供一种方式动态的给一个对象添加新的职责或状态，被装饰的对象并不知道被&amp;#8220;装饰&amp;#8221;了。&lt;strong&gt;A key implementation point in the Decorator pattern is that decorators both inherit the original class and contain an instantiation of it.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;实现：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;UML 类图&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203161442324781.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="QQ截图20120316143512" alt="QQ截图20120316143512" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203161442339981.png" height="339" border="0" width="808" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IComponent&lt;br/&gt;    {&lt;br/&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; Operation();&lt;br/&gt;    }&lt;br/&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span class="rem"&gt;/// 被装饰者&lt;/span&gt;&lt;br/&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Component : IComponent&lt;br/&gt;    {&lt;br/&gt;        &lt;span class="preproc"&gt;#region&lt;/span&gt; IComponent Members&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Operation()&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;"I'm a photo;"&lt;/span&gt;;&lt;br/&gt;        }&lt;br/&gt;        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;br/&gt;    }&lt;br/&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span class="rem"&gt;/// 装饰者A&lt;/span&gt;&lt;br/&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DecoratorA : IComponent&lt;br/&gt;    {&lt;br/&gt;        IComponent component;&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; DecoratorA(IComponent component)&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.component = component;&lt;br/&gt;        }&lt;br/&gt;        &lt;span class="preproc"&gt;#region&lt;/span&gt; IComponent Members&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Operation()&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; component.Operation() + &lt;span class="str"&gt;"and decorated by DecoratorA"&lt;/span&gt;;&lt;br/&gt;        }&lt;br/&gt;        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;br/&gt;    }&lt;br/&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span class="rem"&gt;/// 装饰者B&lt;/span&gt;&lt;br/&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DecoratorB : IComponent&lt;br/&gt;    {&lt;br/&gt;        IComponent component;&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; AddedState = &lt;span class="str"&gt;" and added state"&lt;/span&gt;;&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; DecoratorB(IComponent component)&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;this&lt;/span&gt;.component = component;&lt;br/&gt;        }&lt;br/&gt;        &lt;span class="preproc"&gt;#region&lt;/span&gt; IComponent Members&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Operation()&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; component.Operation() + &lt;span class="str"&gt;"and decorated by DecoratorB"&lt;/span&gt;;&lt;br/&gt;        }&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; AddedBehavior()&lt;br/&gt;        {&lt;br/&gt;            &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="str"&gt;" and added behavior by DecoratorB"&lt;/span&gt;;&lt;br/&gt;        }&lt;br/&gt;        &lt;span class="preproc"&gt;#endregion&lt;/span&gt;&lt;br/&gt;    }&lt;br/&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Client&lt;br/&gt;    {&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Display(&lt;span class="kwrd"&gt;string&lt;/span&gt; s, IComponent component)&lt;br/&gt;        {&lt;br/&gt;            Console.WriteLine(s + component.Operation());&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;    [TestFixture]&lt;br/&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; DecoratorTest&lt;br/&gt;    {&lt;br/&gt;        [Test]&lt;br/&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; T1()&lt;br/&gt;        {&lt;br/&gt;            var component = &lt;span class="kwrd"&gt;new&lt;/span&gt; Component();&lt;br/&gt;            Client.Display(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty, component);&lt;br/&gt;            var decoratorB = &lt;span class="kwrd"&gt;new&lt;/span&gt; DecoratorB(component);&lt;br/&gt;            Client.Display(&lt;span class="str"&gt;"hello!"&lt;/span&gt;, decoratorB);&lt;br/&gt;        }&lt;br/&gt;    }&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre{    font-size: small;    color: black;    font-family: consolas, "Courier New", courier, monospace;    background-color: #ffffff;    /*white-space: pre;*/}.csharpcode pre { margin: 0em; }.csharpcode .rem { color: #008000; }.csharpcode .kwrd { color: #0000ff; }.csharpcode .str { color: #006080; }.csharpcode .op { color: #0000c0; }.csharpcode .preproc { color: #cc6633; }.csharpcode .asp { background-color: #ffff00; }.csharpcode .html { color: #800000; }.csharpcode .attr { color: #ff0000; }.csharpcode .alt {    background-color: #f4f4f4;    width: 100%;    margin: 0em;}.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://www.cnblogs.com/dushouke/aggbug/2400274.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dushouke/archive/2012/03/16/2400274.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dushouke/archive/2012/03/15/2398188.html</id><title type="text">使用Mongodb的搜索拼音自动补全方案</title><summary type="text">搜索的自动提示功能能给用户带来很好的搜索体验，由于中文的特点，如果搜索自动提示可以支持拼音的话会给用户带来更大的方便，免得切换输入法。目前大多数的电子商务网站都支持拼音提示功能。 关于多音字 由于中文存在多音字问题（读音，声调），例如 调的读音有DIAO;TIAO 长的读音有CHANG;ZHANG 所以对于一个词语如果用程序组合可能有多个组合，比如美的空调有4中组合：meidikongt...</summary><published>2012-03-15T07:43:00Z</published><updated>2012-03-15T07:43:00Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dushouke/archive/2012/03/15/2398188.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/archive/2012/03/15/2398188.html"/><content type="html">&lt;p&gt;搜索的自动提示功能能给用户带来很好的搜索体验，由于中文的特点，如果搜索自动提示可以支持拼音的话会给用户带来更大的方便，免得切换输入法。目前大多数的电子商务网站都支持拼音提示功能。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;关于多音字&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;由于中文存在多音字问题（读音，&lt;s&gt;声调&lt;/s&gt;），例如 调的读音有DIAO;TIAO 长的读音有CHANG;ZHANG 所以对于一个词语如果用程序组合可能有多个组合，比如美的空调有4中组合：meidikongtiao；meidikongdiao； meidekongtiao；meidekongdiao 如何处理这中问题要做到精确第一需要有拼音库还要分词，这种处理难度较大，第二种就是把所有可能组合在一起，这样的缺点是一个词汇组合太多（阶乘）；提示结果不准确。&lt;/p&gt;  &lt;p&gt;大多数电子商务网站都采用第二种方案：例如 洗衣机 洗字有xian 和xi 两种读音。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;淘宝商城：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542203785.png"&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="1" border="0" alt="1" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542303841.png" width="260" height="211" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151544454801.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 0px 50px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="2" border="0" alt="2" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151544482769.png" width="289" height="182" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;卓越：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542332116.png"&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="3" border="0" alt="3" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542334874.png" width="260" height="179" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542342332.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 0px 50px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="4" border="0" alt="4" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/20120315154235805.png" width="260" height="190" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;京东：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542361262.png"&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="6" border="0" alt="6" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542375623.png" width="260" height="235" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542378065.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 0px 50px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="6" border="0" alt="6" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542383473.png" width="260" height="235" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SQLServer还是MongoDB&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;如果使用sql server这样的关系型数据库 需要见两张表一张数提示词一张表是对应的读音，这样不管存储还是读取都相对比较麻烦，同时这种查询数次较高（用户每输入一个字符都要查询数据库）对sql server 造成不必要的浪费。&lt;/p&gt;  &lt;p&gt;MongoDB是一种非关系型的文档数据库，开源，免费，具有易于使用，效率高等特点，存储是JSON格式，强大的查询功能（数组和正则表达式的支持）。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;比如 美的空调 可以存储为 &lt;strong&gt;{name:’美的空调’;pinyin:[meidikongtiao’,’meidekongtiao’]}&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542406340.png"&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="7" border="0" alt="7" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542425029.png" width="654" height="447" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;查选也很方便，例如我们用户输入xian，我们的查选语句就是这样的：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/20120315154246762.png"&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="9" border="0" alt="9" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542468221.png" width="583" height="52" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;查询结果为：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542478994.png"&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="8" border="0" alt="8" src="http://images.cnblogs.com/cnblogs_com/dushouke/201203/201203151542489908.png" width="611" height="275" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;关于汉字转拼音可参考：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/Gildor/archive/2009/09/02/1558956.html"&gt;使用Microsoft Visual Studio International Pack获得中文字符串的所有拼音组合（处理多音字）&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/dushouke/aggbug/2398188.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dushouke/archive/2012/03/15/2398188.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dushouke/archive/2011/09/03/2165340.html</id><title type="text">一个简单的ASP.NET WebForm &amp;quot;Model Binder&amp;quot;</title><summary type="text">ASP.NET MVC 中有一个神器Model Binder，给开发带来很多便利，如果使用WebForm 开发的话，只能望洋兴叹了，不过人类是无法阻止程序猿解决问题的决心的。 废话不多说了，直接看看这个山寨版的 "Model Binder" 复杂类型使用示例 先定义几个简单的实体： public class User { public int SysNo { g...</summary><published>2011-09-03T04:36:00Z</published><updated>2011-09-03T04:36:00Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dushouke/archive/2011/09/03/2165340.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/archive/2011/09/03/2165340.html"/><content type="html">&lt;p&gt;ASP.NET MVC 中有一个神器Model Binder，给开发带来很多便利，如果使用WebForm 开发的话，只能望洋兴叹了，不过人类是无法阻止程序猿解决问题的决心的。&lt;/p&gt;  &lt;p&gt;废话不多说了，直接看看这个山寨版的 &amp;quot;Model Binder&amp;quot; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;b&gt;复杂类型使用示例&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;先定义几个简单的实体：&lt;/p&gt;  public class User&lt;br/&gt;    {&lt;br/&gt;        public int SysNo { get; set; }&lt;br/&gt;        public string Name { get; set; }&lt;br/&gt;        public bool Good { get; set; }&lt;br/&gt;        public DateTime Birthday { get; set; }&lt;br/&gt;        public Address Address { get; set; }&lt;br/&gt;        public int[] Test { get; set; }&lt;br/&gt;        public List&amp;lt;Order&amp;gt; Orders { get; set; }//不支持复杂列表类型的转换&lt;br/&gt;    }&lt;br/&gt;    public class Order&lt;br/&gt;    {&lt;br/&gt;        public string OrderID { get; set; }&lt;br/&gt;&lt;br/&gt;    }&lt;br/&gt;    public class Address&lt;br/&gt;    {&lt;br/&gt;        public User User { get; set; }&lt;br/&gt;        public int SysNo { get; set; }&lt;br/&gt;        public string Name { get; set; }&lt;br/&gt;    }&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;然后看看界面上表单的样子&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201109/20110903123607363.png"&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="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/dushouke/201109/201109031236079000.png" width="1197" height="185" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;看看效果&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201109/201109031236079033.png"&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="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/dushouke/201109/201109031236085163.png" width="388" height="231" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/dushouke/201109/201109031236082164.png"&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="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/dushouke/201109/201109031236094705.png" width="580" height="279" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;转换成功！！&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;b&gt;如何判断用户没有输入或者转换失败呢？&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;很简单在Global中注册默认值&lt;/p&gt; protected void Application_Start(object sender, EventArgs e)&lt;br/&gt;        {&lt;br/&gt;            RequestBinder.RegistDefaultValue&amp;lt;int&amp;gt;(-999999);&lt;br/&gt;            RequestBinder.RegistDefaultValue&amp;lt;DateTime&amp;gt;(DateTime.Parse(&amp;quot;1900/01/01&amp;quot;));&lt;br/&gt;        }&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;b&gt;上面是复杂类型，对于简单的更不在话下了，只要指定表单的Name就可以了&lt;/b&gt;&lt;/strong&gt;&lt;/p&gt;int sysno = RequestBinder.UpdateModel&amp;lt;int&amp;gt;(&amp;quot;SysNO&amp;quot;);&lt;p&gt;&lt;strong&gt;&lt;font style="font-weight: bold"&gt;源码下载：&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/dushouke/RequestBinder.rar"&gt;http://files.cnblogs.com/dushouke/RequestBinder.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/dushouke/aggbug/2165340.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dushouke/archive/2011/09/03/2165340.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dushouke/archive/2011/09/03/2164616.html</id><title type="text">stackoverflow favorites</title><summary type="text"/><published>2011-09-03T02:10:00Z</published><updated>2011-09-03T02:10:00Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dushouke/archive/2011/09/03/2164616.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/archive/2011/09/03/2164616.html"/><content type="html">&lt;br /&gt;&lt;style type="text/css"&gt;.w-670{ width:670px;}.subtabs { float: right; font-weight: bold; width: 100%; }.subtabs a { border: 1px solid #CCCCCC; color: #808185; display: block; float: right; font-family: Trebuchet MS,Liberation Sans,DejaVu Sans,sans-serif; font-size: 120%; margin-right: 3px; padding: 2px 4px 4px; text-decoration: none; }.subtabs a.youarehere { background-color: #808185; border: 1px solid #808185; color: #FFFFFF; font-weight: bold; }.question-summary { border-bottom: 1px dotted #999999; float: left; overflow: hidden; padding: 11px 0; width: 670px; }.cp { cursor: pointer; }.narrow .votes { background: none repeat scroll 0 0 transparent; float: left; height: 38px; margin: 0 3px 0 0; padding: 5px; width: 38px; }.votes { color: #555555; padding: 0 0 7px; text-align: center; }.mini-counts { font-size: 190%; font-weight: bold; height: 25px; }.narrow .status { float: left; height: 38px; margin: 0 3px 0 0; padding: 5px; width: 48px; }.answered { background: none repeat scroll 0 0 #75845C; color: #FFFFFF; }.status { margin-top: -3px; padding: 4px 0; text-align: center; }.narrow .views { float: left; height: 38px; margin: 0 7px 0 0; padding: 5px 0 5px 4px; width: 40px; }.views { color: #999999; padding-top: 4px; text-align: center; }.narrow .summary { width: 700px; }.summary h3 { font-family: Trebuchet MS,Liberation Sans,DejaVu Sans,sans-serif; font-size: 150%; font-weight: bold; margin-bottom: 5px; }.question-hyperlink { font-weight: bold; }.tags { float: left; line-height: 18px; }.post-tag { background-color: #E0EAF1; border-bottom: 1px solid #3E6D8E; border-right: 1px solid #7F9FB6; color: #3E6D8E;; line-height: 2.4; margin: 2px 2px 2px 0; padding: 3px 4px; text-decoration: none; white-space: nowrap; }a.post-tag:hover { background-color: #3E6D8E; border-bottom: 1px solid #37607D; border-right: 1px solid #37607D; color: #E0EAF1; text-decoration: none; }.pagination-more{ border-color: #DDDDDD #AAAAAA #AAAAAA #DDDDDD;border-radius: 5px 5px 5px 5px;border-style: solid;border-width: 1px;display: block;float: left;font-size: 14px;height: 22px;line-height: 1.5em;margin-bottom: 6px;outline: medium none;padding: 6px 0;text-align: center;text-decoration: none;}&lt;/style&gt;&lt;script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"&gt;&lt;/script&gt;&lt;script id="favoriteTemplate" type="text/x-jquery-tmpl"&gt;               &lt;div class="question-summary narrow"&gt;                  &lt;div class="cp"&gt;                      &lt;div class="votes"&gt;                          &lt;div class="mini-counts"&gt;                              ${up_vote_count}&lt;/div&gt;                          &lt;div&gt;                              votes&lt;/div&gt;                      &lt;/div&gt;                      &lt;div class="status answered"&gt;                          &lt;div class="mini-counts"&gt;                              ${answer_count}&lt;/div&gt;                          &lt;div&gt;                              answers&lt;/div&gt;                      &lt;/div&gt;                      &lt;div class="views"&gt;                          &lt;div class="mini-counts"&gt;                              ${view_count}&lt;/div&gt;                          &lt;div&gt;                              views&lt;/div&gt;                      &lt;/div&gt;                  &lt;/div&gt;                  &lt;div class="summary"&gt;                      &lt;p&gt;&lt;strong&gt;                          &lt;a target="_blank" class="question-hyperlink" href="http://stackoverflow.com/questions/${question_id}/${title}"&gt;${title}&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;                      &lt;div class="tags"&gt;                       {{each tags}}                          &lt;a target="_blank" class="post-tag" href="http://stackoverflow.com/questions/tagged/${$value}"&gt;${$value}&lt;/a&gt;                       {{/each}}                      &lt;/div&gt;                  &lt;/div&gt;              &lt;/div&gt;      &lt;/script&gt;&lt;script type="text/javascript"&gt;          var sffavoritesp = 1;          $(function () {              stackoverflowAPI()          });          function stackoverflowAPI() {              $.getJSON('http://api.stackoverflow.com/1.1/users/111774/favorites?jsonp=?&amp;body=true&amp;sort=added&amp;page=' + sffavoritesp, function (data) {                  var page = Math.ceil(data.total / data.pagesize);                  if (sffavoritesp == 1) {                      $("#f-list").html('');                  }                  $("#pagination-more").remove();                  $("#favoriteTemplate").tmpl(data.questions).appendTo("#f-list");                  if (page &gt; data.page) {                      sffavoritesp++;                      $('&lt;a href="javascript:stackoverflowAPI()" class="pagination-more w-670" id="pagination-more"&gt;更多&lt;/a&gt;').appendTo("#f-list");                  }              });          }      &lt;/script&gt; &lt;div id="f-list" class="w-670"&gt;        &lt;/div&gt;&lt;img src="http://www.cnblogs.com/dushouke/aggbug/2164616.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dushouke/archive/2011/09/03/2164616.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dushouke/archive/2011/06/04/use-aspx-outputcache-in-ashx.html</id><title type="text">在ashx中使用aspx的OutputCached</title><summary type="text">publicclassCacheHandler:IHttpHandler{publicvoidProcessRequest(HttpContextcontext){OutputCachedPagepage=newOutputCachedPage(newOutputCacheParameters{Duration=60,Location=OutputCacheLocation.Server,VaryByParam="v"});page.ProcessRequest(HttpContext.Current);context.Response.Write(DateTime.Now</summary><published>2011-06-04T04:45:00Z</published><updated>2011-06-04T04:45:00Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dushouke/archive/2011/06/04/use-aspx-outputcache-in-ashx.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/archive/2011/06/04/use-aspx-outputcache-in-ashx.html"/><content type="html">&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;CacheHandler&amp;nbsp;:&amp;nbsp;IHttpHandler&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;ProcessRequest(HttpContext&amp;nbsp;context)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OutputCachedPage&amp;nbsp;page&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OutputCachedPage(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OutputCacheParameters&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Duration&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;60&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Location&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OutputCacheLocation.Server,&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;VaryByParam&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;v&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;page.ProcessRequest(HttpContext.Current);&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;context.Response.Write(DateTime.Now);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;bool&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;IsReusable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;get&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;sealed&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OutputCachedPage&amp;nbsp;:&amp;nbsp;Page&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OutputCacheParameters&amp;nbsp;_cacheSettings;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;OutputCachedPage(OutputCacheParameters&amp;nbsp;cacheSettings)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;Tracing&amp;nbsp;requires&amp;nbsp;Page&amp;nbsp;IDs&amp;nbsp;to&amp;nbsp;be&amp;nbsp;unique.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Guid.NewGuid().ToString();&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;_cacheSettings&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;cacheSettings;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;FrameworkInitialize()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;&amp;nbsp;when&amp;nbsp;you&amp;nbsp;put&amp;nbsp;the&amp;nbsp;&amp;lt;%@&amp;nbsp;OutputCache&amp;nbsp;%&amp;gt;&amp;nbsp;directive&amp;nbsp;on&amp;nbsp;a&amp;nbsp;page,&amp;nbsp;the&amp;nbsp;generated&amp;nbsp;code&amp;nbsp;calls&amp;nbsp;InitOutputCache()&amp;nbsp;from&amp;nbsp;here&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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: #0000FF;"&gt;base&lt;/span&gt;&lt;span style="color: #000000;"&gt;.FrameworkInitialize();&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;InitOutputCache(_cacheSettings);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/dushouke/aggbug/2072565.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dushouke/archive/2011/06/04/use-aspx-outputcache-in-ashx.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dushouke/archive/2011/01/26/UNIX-Timestamp-DateTime.html</id><title type="text">Unix时间戳与C# DateTime时间类型互换</title><summary type="text">/// &lt;summary&gt;/// method for converting a UNIX timestamp to a regular/// System.DateTime value (and also to the current local time)/// &lt;/summary&gt;/// &lt;param name="timestamp"&gt;value to b...</summary><published>2011-01-26T14:20:00Z</published><updated>2011-01-26T14:20:00Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dushouke/archive/2011/01/26/UNIX-Timestamp-DateTime.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/archive/2011/01/26/UNIX-Timestamp-DateTime.html"/><content type="html">&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;/// &amp;lt;summary&amp;gt;&lt;br/&gt;/// method for converting a UNIX timestamp to a regular&lt;br/&gt;/// System.DateTime value (and also to the current local time)&lt;br/&gt;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;/// &amp;lt;param name="timestamp"&amp;gt;value to be converted&amp;lt;/param&amp;gt;&lt;br/&gt;/// &amp;lt;returns&amp;gt;converted DateTime in string format&amp;lt;/returns&amp;gt;&lt;br/&gt;private static DateTime ConvertTimestamp(double timestamp)&lt;br/&gt;{&lt;br/&gt;    //create a new DateTime value based on the Unix Epoch&lt;br/&gt;    DateTime converted = new DateTime(1970, 1, 1, 0, 0, 0, 0);&lt;br/&gt;&lt;br/&gt;    //add the timestamp to the value&lt;br/&gt;    DateTime newDateTime = converted.AddSeconds(timestamp);&lt;br/&gt;&lt;br/&gt;    //return the value in string format&lt;br/&gt;    return newDateTime.ToLocalTime();&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;/// &amp;lt;summary&amp;gt;&lt;br/&gt;/// method for converting a System.DateTime value to a UNIX Timestamp&lt;br/&gt;/// &amp;lt;/summary&amp;gt;&lt;br/&gt;/// &amp;lt;param name="value"&amp;gt;date to convert&amp;lt;/param&amp;gt;&lt;br/&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;private double ConvertToTimestamp(DateTime value)&lt;br/&gt;{&lt;br/&gt;    //create Timespan by subtracting the value provided from&lt;br/&gt;    //the Unix Epoch&lt;br/&gt;    TimeSpan span = (value - new DateTime(1970, 1, 1, 0, 0, 0, 0).ToLocalTime());&lt;br/&gt;&lt;br/&gt;    //return the total seconds (which is a UNIX timestamp)&lt;br/&gt;    return (double)span.TotalSeconds;&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/dushouke/aggbug/1945812.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dushouke/archive/2011/01/26/UNIX-Timestamp-DateTime.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dushouke/archive/2010/11/07/1871015.html</id><title type="text">[转]SQL Server 事务处理 回滚事务</title><summary type="text">SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[t1]  (   [Id] [INT] NOT NULL,   [c...</summary><published>2010-11-07T04:12:00Z</published><updated>2010-11-07T04:12:00Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dushouke/archive/2010/11/07/1871015.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/archive/2010/11/07/1871015.html"/><content type="html">&lt;font size="2" face="Courier New"&gt;&lt;font color="#0000ff"&gt;SET&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;ANSI_NULLS&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;ON&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;GO&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;SET&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;QUOTED_IDENTIFIER&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;ON&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;GO&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;CREATE&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;TABLE&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;[dbo]&lt;/font&gt;&lt;font color="#c0c0c0"&gt;.&lt;/font&gt;&lt;font color="#800000"&gt;[t1]&lt;/font&gt;     &lt;br /&gt;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;[Id]&lt;/font&gt;&amp;#160;&lt;font color="#000000"&gt;&lt;i&gt;[INT]&lt;/i&gt;&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;NOT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;NULL&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;[c1]&lt;/font&gt;&amp;#160;&lt;font color="#000000"&gt;&lt;i&gt;[NVARCHAR]&lt;/i&gt;&lt;/font&gt;&lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;50&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;NULL&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;[c2]&lt;/font&gt;&amp;#160;&lt;font color="#000000"&gt;&lt;i&gt;[DATETIME]&lt;/i&gt;&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;NULL&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;CONSTRAINT&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;[PK_Table1]&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;PRIMARY&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;KEY&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;CLUSTERED&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;(&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;[Id]&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;ASC&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;WITH&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;PAD_INDEX&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;OFF&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;STATISTICS_NORECOMPUTE&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;OFF&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;IGNORE_DUP_KEY&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;OFF&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;ALLOW_ROW_LOCKS&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;ON&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;ALLOW_PAGE_LOCKS&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;ON&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;ON&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;[PRIMARY]&lt;/font&gt;     &lt;br /&gt;&amp;#160; &lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff"&gt;ON&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;[PRIMARY]&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#008000"&gt;&lt;i&gt;--解决方案一&lt;/i&gt;&lt;/font&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;DECLARE&lt;/font&gt;&amp;#160;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&amp;#160;&lt;font color="#000000"&gt;&lt;i&gt;INT&lt;/i&gt;&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;SET&lt;/font&gt;&amp;#160;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;&amp;#160;&lt;font color="#000000"&gt;0&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;BEGIN&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;TRAN&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;Tran_2008_10_07&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;INSERT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;INTO&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;t1&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;Id&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;c1&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff"&gt;VALUES&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;1&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;'1'&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;SET&lt;/font&gt;&amp;#160;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;+&lt;/font&gt;&amp;#160;&lt;font color="#ff00ff"&gt;&lt;i&gt;@@ERROR&lt;/i&gt;&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;INSERT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;INTO&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;t1&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;Id&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;c1&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff"&gt;VALUES&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;2&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;'2'&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;SET&lt;/font&gt;&amp;#160;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;+&lt;/font&gt;&amp;#160;&lt;font color="#ff00ff"&gt;&lt;i&gt;@@ERROR&lt;/i&gt;&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;INSERT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;INTO&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;t1&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;Id&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;c1&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff"&gt;VALUES&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#ff0000"&gt;'xxxx3'&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;'3'&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;SET&lt;/font&gt;&amp;#160;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;+&lt;/font&gt;&amp;#160;&lt;font color="#ff00ff"&gt;&lt;i&gt;@@ERROR&lt;/i&gt;&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;INSERT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;INTO&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;t1&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;Id&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;c1&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff"&gt;VALUES&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;4&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;'4'&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;SET&lt;/font&gt;&amp;#160;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;+&lt;/font&gt;&amp;#160;&lt;font color="#ff00ff"&gt;&lt;i&gt;@@ERROR&lt;/i&gt;&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;INSERT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;INTO&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;t1&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;Id&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;c1&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff"&gt;VALUES&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;5&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;'5'&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;SET&lt;/font&gt;&amp;#160;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;+&lt;/font&gt;&amp;#160;&lt;font color="#ff00ff"&gt;&lt;i&gt;@@ERROR&lt;/i&gt;&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;IF&lt;/font&gt;&amp;#160;&lt;font color="#8000ff"&gt;@iErrorCount&lt;/font&gt;&amp;#160;&lt;font color="#c0c0c0"&gt;=&lt;/font&gt;&amp;#160;&lt;font color="#000000"&gt;0&lt;/font&gt;     &lt;br /&gt;&amp;#160; &lt;font color="#0000ff"&gt;BEGIN&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;COMMIT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;TRAN&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;Tran_2008_10_07&lt;/font&gt;     &lt;br /&gt;&amp;#160; &lt;font color="#0000ff"&gt;END&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff"&gt;ELSE&lt;/font&gt;     &lt;br /&gt;&amp;#160; &lt;font color="#0000ff"&gt;BEGIN&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;ROLLBACK&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;TRAN&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;Tran_2008_10_07&lt;/font&gt;     &lt;br /&gt;&amp;#160; &lt;font color="#0000ff"&gt;END&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#008000"&gt;&lt;i&gt;--解决方案二&lt;/i&gt;&lt;/font&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;BEGIN&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;TRY&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;BEGIN&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;TRAN&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;Tran_2008_10_07&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;INSERT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;INTO&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;t1&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;Id&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;c1&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;VALUES&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;1&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;'1'&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;INSERT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;INTO&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;t1&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;Id&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;c1&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;VALUES&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;2&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;'2'&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;INSERT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;INTO&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;t1&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;Id&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;c1&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;VALUES&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#ff0000"&gt;'xxxx3'&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;'3'&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;INSERT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;INTO&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;t1&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;Id&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;c1&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;VALUES&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;4&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;'4'&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;INSERT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;INTO&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;t1&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#800000"&gt;Id&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;c1&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;VALUES&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#800000"&gt;(&lt;/font&gt;&lt;font color="#000000"&gt;5&lt;/font&gt;&lt;font color="#c0c0c0"&gt;,&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;'5'&lt;/font&gt;&lt;font color="#800000"&gt;)&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;COMMIT&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;TRAN&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;Tran_2008_10_07&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff"&gt;END&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;TRY&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;font color="#0000ff"&gt;BEGIN&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;CATCH&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;RAISERROR&lt;/font&gt;&amp;#160;&lt;font color="#000000"&gt;50005&lt;/font&gt;&lt;font color="#ff0000"&gt;N'错误了'&lt;/font&gt;     &lt;br /&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#0000ff"&gt;ROLLBACK&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;TRAN&lt;/font&gt;&amp;#160;&lt;font color="#800000"&gt;Tran_2008_10_07&lt;/font&gt;     &lt;br /&gt;&lt;font color="#0000ff"&gt;END&lt;/font&gt;&amp;#160;&lt;font color="#0000ff"&gt;CATCH&lt;/font&gt;&amp;#160; &lt;/font&gt;&lt;img src="http://www.cnblogs.com/dushouke/aggbug/1871015.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dushouke/archive/2010/11/07/1871015.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dushouke/archive/2010/10/19/1855735.html</id><title type="text">代码片段——泛型类型转换</title><summary type="text">public static class TConverter{ public static T ChangeType&lt;T&gt;(object value) { return (T)ChangeType(typeof(T), value); } public static object ChangeType(Type t, object value) { TypeConverter tc =...</summary><published>2010-10-19T10:05:00Z</published><updated>2010-10-19T10:05:00Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dushouke/archive/2010/10/19/1855735.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/archive/2010/10/19/1855735.html"/><content type="html">&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;public static class TConverter&lt;br/&gt;{&lt;br/&gt;    public static T ChangeType&amp;lt;T&amp;gt;(object value)&lt;br/&gt;    {&lt;br/&gt;        return (T)ChangeType(typeof(T), value);&lt;br/&gt;    }&lt;br/&gt;    public static object ChangeType(Type t, object value)&lt;br/&gt;    {&lt;br/&gt;        TypeConverter tc = TypeDescriptor.GetConverter(t);&lt;br/&gt;        return tc.ConvertFrom(value);&lt;br/&gt;    }&lt;br/&gt;    public static void RegisterTypeConverter&amp;lt;T, TC&amp;gt;() where TC : TypeConverter&lt;br/&gt;    {&lt;br/&gt;        TypeDescriptor.AddAttributes(typeof(T), new TypeConverterAttribute(typeof(TC)));&lt;br/&gt;    }&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/dushouke/aggbug/1855735.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dushouke/archive/2010/10/19/1855735.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/dushouke/archive/2010/10/19/1855587.html</id><title type="text">代码存档</title><summary type="text">public static bool IsCached(HttpContext context, TimeSpan cacheDuration) { var modifiedSince = context.Request.Headers["If-Modified-Since"]; if (!string.IsNullOrEmpty(modifiedSince)) { modifiedSince =...</summary><published>2010-10-19T07:49:00Z</published><updated>2010-10-19T07:49:00Z</updated><author><name>MicroCoder</name><uri>http://www.cnblogs.com/dushouke/</uri></author><link rel="alternate" href="http://www.cnblogs.com/dushouke/archive/2010/10/19/1855587.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/dushouke/archive/2010/10/19/1855587.html"/><content type="html">&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    public static bool IsCached(HttpContext context, TimeSpan cacheDuration)&lt;br/&gt;    {&lt;br/&gt;        var modifiedSince = context.Request.Headers["If-Modified-Since"];&lt;br/&gt;        if (!string.IsNullOrEmpty(modifiedSince))&lt;br/&gt;        {&lt;br/&gt;            modifiedSince = Regex.Replace(modifiedSince, @";.*$", "");//ie6&lt;br/&gt;        }&lt;br/&gt;        DateTime modified;&lt;br/&gt;        if (DateTime.TryParse(modifiedSince, out modified) &amp;amp;&amp;amp; modified.Add(cacheDuration) &amp;gt; DateTime.Now)&lt;br/&gt;        {&lt;br/&gt;            context.Response.StatusCode = 304;&lt;br/&gt;            context.Response.Status = "304 Not Modified";&lt;br/&gt;            return true;&lt;br/&gt;        }&lt;br/&gt;        return false;&lt;br/&gt;    }&lt;br/&gt;    public static void SetCachedHeader(HttpContext context, TimeSpan cacheDuration)&lt;br/&gt;    {&lt;br/&gt;        FieldInfo maxAge = context.Response.Cache.GetType().GetField("_maxAge",&lt;br/&gt;BindingFlags.Instance | BindingFlags.NonPublic);&lt;br/&gt;        maxAge.SetValue(context.Response.Cache, cacheDuration);&lt;br/&gt;        //context.Response.Cache.SetMaxAge(cacheDuration);&lt;br/&gt;        context.Response.Cache.SetETag(string.Empty);&lt;br/&gt;        context.Response.Cache.SetCacheability(HttpCacheability.Public);&lt;br/&gt;        context.Response.Cache.SetLastModified(DateTime.Now);&lt;br/&gt;        context.Response.Cache.SetExpires(DateTime.Now.Add(cacheDuration));&lt;br/&gt;        context.Response.Cache.AppendCacheExtension(&lt;br/&gt;                "must-revalidate, proxy-revalidate");&lt;br/&gt;    }&lt;br/&gt;    public static void Cached(HttpContext context)&lt;br/&gt;    {&lt;br/&gt;        Cached(context, TimeSpan.FromMinutes(10));&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    public static void Cached(HttpContext context, TimeSpan cacheDuration)&lt;br/&gt;    {&lt;br/&gt;        if (!IsCached(context, cacheDuration))&lt;br/&gt;        {&lt;br/&gt;            SetCachedHeader(context, cacheDuration);&lt;br/&gt;        }&lt;br/&gt;        else&lt;br/&gt;        {&lt;br/&gt;            context.Response.End();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;    }&lt;br/&gt;    public static void GZIP(HttpContext context)&lt;br/&gt;    {&lt;br/&gt;        string acceptEncoding = context.Request.Headers["Accept-Encoding"];&lt;br/&gt;&lt;br/&gt;        if (!String.IsNullOrEmpty(acceptEncoding))&lt;br/&gt;        {&lt;br/&gt;            acceptEncoding = acceptEncoding.ToString().ToUpperInvariant();&lt;br/&gt;            //如果头部里有包含"GZIP&amp;rdquo;,"DEFLATE",表示你浏览器支持 GZIP,DEFLATE压缩&lt;br/&gt;            if (acceptEncoding.Contains("GZIP"))&lt;br/&gt;            {&lt;br/&gt;                //向输出流头部添加压缩信息&lt;br/&gt;                context.Response.AppendHeader("Content-encoding", "gzip");&lt;br/&gt;                context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);&lt;br/&gt;            }&lt;br/&gt;            else if (acceptEncoding.Contains("DEFLATE"))&lt;br/&gt;            {&lt;br/&gt;                //向输出流头部添加压缩信息&lt;br/&gt;                context.Response.AppendHeader("Content-encoding", "deflate");&lt;br/&gt;                context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;&lt;/div&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/dushouke/aggbug/1855587.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/dushouke/archive/2010/10/19/1855587.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
