﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-Teddy's Knowledge Base</title><link>http://www.cnblogs.com/teddyma/</link><description /><language>zh-cn</language><lastBuildDate>Fri, 19 Mar 2010 19:58:00 GMT</lastBuildDate><pubDate>Fri, 19 Mar 2010 19:58:00 GMT</pubDate><ttl>60</ttl><item><title>Cross-Domain AJAX Enabled WCF Service</title><link>http://www.cnblogs.com/teddyma/archive/2010/03/06/1679982.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Sat, 06 Mar 2010 15:29:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2010/03/06/1679982.html</guid><description><![CDATA[<p>阅读: 949 评论: 2 作者: <a href="http://www.cnblogs.com/teddyma/" target="_blank">Teddy's Knowledge Base</a> 发表于 2010-03-06 23:29 <a href="http://www.cnblogs.com/teddyma/archive/2010/03/06/1679982.html" target="_blank">原文链接</a></p><h3>Background</h3> <p>For the basic of how to create an AJAX enabled WCF service, please refer to MSDN: <a target="_blank" title="http://msdn.microsoft.com/en-us/library/bb924552.aspx" href="http://msdn.microsoft.com/en-us/library/bb924552.aspx">http://msdn.microsoft.com/en-us/library/bb924552.aspx</a>.</p> <p>For the basic of JSONP, please refer to: <a target="_blank" title="http://en.wikipedia.org/wiki/JSON#JSONP" href="http://en.wikipedia.org/wiki/JSON#JSONP">http://en.wikipedia.org/wiki/JSON#JSONP</a>.</p> <p>This article introduce how to make AJAX enabled WCF service support cross-domain request.</p> <p>In <a target="_blank" href="http://go.microsoft.com/fwlink/?LinkId=87352">the WCF &amp; WF samples</a> provided by Microsoft, there is already a &#8220;custom binding extension&#8221; implementation for JSONP support. But there is some limitation, the biggest limitation is it could not support both JSON &amp; JSONP protocol for one AJAX enabled WCF service URL, and it requires each endpoint you want to support JSONP protocol be configured with the specific custom JSONP binding extension which increased configuration complexity &amp; cost.</p> <p>Here I introduce a more general &#8220;custom Http Module&#8221; implementation for cross-domain calling AJAX enabled WCF services.</p> <p>At the beginning, firstly, please realize WCF does not support custom Http Modules by default, which means, by default, a WCF service request, even a webHttpBinding AJAX enabled WCF service request, doesn&#8217;t go through any custom Http Modules. To enable it, you need to set the aspNetCompatibilityEnabled property of serviceHostingEnvironment element to true like below:<br /></p><div class="cnblogs_code"><div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">system.serviceModel</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">serviceHostingEnvironment&nbsp;</span><span style="color: #ff0000;">aspNetCompatibilityEnabled</span><span style="color: #0000ff;">="true"</span><span style="color: #ff0000;">&nbsp;</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;...<br /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">system.serviceModel</span><span style="color: #0000ff;">&gt;</span></div></div><p>And to enable a WCF service support custom Http Module, you also need to mark the AspNetCompatibilityRequirementsAttribute on the service contract like below: </p><div class="cnblogs_code"><div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #000000;">[ServiceContract]<br />[AspNetCompatibilityRequirements(RequirementsMode</span><span style="color: #000000;">=</span><span style="color: #000000;">AspNetCompatibilityRequirementsMode.Allowed)]<br /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;TestAjaxClientService<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br />}</span></div></div><h3>JSONPModule</h3> <p>Since with the aspNetCompatibilityEnabled property set to true, an Http WCF service request goes through custom Http Modules, it is possible to write a custom Http Module to automatically convert any JSON response to JSONP response. And actually, since it will be so general, it could not only give JSONP support to WCF, but also give JSONP support to any existing JSON response services, such as Web services and Http handler services. The JSONPModule class below is part of <a href="http://nintegrate.com/" target="_blank">NIntegrate</a> framework (BSD license), but it has no dependency. So you could use it freely and independently. </p><div class="cnblogs_code" onclick="cnblogs_code_show('d0dc62da-3ed7-422a-b80a-e5ca9b1c1b10')"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif" class="code_img_closed" id="code_img_closed_d0dc62da-3ed7-422a-b80a-e5ca9b1c1b10" alt="" /><img src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif" class="code_img_opened" id="code_img_opened_d0dc62da-3ed7-422a-b80a-e5ca9b1c1b10" onclick="cnblogs_code_hide('d0dc62da-3ed7-422a-b80a-e5ca9b1c1b10',event)" style="display: none;"><span class="cnblogs_code_collapse">JSONPModule.cs</span><div id="cnblogs_code_open_d0dc62da-3ed7-422a-b80a-e5ca9b1c1b10" class="cnblogs_code_hide"><div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;System;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;System.Collections.Generic;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;System.IO;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;System.Linq;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;System.Text;<br /></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;System.Web;<br /><br /></span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;NIntegrate.Web<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;JSONPModule&nbsp;:&nbsp;IHttpModule<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;JSON_CONTENT_TYPE&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">application/json</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;JS_CONTENT_TYPE&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">text/javascript</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#region</span><span style="color: #000000;">&nbsp;IHttpModule&nbsp;Members</span><span style="color: #000000;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Dispose()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Init(HttpApplication&nbsp;app)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;app.ReleaseRequestState&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;OnReleaseRequestState;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#endregion</span><span style="color: #000000;"><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;OnReleaseRequestState(</span><span style="color: #0000ff;">object</span><span style="color: #000000;">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpApplication&nbsp;app&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(HttpApplication)sender;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpResponse&nbsp;response&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;app.Response;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(response.ContentType.ToLowerInvariant().Contains(JSON_CONTENT_TYPE)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">!</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.IsNullOrEmpty(app.Request.Params[</span><span style="color: #800000;">"</span><span style="color: #800000;">jsoncallback</span><span style="color: #800000;">"</span><span style="color: #000000;">]))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.ContentType&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;JS_CONTENT_TYPE;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.Filter&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;JsonResponseFilter(response.Filter);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;JsonResponseFilter&nbsp;:&nbsp;Stream<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">readonly</span><span style="color: #000000;">&nbsp;Stream&nbsp;_responseStream;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;_position;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;_isContinueBuffer;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;JsonResponseFilter(Stream&nbsp;responseStream)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_responseStream&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;responseStream;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;CanRead&nbsp;{&nbsp;</span><span style="color: #0000ff;">get</span><span style="color: #000000;">&nbsp;{&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;&nbsp;}&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;CanSeek&nbsp;{&nbsp;</span><span style="color: #0000ff;">get</span><span style="color: #000000;">&nbsp;{&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;&nbsp;}&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;CanWrite&nbsp;{&nbsp;</span><span style="color: #0000ff;">get</span><span style="color: #000000;">&nbsp;{&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;&nbsp;}&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;Length&nbsp;{&nbsp;</span><span style="color: #0000ff;">get</span><span style="color: #000000;">&nbsp;{&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">;&nbsp;}&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;Position&nbsp;{&nbsp;</span><span style="color: #0000ff;">get</span><span style="color: #000000;">&nbsp;{&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;_position;&nbsp;}&nbsp;</span><span style="color: #0000ff;">set</span><span style="color: #000000;">&nbsp;{&nbsp;_position&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;value;&nbsp;}&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Write(</span><span style="color: #0000ff;">byte</span><span style="color: #000000;">[]&nbsp;buffer,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;offset,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;count)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;strBuffer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Encoding.UTF8.GetString(buffer,&nbsp;offset,&nbsp;count);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strBuffer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;AppendJsonpCallback(strBuffer,&nbsp;HttpContext.Current.Request);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">byte</span><span style="color: #000000;">[]&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Encoding.UTF8.GetBytes(strBuffer);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_responseStream.Write(data,&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">,&nbsp;data.Length);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;AppendJsonpCallback(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;strBuffer,&nbsp;HttpRequest&nbsp;request)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;prefix&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Empty;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;suffix&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">.Empty;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">_isContinueBuffer)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strBuffer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;RemovePrefixComments(strBuffer);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(strBuffer.StartsWith(</span><span style="color: #800000;">"</span><span style="color: #800000;">{</span><span style="color: #800000;">"</span><span style="color: #000000;">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;prefix&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;request.Params[</span><span style="color: #800000;">"</span><span style="color: #800000;">jsoncallback</span><span style="color: #800000;">"</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">(</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(strBuffer.EndsWith(</span><span style="color: #800000;">"</span><span style="color: #800000;">}</span><span style="color: #800000;">"</span><span style="color: #000000;">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;suffix&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">);</span><span style="color: #800000;">"</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_isContinueBuffer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;prefix&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;strBuffer&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;suffix;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;RemovePrefixComments(</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;strBuffer)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;str&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;strBuffer.TrimStart();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(str.StartsWith(</span><span style="color: #800000;">"</span><span style="color: #800000;">/*</span><span style="color: #800000;">"</span><span style="color: #000000;">))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;pos&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;str.IndexOf(</span><span style="color: #800000;">"</span><span style="color: #800000;">*/</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800080;">2</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pos&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;str.Substring(pos&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">2</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;str.TrimStart();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;str;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Close()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_responseStream.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Flush()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_responseStream.Flush();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;Seek(</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;offset,&nbsp;SeekOrigin&nbsp;origin)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;_responseStream.Seek(offset,&nbsp;origin);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;SetLength(</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;length)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_responseStream.SetLength(length);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">override</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;Read(</span><span style="color: #0000ff;">byte</span><span style="color: #000000;">[]&nbsp;buffer,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;offset,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;count)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;_responseStream.Read(buffer,&nbsp;offset,&nbsp;count);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</span></div></div></div><h3>Sample</h3> <p>The sample in this chapter is a unit test of <a href="http://nintegrate.com/" target="_blank">NIntegrate</a> for the JSONPModule. Imagine we have an AJAX enabled WCF service &#8211; TestAjaxClientService.svc, which could be called by jQuery like below: </p><div class="cnblogs_code"><div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jQuery.getJSON(</span><span style="color: #000000;">'</span><span style="color: #000000;">http://localhost:2166/TestAjaxClientService.svc/Hello</span><span style="color: #000000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(data)&nbsp;{&nbsp;alert(</span><span style="color: #000000;">'</span><span style="color: #000000;">inner-domain&nbsp;called&nbsp;by&nbsp;jQuery&nbsp;through&nbsp;normal&nbsp;JSON&nbsp;protocol:&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;data.d);&nbsp;});</span></div></div><p>With the JSONPModule configured like below: </p><div class="cnblogs_code"><div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">system.web</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;...<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">httpModules</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">add&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="JSONPModule"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="NIntegrate.Web.JSONPModule,&nbsp;NIntegrate,&nbsp;Version=X.X.X.X,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=e2b9e2165dbdd5e6"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">httpModules</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">system.web</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;...<br />&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">system.webServer</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;...<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">modules</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">add&nbsp;</span><span style="color: #ff0000;">name</span><span style="color: #0000ff;">="JSONPModule"</span><span style="color: #ff0000;">&nbsp;preCondition</span><span style="color: #0000ff;">="managedHandler"</span><span style="color: #ff0000;">&nbsp;type</span><span style="color: #0000ff;">="NIntegrate.Web.JSONPModule,&nbsp;NIntegrate,&nbsp;Version=X.X.X.X,&nbsp;Culture=neutral,&nbsp;PublicKeyToken=e2b9e2165dbdd5e6"</span><span style="color: #0000ff;">/&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">modules</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;...<br />&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">system.webServer</span><span style="color: #0000ff;">&gt;</span></div></div><p>We can cross-domain call the TestAjaxClientService.svc like: </p><div id="cnblogs_code_open_03708931-f87d-49c7-9b79-b3739db46bff"><div><div class="cnblogs_code"><div><!--<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jQuery.getJSON(</span><span style="color: #000000;">'</span><span style="color: #000000;">http://127.0.0.1:2166/TestAjaxClientService.svc/Hello?jsoncallback=?</span><span style="color: #000000;">'</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">(data)&nbsp;{&nbsp;alert(</span><span style="color: #000000;">'</span><span style="color: #000000;">cross-domain&nbsp;called&nbsp;by&nbsp;jQuery&nbsp;through&nbsp;JSONP&nbsp;protocol&nbsp;(no&nbsp;cache):&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;data.d);&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;jsonpCallback(data)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(</span><span style="color: #000000;">'</span><span style="color: #000000;">cross-domain&nbsp;called&nbsp;by&nbsp;jQuery&nbsp;through&nbsp;JSONP&nbsp;protocol&nbsp;(cached):&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;data.d);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jQuery.ajaxSetup({&nbsp;cache:&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jQuery.getScript(</span><span style="color: #000000;">'</span><span style="color: #000000;">http://127.0.0.1:2166/TestAjaxClientService.svc/Hello?jsoncallback=jsonpCallback</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jQuery.ajaxSetup({&nbsp;cache:&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">&nbsp;});</span></div></div></div></div><img src="http://www.cnblogs.com/teddyma/aggbug/1679982.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/teddyma/archive/2010/03/06/1679982.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/teddyma/archive/2010/03/06/1679982.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59194/" target="_blank">网游3大美女高管仅剩刘伟</a><span style="color:gray">(2010-03-19 23:59)</span><br/>· <a href="http://news.cnblogs.com/n/59193/" target="_blank">查理&#183;米勒宣称将一口气公布20个Mac OS X漏洞</a><span style="color:gray">(2010-03-19 23:55)</span><br/>· <a href="http://news.cnblogs.com/n/59192/" target="_blank">Google投资的海底光缆建设完毕</a><span style="color:gray">(2010-03-19 23:53)</span><br/>· <a href="http://news.cnblogs.com/n/59191/" target="_blank">微软2009年所获专利达苹果10倍</a><span style="color:gray">(2010-03-19 23:50)</span><br/>· <a href="http://news.cnblogs.com/n/59190/" target="_blank">门户网站竞相掀起微博圈地运动</a><span style="color:gray">(2010-03-19 22:26)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>LRU Caching Practice</title><link>http://www.cnblogs.com/teddyma/archive/2010/02/24/1673024.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Wed, 24 Feb 2010 14:07:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2010/02/24/1673024.html</guid><description><![CDATA[<p>阅读: 1007 评论: 9 作者: <a href="http://www.cnblogs.com/teddyma/" target="_blank">Teddy's Knowledge Base</a> 发表于 2010-02-24 22:07 <a href="http://www.cnblogs.com/teddyma/archive/2010/02/24/1673024.html" target="_blank">原文链接</a></p><p>In this article, let&#8217;s practice applying LRU caching in an enterprise application for different business cases.</p> <h3>Background</h3> <p>Firstly, let&#8217;s assume we have a User table in database and there may be millions of rows in this table. LRU caching is only meaningful if the total data to be cached is huge, which means it is impossible to put all the data in memory at same time. For example, if the rows in User table are only thousands, we could consider cache everything, but if it is millions, it becomes unsuitable to cache everything, right?</p> <p>Our target is to LRU cache the total huge user data in our enterprise application for different business cases.</p> <h3>Practice</h3> <h4>Case 1 Users are accessed by ID only, it is a single server application(APP1) and the only way to change the user data is through this application.</h4> <p>In this case, since &#8220;the only way to change the user data is through this application&#8221;, items cached could always be kept active in the cache, but each time a user is modified, and the item is in the cache, it should be set expired.</p> <p>So the most suitable implementation for this case is to use in an in-process LRU hash table in APP1 for caching users. The LruDictionary class is a thread safe LRU hash table implementation provided by <a href="http://nintegrate.com/" target="_blank">NIntegrate</a>.</p> <h4>Case 2 Based on Case 1, additionally, user data may be read by another applications(APP2) deployed on a different server, but the access from APP2 is not very often.</h4> <p>In this case, since &#8220;the access from APP2 is not very often&#8221;, we could consider simply expose the LruDictionary instance for caching users in Case 1 as a WCF service which is still be deployed in APP1. This service should contain necessary operation methods for get/set the user cache.</p> <h4>Case 3 Based on Case 1, additionally, user data may be read by another applications(APP2) deployed on a different farm consisted of 3 servers, and the access from APP2 is much more often than from APP1 itself.</h4> <p>In this case, since &#8220;the access from APP2 is much more often&#8221;, still keep the LRU hash table implementation in APP1 becomes not reasonable. Because the load pressure from APP2 may kill the APP1 server.</p> <p>So we should consider introduce some distributed hash table implementation such as memcached.</p> <h4>Case 4 Users are accessed by ID only, it is a single server application(APP1), but user data in the table could be modified by out-of-our-control applications.</h4> <p>Case 1-3 all could ensure &#8220;the only way to change the user data is through APP1&#8221;, that is a required condition for keeping cached users always be updated and consistent with data in database. But in this case, since &#8220;user data in the table could be modified by out-of-our-control applications&#8221;, it becomes impossible to keep &#8220;cached users always be updated and consistent with data in database&#8221;. </p> <p>So if your business still require this, you have to choose not to do any caching for user data. Or, if data inconsistent for short time could be tolerated, you could consider using a LRU hash table supporting &#8220;item expire time&#8221;, which could automatically expire items when the expire time elapsed. The LruItemCache class is a thread safe LRU hash table implementation provided by <a href="http://nintegrate.com/" target="_blank">NIntegrate</a> which supports &#8220;item expire time&#8221; and more other features.</p> <h4>Case 5 Based on Case 1, additionally, users depend on its parent department. If a department is modified, all its child users in cache should be removed.</h4> <p>In this case, compared to case 1, we need a LRU hash table supporting &#8220;dependency based item expiration&#8221;. The LruDependingDictionary class is an extended version of LruDictionary provided in <a href="http://nintegrate.com/" target="_blank">NIntegrate</a>, which supports &#8220;dependency based item expiration&#8221;, the LruItemCache class provided by <a href="http://nintegrate.com/" target="_blank">NIntegrate</a> could also has this ability.</p> <h4>Case 6 Same to Case 5 except that users are accessed not only by ID, but also by unique user name, or user email address.</h4> <p>In this case, compared to case 5, because the hash table hashes items by the key value, for one hash table, if we choose ID as key, user name, user email could not be the key, which means the cache using ID as key could not benefit user name or user email based user data access.</p> <p>To support this case, if you use 3 hash tables, each one use ID, user name or user email as key, the problem is there may be duplicated data cached in memory. A better solution is use a LRU hash table supporting indexing, which means for each user, there is still only one copy cached in memory, but cached items could be accessed through different indexes (indexed by different keys). The LruItemCache class provided by <a href="http://nintegrate.com/" target="_blank">NIntegrate</a> just implements this, it is not only a thread safe LRU hash table, but also supports &#8220;item expire time&#8221;, &#8220;dependency based item expiration&#8221; and multiple indexes for cached items.</p><img src="http://www.cnblogs.com/teddyma/aggbug/1673024.html?type=1" width="1" height="1" alt=""/><p>评论: 9　<a href="http://www.cnblogs.com/teddyma/archive/2010/02/24/1673024.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/teddyma/archive/2010/02/24/1673024.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59194/" target="_blank">网游3大美女高管仅剩刘伟</a><span style="color:gray">(2010-03-19 23:59)</span><br/>· <a href="http://news.cnblogs.com/n/59193/" target="_blank">查理&#183;米勒宣称将一口气公布20个Mac OS X漏洞</a><span style="color:gray">(2010-03-19 23:55)</span><br/>· <a href="http://news.cnblogs.com/n/59192/" target="_blank">Google投资的海底光缆建设完毕</a><span style="color:gray">(2010-03-19 23:53)</span><br/>· <a href="http://news.cnblogs.com/n/59191/" target="_blank">微软2009年所获专利达苹果10倍</a><span style="color:gray">(2010-03-19 23:50)</span><br/>· <a href="http://news.cnblogs.com/n/59190/" target="_blank">门户网站竞相掀起微博圈地运动</a><span style="color:gray">(2010-03-19 22:26)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Enterprise Caching Summary</title><link>http://www.cnblogs.com/teddyma/archive/2010/02/23/1672295.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Tue, 23 Feb 2010 15:52:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2010/02/23/1672295.html</guid><description><![CDATA[<p>阅读: 991 评论: 1 作者: <a href="http://www.cnblogs.com/teddyma/" target="_blank">Teddy's Knowledge Base</a> 发表于 2010-02-23 23:52 <a href="http://www.cnblogs.com/teddyma/archive/2010/02/23/1672295.html" target="_blank">原文链接</a></p><h3>Background</h3> <p>Caching is an very important topic in enterprise-level multi-tier application, especially for web application. A general rule for applying caching is you should consider do necessary caching at each tier of your application if possible. The other basic rule for applying caching is the closer the cache is near the user, the cheaper the cost to implement it is. For example, to implement browser side caching is much cheaper than at server side.</p> <p>For a B/S application, from client to server side, possible tiers to implement caching include:</p> <ul> <li>Browser: local sandbox cache, memory cache</li> <li>Network Router: <a target="_blank" href="http://en.wikipedia.org/wiki/Content_delivery_network">CDN</a></li> <li>Web Server: HTTP output cache, memory cache, distributed cache</li> <li>Application Server: memory cache, distributed cache</li> <li>Database Server: memory cache, file system cache</li></ul> <p>The <a target="_blank" href="http://www.google.com/url?q=http://www.mnot.net/cache_docs/%23CACHE-CONTROL&amp;usg=AFQjCNEGwr_phc-0JpnTZfoEjxftuBKdlw&amp;ei=VpCDS-v7PMyIkAWDhK2pAg&amp;sa=X&amp;oi=section_link&amp;resnum=1&amp;ct=legacy&amp;ved=0CAsQygQ">Cache-Control HTTP Headers</a>&#8206; standardizes the cache policy from browser, to network router and to Web server. Different Web browsers implement their internal caching according to the standard Web protocols.</p> <p>CDN helps us cache and distribute content through Network routers between browsers and Web servers automatically.</p> <p>Modern database systems could manage the caching of database server well enough by themselves.</p> <p>So the only places need additional implementation for caching are in our application code, for a B/S application it may include:</p> <ul> <li>Browser side code (scripts, Flash/Silverlight, Java Applet/MS ActiveX/Smart Client, etc)</li> <li>Application code</li> <li>Database query code</li></ul> <p>I don&#8217;t want to talk much about caching in browser side code and database query code, because browser side caching more means how many memory you want the browser to occupy at client machine and there are no &#8220;thread synchronization&#8221; problems to be considered; and database side caching has its own guideline according to the database query language standards and different database system implementation.</p> <p>So what left, worth to be discussed more is the caching in main application code. For a .NET C# application, this should mean the C# code to be compiled into executables to be deployed onto different tier servers. To be simple for discussion, let&#8217;s make our discussion below focus on .NET C# application only.</p> <h3>Caching in Application Code</h3> <h4>1. Output Cache</h4> <p>The word &#8220;output cache&#8221; seems be invented by Microsoft together with ASP.NET. But its principle is simple. It caches the entire HTTP response message by a key which consists of a specified set of fields in a HTTP request. Since with output cache, a HTTP request could get the response message without further execution if the key exists in the output cache active key list, the performance of the Web server could be improved a lot. Especially, from II6, page level output cache could be dealt at IIS instead of at the ASP.NET ISAPI, there for, the performance is even much better than before.</p> <p>So, as a general rule, for any request, if the response is possible to be reused to some extent, you should consider use output cache. But before use it, according to the &#8220;the closer the cheaper&#8221; rule, you should consider apply caching at &#8220;closer&#8221; places than Web server first. For example, practically, if possible, pay for CDN to extend the benefit of output cache out of your Web server to 3rd party CDN servers.</p> <h4>2. ASP.NET Cache Class and EntLib Caching Application Block</h4> <p>Behind the output cache, is the caching for application data. ASP.NET provides the Caching class, and similarly, the EntLib provides the caching application block. Each of the Cache class implements not only a thread safe hash table, but also common cache expiration policies. But so far, there are still not build-in cache replacement algorithms, such as FIFO &amp; LRU, which are required by most real enterprise application. That&#8217;s why I&nbsp; implements a set of cache classes with LRU algorithms in <a href="http://nintegrate.com/" target="_blank">NIntegrate</a>. And either of the Cache classes is still in-process caching only, which means, in a load-balanced farm, the application data cached in Cache instances may exists duplicated in each of the server in the farm.</p> <h4>3. Caching Service &amp; Distributed Hash Table</h4> <p>If you want to shared cached data among processes and even among servers, you need shared caching service in separate process or <a target="_blank" href="http://en.wikipedia.org/wiki/Distributed_hash_table">distributed hash table</a>.</p> <p>A caching service is a service wrapping a hash table executing in a separate process, but store shared data among different processes on the same server. For example, I could implement it as a namedpipe binding based WCF service, exposing methods for operating an internal hash table, which stores shared application data of 3 ASP.NET application deployed on the same Web server.</p> <p>Furthermore, a distributed hash table is more like a caching service be deployed on a separate server or even farm, which stores shared application data of different applications deployed on different servers and farms. The biggest benefit of distributed hash table is the cached data is not duplicated in different server, so you could expire cached data centrally. But you should realize that the performance of a distributed hash table is worse than a caching service deployed on the same server of an application, and of course far worse than in-process caching. But in practice, because in most cases, the performance bottle neck of enterprise applications is database server, and compare to querying database, the performance of distributed hash table is still much faster and&nbsp; it could be scale-out easier than database, so distributed hash table could still benefit a lot on performance and is a indispensable part of enterprise applications.</p><img src="http://www.cnblogs.com/teddyma/aggbug/1672295.html?type=1" width="1" height="1" alt=""/><p>评论: 1　<a href="http://www.cnblogs.com/teddyma/archive/2010/02/23/1672295.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/teddyma/archive/2010/02/23/1672295.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59194/" target="_blank">网游3大美女高管仅剩刘伟</a><span style="color:gray">(2010-03-19 23:59)</span><br/>· <a href="http://news.cnblogs.com/n/59193/" target="_blank">查理&#183;米勒宣称将一口气公布20个Mac OS X漏洞</a><span style="color:gray">(2010-03-19 23:55)</span><br/>· <a href="http://news.cnblogs.com/n/59192/" target="_blank">Google投资的海底光缆建设完毕</a><span style="color:gray">(2010-03-19 23:53)</span><br/>· <a href="http://news.cnblogs.com/n/59191/" target="_blank">微软2009年所获专利达苹果10倍</a><span style="color:gray">(2010-03-19 23:50)</span><br/>· <a href="http://news.cnblogs.com/n/59190/" target="_blank">门户网站竞相掀起微博圈地运动</a><span style="color:gray">(2010-03-19 22:26)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>NIntegrate SOA Practice – E-Appointments Sample Application</title><link>http://www.cnblogs.com/teddyma/archive/2010/02/20/1669964.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Sat, 20 Feb 2010 14:44:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2010/02/20/1669964.html</guid><description><![CDATA[<p>阅读: 959 评论: 2 作者: <a href="http://www.cnblogs.com/teddyma/" target="_blank">Teddy's Knowledge Base</a> 发表于 2010-02-20 22:44 <a href="http://www.cnblogs.com/teddyma/archive/2010/02/20/1669964.html" target="_blank">原文链接</a></p><p><a target="_blank" href="http://eappointments.codeplex.com/">E-Appointments</a>  is a Microsoft ASAP (Aspiring Software Architects Program) Case Study  Implementation using the latest .NET 3.0 Technologies and proven  Microsoft patterns and practices like Software Factories and Enterprise  Library.<br /></p><p>In this article, I&#8217;m going to enhance this application using <a href="http://nintegrate.com/" target="_blank">NIntegrate</a>, to  demonstrate how to enhance WCF configuration management and how to make a  WCF based distributed application support dynamic query easier and more  maintainable in real enterprise distributed application.&nbsp;</p><p>For details, please visit:&nbsp;<a target="_blank" href="http://www.cnblogs.com/teddyma/articles/1669960.html">http://www.cnblogs.com/teddyma/articles/1669960.html </a><br /></p><img src="http://www.cnblogs.com/teddyma/aggbug/1669964.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/teddyma/archive/2010/02/20/1669964.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/teddyma/archive/2010/02/20/1669964.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59194/" target="_blank">网游3大美女高管仅剩刘伟</a><span style="color:gray">(2010-03-19 23:59)</span><br/>· <a href="http://news.cnblogs.com/n/59193/" target="_blank">查理&#183;米勒宣称将一口气公布20个Mac OS X漏洞</a><span style="color:gray">(2010-03-19 23:55)</span><br/>· <a href="http://news.cnblogs.com/n/59192/" target="_blank">Google投资的海底光缆建设完毕</a><span style="color:gray">(2010-03-19 23:53)</span><br/>· <a href="http://news.cnblogs.com/n/59191/" target="_blank">微软2009年所获专利达苹果10倍</a><span style="color:gray">(2010-03-19 23:50)</span><br/>· <a href="http://news.cnblogs.com/n/59190/" target="_blank">门户网站竞相掀起微博圈地运动</a><span style="color:gray">(2010-03-19 22:26)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>NIntegrate v0.9.0.1 released</title><link>http://www.cnblogs.com/teddyma/archive/2010/01/23/1654547.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Fri, 22 Jan 2010 17:17:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2010/01/23/1654547.html</guid><description><![CDATA[<p>阅读: 293 评论: 2 作者: <a href="http://www.cnblogs.com/teddyma/" target="_blank">Teddy's Knowledge Base</a> 发表于 2010-01-23 01:17 <a href="http://www.cnblogs.com/teddyma/archive/2010/01/23/1654547.html" target="_blank">原文链接</a></p><p><strong>Project Site:</strong><br /></p><p><a target="_blank" href="http://nintegrate.com/">http://nintegrate.com</a></p><p><br /></p><p><strong>Download: </strong></p><p><a target="_blank" href="http://code.google.com/p/nintegrate/source/checkout">Download from SVN</a></p> 		<p><a target="_blank" href="http://code.google.com/p/nintegrate/downloads/list">Download from Google Code</a></p> 		<p><a target="_blank" href="http://nintegrate.codeplex.com/Release/ProjectReleases.aspx">Download from CodePlex</a></p><br /><p>&nbsp;</p><img src="http://www.cnblogs.com/teddyma/aggbug/1654547.html?type=1" width="1" height="1" alt=""/><p>评论: 2　<a href="http://www.cnblogs.com/teddyma/archive/2010/01/23/1654547.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/teddyma/archive/2010/01/23/1654547.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59194/" target="_blank">网游3大美女高管仅剩刘伟</a><span style="color:gray">(2010-03-19 23:59)</span><br/>· <a href="http://news.cnblogs.com/n/59193/" target="_blank">查理&#183;米勒宣称将一口气公布20个Mac OS X漏洞</a><span style="color:gray">(2010-03-19 23:55)</span><br/>· <a href="http://news.cnblogs.com/n/59192/" target="_blank">Google投资的海底光缆建设完毕</a><span style="color:gray">(2010-03-19 23:53)</span><br/>· <a href="http://news.cnblogs.com/n/59191/" target="_blank">微软2009年所获专利达苹果10倍</a><span style="color:gray">(2010-03-19 23:50)</span><br/>· <a href="http://news.cnblogs.com/n/59190/" target="_blank">门户网站竞相掀起微博圈地运动</a><span style="color:gray">(2010-03-19 22:26)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>.NET Enterprise SOA – NIntegrate Practice</title><link>http://www.cnblogs.com/teddyma/archive/2010/01/20/1652751.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Wed, 20 Jan 2010 13:58:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2010/01/20/1652751.html</guid><description><![CDATA[<p>阅读: 1228 评论: 18 作者: <a href="http://www.cnblogs.com/teddyma/" target="_blank">Teddy's Knowledge Base</a> 发表于 2010-01-20 21:58 <a href="http://www.cnblogs.com/teddyma/archive/2010/01/20/1652751.html" target="_blank">原文链接</a></p><p><a href="http://nintegrate.com/" target="_blank">NIntegrate</a> is open source .NET enterprise SOA framework. It provides several reusable SOA components to solve specific enterprise SOA problems. Different from some other one-in-one SOA solution, <a href="http://nintegrate.com/" target="_blank">NIntegrate</a> is designed to be easily integrated with your company&#8217;s application frameworks.<br />
</p>
<h4><strong>Problems NIntegrate solves: </strong></h4>
1) Decouple WCF configuration from Web.config/App.config files.<br />
2) Dynamic query through WCF.<br />
3) Flexible object mapping.<br />
4) LRU dictionary &amp; caching. <br />
5) Single thread worker queue.<br />
<h4><strong>Read the article for details:</strong><br />
</h4>
<p><a target="_blank" href="http://www.cnblogs.com/teddyma/articles/1651126.html">.NET Enterprise SOA &#8211; NIntegrate Practice</a></p>
<p><a target="_blank" href="http://www.cnblogs.com/teddyma/articles/1651126.html">http://www.cnblogs.com/teddyma/articles/1651126.html</a></p>
<p><br />
</p><img src="http://www.cnblogs.com/teddyma/aggbug/1652751.html?type=1" width="1" height="1" alt=""/><p>评论: 18　<a href="http://www.cnblogs.com/teddyma/archive/2010/01/20/1652751.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/teddyma/archive/2010/01/20/1652751.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59194/" target="_blank">网游3大美女高管仅剩刘伟</a><span style="color:gray">(2010-03-19 23:59)</span><br/>· <a href="http://news.cnblogs.com/n/59193/" target="_blank">查理&#183;米勒宣称将一口气公布20个Mac OS X漏洞</a><span style="color:gray">(2010-03-19 23:55)</span><br/>· <a href="http://news.cnblogs.com/n/59192/" target="_blank">Google投资的海底光缆建设完毕</a><span style="color:gray">(2010-03-19 23:53)</span><br/>· <a href="http://news.cnblogs.com/n/59191/" target="_blank">微软2009年所获专利达苹果10倍</a><span style="color:gray">(2010-03-19 23:50)</span><br/>· <a href="http://news.cnblogs.com/n/59190/" target="_blank">门户网站竞相掀起微博圈地运动</a><span style="color:gray">(2010-03-19 22:26)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>Enterprise WCF - Integrate WCF Configuration into Your Enterprise Framework</title><link>http://www.cnblogs.com/teddyma/archive/2009/08/28/1556076.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Fri, 28 Aug 2009 15:46:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/08/28/1556076.html</guid><description><![CDATA[<p>阅读: 1802 评论: 15 作者: <a href="http://www.cnblogs.com/teddyma/" target="_blank">Teddy's Knowledge Base</a> 发表于 2009-08-28 23:46 <a href="http://www.cnblogs.com/teddyma/archive/2009/08/28/1556076.html" target="_blank">原文链接</a></p><h3>Background</h3> <p>Lots of people declares they are using WCF in their &#8220;enterprise&#8221; distributed software development together with other SOA technologies, and even calls their software architecture WCF based. If you are one of them, could you please answer the questions below; or, if you plan to be one of them, ask yourself the questions below:</p> <ul> <li>How many WCF services are their in your enterprise architecture?  </li><li>How many sub-systems and databases?  </li><li>How many servers deploying or consuming WCF services?  </li><li>How many load-balanced server farms and application tiers related to WCF?  </li><li>How many deployment server environments (DEV, QA, Staging, Production, etc)?  </li><li>Are your servers and farms in different domains, with different connectivity and different network bandwidth?  </li><li>What are your auto-build, test and release processes for WCF services?  </li><li>How do you deal with the WCF service configuration difference for different deployment server environments?  </li><li>How often are your WCF service configuration changed?  </li><li>How do you maintain your WCF service configuration changes?  </li><li>Where are your WCF service configuration saved?</li></ul> <p>The goal to ask the questions above is to lead you thinking &amp; agree:</p> <ul> <li>The management of WCF services in enterprise distributed software development is not an easy stuff.  </li><li>To put WCF service configuration in your application configuration files is a nightmare for enterprise distributed software development.  </li><li>For enterprise distributed software development involving WCF service, an &#8220;enterprise framework&#8221; integrating consistent centralized WCF service configuration management is highly necessary.</li></ul> <p>Let me give a definition for &#8220;<strong>enterprise framework</strong>&#8221; discussed in this text: a set of shared software development components, and related configuration persistence and development &amp; management process for all the distributed application development in enterprise.</p> <p>Give you an example of &#8220;<strong>enterprise framework</strong>&#8221; in my company, even before using WCF, we already have a set of shared software components (VJ++/VB/DotNet COM DLLs for Non-DotNet applications; and DotNet DLLs for all DotNet applications), and a centralized database based configuration store for all the application app settings, connection strings, Web Service URLs and dependency injected object factory. We also have related development, maintain and release process for both the software components and the data in the configuration store.</p> <p>Since you agree (I assumes) about the &#8220;the goal to ask the questions&#8221; above, when beginning to widely use WCF in our enterprise application development, you could imagine, we try to integrate WCF service configuration into our enterprise framework.</p> <p><a href="http://www.cnblogs.com/teddyma/archive/2009/03/23/1419329.html">Articles I posted before</a> already shows the possibility to centralize and programmatically configure all WCF service configuration. The rest of this text will introduce the summary of how we integrate WCF service configuration into our enterprise framework, and show you how to easily integrate WCF service configuration into other frameworks on the top of <a href="http://nintegrate.com/">NIntegrate</a> &#8211; an open source DotNet integration framework.</p> <h3>How We Integrate WCF Configuration into Our Enterprise Framework</h3> <p>I don&#8217;t want to expose any confidential information of my company, the purpose of this chapter is only to show you the benefits we get from the solution and give you more confidence to adopt a similar solution.</p> <ul> <li>Since we put all the configuration for applications in centralized database even before using WCF, the most suitable place to save all WCF configuration is the same database. And because our existing configuration are grouped by servers, load-balanced server farms and different applications, when extending the database to support WCF configuration, we easily get the ability to reuse WCF configuration at application, server or even farm scope for contracts, addresses, bindings, behaviors, security, etc.  </li><li>Since we put all the configuration in database instead of application configuration files, our applications could have very light application configuration files, and even no application files. This makes the auto-build &amp; deployment of our application on different deployment server environment be super easy - no code change required for release packages on different server environments.  </li><li>To read configuration from database for publishing &amp; consuming WCF services, we created some shared components (DotNet components only) to our development framework library, including custom ServiceHost Factory for hosting services and custom ChannelFactory for consuming services. For non-DotNet applications, they could also consume WCF services through Web Service binding or through DotNet COM wrappers (for windows apps only).  </li><li>The shared components not only read &amp; cache WCF configuration from database, but also automatically refresh the cache in memory through background threads according to specified refresh policy, so it is easy to change WCF configuration at runtime, ex., disable/enable services or endpoints, change bindings, addresses or other settings, apply consistent health monitor, performance trace, error handling &amp; logging, etc, through custom behaviors or other extension APIs of WCF.</li></ul> <h3>Integrate WCF Configuration into a Dummy Enterprise Framework on the Top of NIntegrate</h3> <p>To demonstrate how to integrate WCF configuration into an enterprise framework, I&#8217;ll introduce a dummy enterprise framework in this chapter.</p> <p>The attached picture is the class diagram of dummy enterprise framework integrated with NIntegrate:</p> <p><a href="http://images.cnblogs.com/cnblogs_com/teddyma/WindowsLiveWriter/IntegrateWCFConfigurationintoYourCurrent_14219/ClassDiagram_4.png"><img title="ClassDiagram" style="border-width: 0px; display: inline;" alt="ClassDiagram" src="http://images.cnblogs.com/cnblogs_com/teddyma/WindowsLiveWriter/IntegrateWCFConfigurationintoYourCurrent_14219/ClassDiagram_thumb_1.png" width="595" border="0" height="372" /></a> </p> <p>Before integrated with <a href="http://nintegrate.com/"></a><a target="">NIntegrate</a>, all the classes and methods containing the word &#8216;Wcf&#8217; does not exist. The Dummy framework provides abilities to create class instances dependency injected, and get application variables &amp; connection strings centrally, which are very common functions an enterprise framework may provide.</p> <p>To use the DummyFramework, easily call DummyFrameworkConfigurationManager.GetConfiguration() to get an instance of DummyFrameworkConfiguration, and use it to construct a DummyFramework instance. Then you can call methods on DummyFramework. </p> <style type="text/css">.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; }
</style>  <p>On the top of <a href="http://nintegrate.com/">NIntegrate</a>, we could easily give the WCF configuration &amp; custom persistence ability to the dummy framework.</p> <p>To consume a WCF service, call the CreateWcfChannel&lt;T&gt;() method on DummyFramework, inside which reads WCF client endpoint configuration from DummyFrameworkConfiguration, which internally could load the configuration from anywhere rather than only in application configuration file (The returning instance is WcfClientEndpoint class, which is a serializable WCF DataContract defined in <a href="http://nintegrate.com/">NIntegrate</a>). The CreateWcfChannel&lt;T&gt;() method calls WcfChannelFactoryFactory.CreateChannelFactory&lt;TChannel&gt;() method, which is defined in <a href="http://nintegrate.com/">NIntegrate</a>, creates the ChannelFactory, cache it and returns an instance of WcfChannelWrapper class (also defined in NIntegrate), which implements the best practice for disposing a WCF channel instance.</p> <p>Sample code as below:</p><pre class="csharpcode">    var df = <span class="kwrd">new</span> DummyFramework(DummyFrameworkConfiguationManager.GetConfiguration());<br />    <span class="kwrd">using</span> (var wrapper = df.CreateWcfChannel&lt;IDummyService&gt;())<br />    {<br />        Response.Write(wrapper.Channel.SayHello());<br />    }</pre>
<style type="text/css">.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; }
</style>

<p>To publish a WcfService, create the DummyWcfServiceHostFactory class, and set the Factory property of a .svc file as below:</p><pre class="csharpcode"><span class="asp">&lt;%@ ServiceHost Service="DummyEnterpriseService.Implementation.DummyService"<br />    Factory="DummyEnterpriseFramework.DummyWcfServiceHostFactory" %&gt;</span></pre>
<style type="text/css">.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; }
</style>

<p>The DummyWcfServiceHostFactory class inherits the WcfServiceHostFactory class defined in NIntegrate, and overrides the LoadServiceConfiguration() method to load configuration from anywhere expected (The returning instance is WcfService class, which is a serializable Wcf DataContract defined in <a href="http://nintegrate.com/">NIntegrate</a>).</p>
<p>Attached the source code of the sample DummyEnterpriseFrameworkIntegration:</p>
<p><a href="http://files.cnblogs.com/teddyma/DummyEnterpriseFrameworkIntegration.zip">DummyEnterpriseFrameworkIntegration.zip</a></p>
<p><br /></p><p><strong>Original by <a href="http://www.cnblogs.com/teddyma">Teddy's Knowledge Base</a>, All rights reserved.</strong></p><p>First Publish: <a id="Editor_Edit_hlEntryLink" title="view: Enterprise WCF - Integrate WCF Configuration into Your Enterprise Framework" href="http://www.cnblogs.com/teddyma/archive/2009/08/28/1556076.html" target="_blank">http://www.cnblogs.com/teddyma/archive/2009/08/28/1556076.html</a></p><p><a id="Editor_Edit_hlEntryLink" title="view: Enterprise WCF - Integrate WCF Configuration into Your Enterprise Framework" href="http://www.cnblogs.com/teddyma/archive/2009/08/28/1556076.html" target="_blank"><br /></a></p><p>//The end</p><img src="http://www.cnblogs.com/teddyma/aggbug/1556076.html?type=1" width="1" height="1" alt=""/><p>评论: 15　<a href="http://www.cnblogs.com/teddyma/archive/2009/08/28/1556076.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/teddyma/archive/2009/08/28/1556076.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59194/" target="_blank">网游3大美女高管仅剩刘伟</a><span style="color:gray">(2010-03-19 23:59)</span><br/>· <a href="http://news.cnblogs.com/n/59193/" target="_blank">查理&#183;米勒宣称将一口气公布20个Mac OS X漏洞</a><span style="color:gray">(2010-03-19 23:55)</span><br/>· <a href="http://news.cnblogs.com/n/59192/" target="_blank">Google投资的海底光缆建设完毕</a><span style="color:gray">(2010-03-19 23:53)</span><br/>· <a href="http://news.cnblogs.com/n/59191/" target="_blank">微软2009年所获专利达苹果10倍</a><span style="color:gray">(2010-03-19 23:50)</span><br/>· <a href="http://news.cnblogs.com/n/59190/" target="_blank">门户网站竞相掀起微博圈地运动</a><span style="color:gray">(2010-03-19 22:26)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>NIntegrate近期动态08/06</title><link>http://www.cnblogs.com/teddyma/archive/2009/08/06/1540090.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Thu, 06 Aug 2009 01:55:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/08/06/1540090.html</guid><description><![CDATA[<p>阅读: 943 评论: 5 作者: <a href="http://www.cnblogs.com/teddyma/" target="_blank">Teddy's Knowledge Base</a> 发表于 2009-08-06 09:55 <a href="http://www.cnblogs.com/teddyma/archive/2009/08/06/1540090.html" target="_blank">原文链接</a></p>NIntegrate (<a target="_blank" href="http://nintegrate.com/">http://nintegrate.com/</a>) 是Teddy近期在维护的开源SOA开发框架。原本计划在近期能达到1.0版本，不过，在0.8之后，经过很多深入的思考和工作中的相关应用实践，决定进行较大的重构，或者说重新设计更合适。以下是在0.9中将包含的部分重大修改：
<div>
<ol>
    <li>首先，新设计的核心模块不再依赖并默认提供基于SQL Server数据库的集中化配置实现和相关UI。取而代之的是一个更加灵活的，易于和第三方系统，框架进行整合的API。使得无论对个人用户的简单应用，还是企业级用户整合到现有的系统都更方便和灵活。</li>
    <li>新设计目前包含三个DLL：NIntegrate.ServiceModel.dll提供了一组对WCF动态配置的API，彻底摆脱对Web.config/App.config的依赖，完备的配置所有&lt;system.ServiceModel&gt;配置中的WCF服务的ABC和自定义扩展等配置信息；NIntegrate.Data.dll提供了一组套多数据库支持，跨WCF，COM兼容的强类型高性能数据库查询语言，支持CRUD和存储过程整合；NIntegrate.Web.dll提供了对上两个DLL的Web扩展，包括基于Web的WCF配置实时在线编辑和持久化控件以及基于WCF和上述查询语言的DataSource控件。</li>
</ol>
<div><br />
</div>
<div>未完待续。。。</div>
</div><img src="http://www.cnblogs.com/teddyma/aggbug/1540090.html?type=1" width="1" height="1" alt=""/><p>评论: 5　<a href="http://www.cnblogs.com/teddyma/archive/2009/08/06/1540090.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/teddyma/archive/2009/08/06/1540090.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59194/" target="_blank">网游3大美女高管仅剩刘伟</a><span style="color:gray">(2010-03-19 23:59)</span><br/>· <a href="http://news.cnblogs.com/n/59193/" target="_blank">查理&#183;米勒宣称将一口气公布20个Mac OS X漏洞</a><span style="color:gray">(2010-03-19 23:55)</span><br/>· <a href="http://news.cnblogs.com/n/59192/" target="_blank">Google投资的海底光缆建设完毕</a><span style="color:gray">(2010-03-19 23:53)</span><br/>· <a href="http://news.cnblogs.com/n/59191/" target="_blank">微软2009年所获专利达苹果10倍</a><span style="color:gray">(2010-03-19 23:50)</span><br/>· <a href="http://news.cnblogs.com/n/59190/" target="_blank">门户网站竞相掀起微博圈地运动</a><span style="color:gray">(2010-03-19 22:26)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>EF上海再次急招.NET Senior Developer，有意者请和我联系[08/06更新]</title><link>http://www.cnblogs.com/teddyma/archive/2009/06/29/1512956.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Mon, 29 Jun 2009 01:28:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/06/29/1512956.html</guid><description><![CDATA[<p>阅读: 1094 评论: 6 作者: <a href="http://www.cnblogs.com/teddyma/" target="_blank">Teddy's Knowledge Base</a> 发表于 2009-06-29 09:28 <a href="http://www.cnblogs.com/teddyma/archive/2009/06/29/1512956.html" target="_blank">原文链接</a></p><p><font color="#000080" face="Arial" size="4"><span style="font-size: 15px;">有意者请点击下面的链接给我留言：</span></font></p>
<p><font color="#000080" face="Arial" size="4"><span style="font-size: 15px;"><a target="_blank" href="http://www.cnblogs.com/teddyma/contact.aspx?id=1">http://www.cnblogs.com/teddyma/contact.aspx?id=1</a></span></font></p>
<p><font color="#000080" face="Arial" size="4"><span style="font-size: 15px;">
</span></font></p>
<font color="#000080" face="Arial" size="4">
<div>
<table align="left" cellpadding="0" cellspacing="0" vspace="0" hspace="0">
    <tr>
        <td style="padding: 5pt 9pt;" align="left" valign="top">
        <p class="MsoNormal"><strong><em><span style="font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: black;" lang="EN-US">Position: Senior Software Engineer</span></em></strong><strong><span style="font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: black;" lang="EN-US"><o:p></o:p></span></strong></p>
        <p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: black;" lang="EN-US">(full-time
        position, based in </span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;;" lang="EN-US"><ns0:city><ns0:place><span style="color: black;">Shanghai</span></ns0:place></ns0:city><span style="color: black;">)<o:p></o:p></span></span></p>
        <p class="MsoNormal"><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: black;" lang="EN-US"><br />
        * Bachelors degree in computer science, Master&#8217;s desirable<br />
        * Over 4 years solid working experience on software developing <br />
        * Good skill on Visual Studio, client-side scripting, Java, ASP.NET (VB), C#<br />
        * Strong SQL Server,&nbsp;</span><span style="font-size: 10pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: blue;" lang="EN-US">&nbsp;</span><span style="font-size: 10pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;" lang="EN-US">J</span><span style="font-size: 10pt; font-family: &quot;Verdana&quot;,&quot;sans-serif&quot;; color: black;" lang="EN-US">avaScript, HTML, XML, XSLT, CSS., webservices.<br />
        * Good communication skill and good teamwork sprit<br />
        * Can work under pressure and be willing to meet the challenge <br />
        * Fluency in English, both on speaking and writing</span><span lang="EN-US"><o:p></o:p></span></p>
        </td>
    </tr>
</table>
</div>
</font>
<p>&nbsp;</p><img src="http://www.cnblogs.com/teddyma/aggbug/1512956.html?type=1" width="1" height="1" alt=""/><p>评论: 6　<a href="http://www.cnblogs.com/teddyma/archive/2009/06/29/1512956.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/teddyma/archive/2009/06/29/1512956.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59194/" target="_blank">网游3大美女高管仅剩刘伟</a><span style="color:gray">(2010-03-19 23:59)</span><br/>· <a href="http://news.cnblogs.com/n/59193/" target="_blank">查理&#183;米勒宣称将一口气公布20个Mac OS X漏洞</a><span style="color:gray">(2010-03-19 23:55)</span><br/>· <a href="http://news.cnblogs.com/n/59192/" target="_blank">Google投资的海底光缆建设完毕</a><span style="color:gray">(2010-03-19 23:53)</span><br/>· <a href="http://news.cnblogs.com/n/59191/" target="_blank">微软2009年所获专利达苹果10倍</a><span style="color:gray">(2010-03-19 23:50)</span><br/>· <a href="http://news.cnblogs.com/n/59190/" target="_blank">门户网站竞相掀起微博圈地运动</a><span style="color:gray">(2010-03-19 22:26)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>AdoNet vs LinqToSql vs NIntegrateQuery查询性能测试</title><link>http://www.cnblogs.com/teddyma/archive/2009/06/07/1497903.html</link><dc:creator>Teddy's Knowledge Base</dc:creator><author>Teddy's Knowledge Base</author><pubDate>Sat, 06 Jun 2009 17:45:00 GMT</pubDate><guid>http://www.cnblogs.com/teddyma/archive/2009/06/07/1497903.html</guid><description><![CDATA[<p>阅读: 2948 评论: 13 作者: <a href="http://www.cnblogs.com/teddyma/" target="_blank">Teddy's Knowledge Base</a> 发表于 2009-06-07 01:45 <a href="http://www.cnblogs.com/teddyma/archive/2009/06/07/1497903.html" target="_blank">原文链接</a></p><p>AdoNet vs LinqToSql vs NIntegrateQuery查询性能测试. </p><p>先上测试结果: </p><p>AdoNetTest: 267ms<br />AdoNetCachedCommandTest: 182ms<br />LinqToSqlTest: 3191ms<br />LinqToSqlCompiledQueryTest: 386ms<br />NIntegrateQueryTest: 266ms </p><h3>下载</h3> <p>下载测试数据库：<a href="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=MSFTDBProdSamples&amp;DownloadId=61985&amp;FileTime=128816120189200000&amp;Build=15123"><span style="color: #0000ff;">AdventureWorksLT2008</span></a> </p><p>下载测试代码：<a href="http://files.cnblogs.com/teddyma/NIntegrateQueryPerformanceComparison.zip"><span style="color: #0000ff;">NIntegrateQueryPerformanceComparison.zip</span></a> </p><h3>代码导航</h3><div class="cnblogs_code"><img id="Code_Closed_Image_013743" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_013743').style.display='none'; document.getElementById('Code_Open_Image_013743').style.display='inline'; document.getElementById('Code_Open_Text_013743').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" height="16"><img id="Code_Open_Image_013743" style="display: none;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_013743').style.display='none'; getElementById('Code_Closed_Image_013743').style.display='inline'; getElementById('Code_Closed_Text_013743').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" height="16"><span id="Code_Closed_Text_013743" class="cnblogs_code_Collapse">AdoNetTest.cs</span><span id="Code_Open_Text_013743" style="display: none;"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;AdoNetTest&nbsp;:&nbsp;ITest<br /></span><span style="color: #008080;">&nbsp;2</span><span style="color: #000000;"><img id="Codehighlighter1_33_1600_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_33_1600_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_33_1600_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_33_1600_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_33_1600_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_33_1600_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_33_1600_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_33_1600_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_33_1600_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_33_1600_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;3</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">readonly</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;_connString&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ConfigurationManager.ConnectionStrings[Constants.ConnectingStringName].ConnectionString;<br /></span><span style="color: #008080;">&nbsp;4</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">&nbsp;5</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;DoExecute(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;repeatTime)<br /></span><span style="color: #008080;">&nbsp;6</span><span style="color: #000000;"><img id="Codehighlighter1_233_1370_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_233_1370_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_233_1370_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_233_1370_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_233_1370_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_233_1370_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_233_1370_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_233_1370_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_233_1370_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_233_1370_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;7</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(var&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;repeatTime;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br /></span><span style="color: #008080;">&nbsp;8</span><span style="color: #000000;"><img id="Codehighlighter1_297_1360_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_297_1360_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_297_1360_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_297_1360_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_297_1360_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_297_1360_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_297_1360_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_297_1360_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_297_1360_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_297_1360_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;9</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;(var&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlConnection(_connString))<br /></span><span style="color: #008080;">10</span><span style="color: #000000;"><img id="Codehighlighter1_381_1346_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_381_1346_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_381_1346_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_381_1346_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_381_1346_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_381_1346_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_381_1346_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_381_1346_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_381_1346_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_381_1346_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">11</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(conn.State&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;System.Data.ConnectionState.Open)<br /></span><span style="color: #008080;">12</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.Open();<br /></span><span style="color: #008080;">13</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cmd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlCommand(<br /></span><span style="color: #008080;">14</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">SELECT&nbsp;TOP&nbsp;1&nbsp;ProductID,Name&nbsp;FROM&nbsp;SalesLT.Product&nbsp;WHERE&nbsp;ProductID&nbsp;=&nbsp;@ProductID</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;conn)<br /></span><span style="color: #008080;">15</span><span style="color: #000000;"><img id="Codehighlighter1_683_727_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_683_727_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_683_727_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_683_727_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_683_727_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_683_727_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_683_727_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_683_727_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_683_727_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_683_727_Open_Text"><span style="color: #000000;">{CommandType&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;System.Data.CommandType.Text}</span></span><span style="color: #000000;">;<br /></span><span style="color: #008080;">16</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Parameters.Add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlParameter(</span><span style="color: #800000;">"</span><span style="color: #800000;">@ProductID</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;i));<br /></span><span style="color: #008080;">17</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;(var&nbsp;reader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;cmd.ExecuteReader())<br /></span><span style="color: #008080;">18</span><span style="color: #000000;"><img id="Codehighlighter1_885_1328_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_885_1328_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_885_1328_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_885_1328_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_885_1328_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_885_1328_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_885_1328_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_885_1328_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_885_1328_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_885_1328_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">19</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(reader.Read())<br /></span><span style="color: #008080;">20</span><span style="color: #000000;"><img id="Codehighlighter1_954_1306_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_954_1306_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_954_1306_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_954_1306_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_954_1306_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_954_1306_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_954_1306_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_954_1306_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_954_1306_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_954_1306_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">21</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;product&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Product<br /></span><span style="color: #008080;">22</span><span style="color: #000000;"><img id="Codehighlighter1_1056_1279_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1056_1279_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1056_1279_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1056_1279_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1056_1279_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1056_1279_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1056_1279_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1056_1279_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1056_1279_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1056_1279_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">23</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProductID&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)&nbsp;reader[</span><span style="color: #800000;">"</span><span style="color: #800000;">ProductID</span><span style="color: #800000;">"</span><span style="color: #000000;">]),<br /></span><span style="color: #008080;">24</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((</span><span style="color: #0000ff;">string</span><span style="color: #000000;">)&nbsp;reader[</span><span style="color: #800000;">"</span><span style="color: #800000;">Name</span><span style="color: #800000;">"</span><span style="color: #000000;">])<br /></span><span style="color: #008080;">25</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;">;<br /></span><span style="color: #008080;">26</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">27</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">28</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">29</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">30</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">31</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">32</span><span style="color: #000000;"><img id="Codehighlighter1_1380_1594_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1380_1594_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1380_1594_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1380_1594_Open_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1380_1594_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1380_1594_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1380_1594_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1380_1594_Closed_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1380_1594_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff;">ITest&nbsp;Members</span><span id="Codehighlighter1_1380_1594_Open_Text" style="display: none;"><span style="color: #0000ff;">#region</span><span style="color: #000000;">&nbsp;ITest&nbsp;Members</span><span style="color: #000000;"><br /></span><span style="color: #008080;">33</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">34</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Prepare()<br /></span><span style="color: #008080;">35</span><span style="color: #000000;"><img id="Codehighlighter1_1441_1478_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1441_1478_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1441_1478_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1441_1478_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1441_1478_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1441_1478_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1441_1478_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1441_1478_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1441_1478_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1441_1478_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">36</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoExecute(</span><span style="color: #800080;">1</span><span style="color: #000000;">);<br /></span><span style="color: #008080;">37</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">38</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">39</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Execute()<br /></span><span style="color: #008080;">40</span><span style="color: #000000;"><img id="Codehighlighter1_1518_1574_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1518_1574_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1518_1574_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1518_1574_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1518_1574_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1518_1574_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1518_1574_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1518_1574_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1518_1574_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1518_1574_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">41</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoExecute(Constants.RepeatTime);<br /></span><span style="color: #008080;">42</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">43</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">44</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#endregion</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">45</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">46</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></div><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_013830" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_013830').style.display='none'; document.getElementById('Code_Open_Image_013830').style.display='inline'; document.getElementById('Code_Open_Text_013830').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" height="16"><img id="Code_Open_Image_013830" style="display: none;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_013830').style.display='none'; getElementById('Code_Closed_Image_013830').style.display='inline'; getElementById('Code_Closed_Text_013830').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" height="16"><span id="Code_Closed_Text_013830" class="cnblogs_code_Collapse">AdoNetCachedCommandTest.cs</span><span id="Code_Open_Text_013830" style="display: none;"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;AdoNetCachedCommandTest&nbsp;:&nbsp;ITest<br /></span><span style="color: #008080;">&nbsp;2</span><span style="color: #000000;"><img id="Codehighlighter1_46_1994_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_46_1994_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_46_1994_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_46_1994_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_46_1994_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_46_1994_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_46_1994_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_46_1994_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_46_1994_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_46_1994_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;3</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">readonly</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;_connString&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ConfigurationManager.ConnectionStrings[Constants.ConnectingStringName].ConnectionString;<br /></span><span style="color: #008080;">&nbsp;4</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;SqlCommand&nbsp;_cachedCommand;<br /></span><span style="color: #008080;">&nbsp;5</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;SqlCommand&nbsp;GetCachedCommand()<br /></span><span style="color: #008080;">&nbsp;6</span><span style="color: #000000;"><img id="Codehighlighter1_301_739_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_301_739_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_301_739_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_301_739_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_301_739_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_301_739_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_301_739_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_301_739_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_301_739_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_301_739_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;7</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(_cachedCommand&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)<br /></span><span style="color: #008080;">&nbsp;8</span><span style="color: #000000;"><img id="Codehighlighter1_355_685_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_355_685_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_355_685_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_355_685_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_355_685_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_355_685_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_355_685_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_355_685_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_355_685_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_355_685_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;9</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_cachedCommand&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlCommand(<br /></span><span style="color: #008080;">10</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800000;">"</span><span style="color: #800000;">SELECT&nbsp;TOP&nbsp;1&nbsp;ProductID,Name&nbsp;FROM&nbsp;SalesLT.Product&nbsp;WHERE&nbsp;ProductID&nbsp;=&nbsp;@ProductID</span><span style="color: #800000;">"</span><span style="color: #000000;">)<br /></span><span style="color: #008080;">11</span><span style="color: #000000;"><img id="Codehighlighter1_544_588_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_544_588_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_544_588_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_544_588_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_544_588_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_544_588_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_544_588_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_544_588_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_544_588_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_544_588_Open_Text"><span style="color: #000000;">{CommandType&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;System.Data.CommandType.Text}</span></span><span style="color: #000000;">;<br /></span><span style="color: #008080;">12</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_cachedCommand.Parameters.Add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlParameter(</span><span style="color: #800000;">"</span><span style="color: #800000;">@ProductID</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #800080;">0</span><span style="color: #000000;">));<br /></span><span style="color: #008080;">13</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">14</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">15</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;_cachedCommand.Clone();<br /></span><span style="color: #008080;">16</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">17</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">18</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;DoExecute(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;repeatTime)<br /></span><span style="color: #008080;">19</span><span style="color: #000000;"><img id="Codehighlighter1_796_1764_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_796_1764_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_796_1764_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_796_1764_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_796_1764_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_796_1764_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_796_1764_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_796_1764_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_796_1764_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_796_1764_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">20</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(var&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;repeatTime;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br /></span><span style="color: #008080;">21</span><span style="color: #000000;"><img id="Codehighlighter1_860_1754_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_860_1754_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_860_1754_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_860_1754_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_860_1754_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_860_1754_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_860_1754_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_860_1754_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_860_1754_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_860_1754_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">22</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;(var&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlConnection(_connString))<br /></span><span style="color: #008080;">23</span><span style="color: #000000;"><img id="Codehighlighter1_944_1740_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_944_1740_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_944_1740_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_944_1740_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_944_1740_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_944_1740_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_944_1740_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_944_1740_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_944_1740_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_944_1740_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">24</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(conn.State&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;System.Data.ConnectionState.Open)<br /></span><span style="color: #008080;">25</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.Open();<br /></span><span style="color: #008080;">26</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cmd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetCachedCommand();<br /></span><span style="color: #008080;">27</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Parameters[</span><span style="color: #800080;">0</span><span style="color: #000000;">].Value&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i;<br /></span><span style="color: #008080;">28</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Connection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;conn;<br /></span><span style="color: #008080;">29</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">30</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;(var&nbsp;reader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;cmd.ExecuteReader())<br /></span><span style="color: #008080;">31</span><span style="color: #000000;"><img id="Codehighlighter1_1279_1722_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1279_1722_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1279_1722_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1279_1722_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1279_1722_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1279_1722_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1279_1722_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1279_1722_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1279_1722_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1279_1722_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">32</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(reader.Read())<br /></span><span style="color: #008080;">33</span><span style="color: #000000;"><img id="Codehighlighter1_1348_1700_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1348_1700_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1348_1700_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1348_1700_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1348_1700_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1348_1700_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1348_1700_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1348_1700_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1348_1700_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1348_1700_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">34</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;product&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Product<br /></span><span style="color: #008080;">35</span><span style="color: #000000;"><img id="Codehighlighter1_1450_1673_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1450_1673_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1450_1673_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1450_1673_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1450_1673_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1450_1673_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1450_1673_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1450_1673_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1450_1673_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1450_1673_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">36</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProductID&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)&nbsp;reader[</span><span style="color: #800000;">"</span><span style="color: #800000;">ProductID</span><span style="color: #800000;">"</span><span style="color: #000000;">]),<br /></span><span style="color: #008080;">37</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((</span><span style="color: #0000ff;">string</span><span style="color: #000000;">)&nbsp;reader[</span><span style="color: #800000;">"</span><span style="color: #800000;">Name</span><span style="color: #800000;">"</span><span style="color: #000000;">])<br /></span><span style="color: #008080;">38</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;">;<br /></span><span style="color: #008080;">39</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">40</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">41</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">42</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">43</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">44</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">45</span><span style="color: #000000;"><img id="Codehighlighter1_1774_1988_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1774_1988_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1774_1988_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1774_1988_Open_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1774_1988_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1774_1988_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1774_1988_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1774_1988_Closed_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1774_1988_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff;">ITest&nbsp;Members</span><span id="Codehighlighter1_1774_1988_Open_Text" style="display: none;"><span style="color: #0000ff;">#region</span><span style="color: #000000;">&nbsp;ITest&nbsp;Members</span><span style="color: #000000;"><br /></span><span style="color: #008080;">46</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">47</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Prepare()<br /></span><span style="color: #008080;">48</span><span style="color: #000000;"><img id="Codehighlighter1_1835_1872_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1835_1872_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1835_1872_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1835_1872_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1835_1872_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1835_1872_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1835_1872_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1835_1872_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1835_1872_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1835_1872_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">49</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoExecute(</span><span style="color: #800080;">1</span><span style="color: #000000;">);<br /></span><span style="color: #008080;">50</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">51</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">52</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Execute()<br /></span><span style="color: #008080;">53</span><span style="color: #000000;"><img id="Codehighlighter1_1912_1968_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1912_1968_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1912_1968_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1912_1968_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1912_1968_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1912_1968_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1912_1968_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1912_1968_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1912_1968_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1912_1968_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">54</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoExecute(Constants.RepeatTime);<br /></span><span style="color: #008080;">55</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">56</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">57</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#endregion</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">58</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">59</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></div><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_013904" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_013904').style.display='none'; document.getElementById('Code_Open_Image_013904').style.display='inline'; document.getElementById('Code_Open_Text_013904').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" height="16"><img id="Code_Open_Image_013904" style="display: none;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_013904').style.display='none'; getElementById('Code_Closed_Image_013904').style.display='inline'; getElementById('Code_Closed_Text_013904').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" height="16"><span id="Code_Closed_Text_013904" class="cnblogs_code_Collapse">LinqToSqlTest.cs</span><span id="Code_Open_Text_013904" style="display: none;"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;LinqToSqlTest&nbsp;:&nbsp;ITest<br /></span><span style="color: #008080;">&nbsp;2</span><span style="color: #000000;"><img id="Codehighlighter1_36_921_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_36_921_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_36_921_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_36_921_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_36_921_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_36_921_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_36_921_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_36_921_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_36_921_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_36_921_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;3</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">readonly</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;_connString&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ConfigurationManager.ConnectionStrings[Constants.ConnectingStringName].ConnectionString;<br /></span><span style="color: #008080;">&nbsp;4</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">&nbsp;5</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;DoExecute(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;repeatTime)<br /></span><span style="color: #008080;">&nbsp;6</span><span style="color: #000000;"><img id="Codehighlighter1_236_691_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_236_691_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_236_691_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_236_691_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_236_691_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_236_691_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_236_691_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_236_691_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_236_691_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_236_691_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;7</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(var&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;repeatTime;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br /></span><span style="color: #008080;">&nbsp;8</span><span style="color: #000000;"><img id="Codehighlighter1_300_681_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_300_681_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_300_681_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_300_681_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_300_681_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_300_681_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_300_681_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_300_681_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_300_681_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_300_681_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;9</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;(var&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlConnection(_connString))<br /></span><span style="color: #008080;">10</span><span style="color: #000000;"><img id="Codehighlighter1_384_667_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_384_667_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_384_667_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_384_667_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_384_667_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_384_667_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_384_667_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_384_667_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_384_667_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_384_667_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">11</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(conn.State&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;System.Data.ConnectionState.Open)<br /></span><span style="color: #008080;">12</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.Open();<br /></span><span style="color: #008080;">13</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">14</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;ctx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;AdventureWorksDataContext(conn);<br /></span><span style="color: #008080;">15</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;product&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ctx.Products.SingleOrDefault(p&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;p.ProductID&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;i);<br /></span><span style="color: #008080;">16</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">17</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">18</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">19</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">20</span><span style="color: #000000;"><img id="Codehighlighter1_701_915_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_701_915_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_701_915_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_701_915_Open_Text').style.display='inline';" align="top"><img id="Codehighlighter1_701_915_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_701_915_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_701_915_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_701_915_Closed_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_701_915_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff;">ITest&nbsp;Members</span><span id="Codehighlighter1_701_915_Open_Text" style="display: none;"><span style="color: #0000ff;">#region</span><span style="color: #000000;">&nbsp;ITest&nbsp;Members</span><span style="color: #000000;"><br /></span><span style="color: #008080;">21</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">22</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Prepare()<br /></span><span style="color: #008080;">23</span><span style="color: #000000;"><img id="Codehighlighter1_762_799_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_762_799_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_762_799_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_762_799_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_762_799_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_762_799_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_762_799_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_762_799_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_762_799_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_762_799_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">24</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoExecute(</span><span style="color: #800080;">1</span><span style="color: #000000;">);<br /></span><span style="color: #008080;">25</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">26</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">27</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Execute()<br /></span><span style="color: #008080;">28</span><span style="color: #000000;"><img id="Codehighlighter1_839_895_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_839_895_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_839_895_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_839_895_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_839_895_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_839_895_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_839_895_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_839_895_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_839_895_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_839_895_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">29</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoExecute(Constants.RepeatTime);<br /></span><span style="color: #008080;">30</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">31</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">32</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#endregion</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">33</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">34</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></div><p>&nbsp;</p><div class="cnblogs_code"><img id="Code_Closed_Image_013929" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_013929').style.display='none'; document.getElementById('Code_Open_Image_013929').style.display='inline'; document.getElementById('Code_Open_Text_013929').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" height="16"><img id="Code_Open_Image_013929" style="display: none;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_013929').style.display='none'; getElementById('Code_Closed_Image_013929').style.display='inline'; getElementById('Code_Closed_Text_013929').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" height="16"><span id="Code_Closed_Text_013929" class="cnblogs_code_Collapse">LinqToSqlCompiledQueryTest.cs</span><span id="Code_Open_Text_013929" style="display: none;"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;LinqToSqlCompiledQueryTest&nbsp;:&nbsp;ITest<br /></span><span style="color: #008080;">&nbsp;2</span><span style="color: #000000;"><img id="Codehighlighter1_49_1064_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_49_1064_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_49_1064_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_49_1064_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_49_1064_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_49_1064_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_49_1064_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_49_1064_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_49_1064_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_49_1064_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;3</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">readonly</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;_connString&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ConfigurationManager.ConnectionStrings[Constants.ConnectingStringName].ConnectionString;<br /></span><span style="color: #008080;">&nbsp;4</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">&nbsp;5</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;DoExecute(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;repeatTime)<br /></span><span style="color: #008080;">&nbsp;6</span><span style="color: #000000;"><img id="Codehighlighter1_249_834_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_249_834_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_249_834_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_249_834_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_249_834_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_249_834_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_249_834_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_249_834_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_249_834_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_249_834_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;7</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;query&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;CompiledQuery.Compile((AdventureWorksDataContext&nbsp;ctx,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;index)&nbsp;<br /></span><span style="color: #008080;">&nbsp;8</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;ctx.Products.SingleOrDefault(p&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;p.ProductID&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;index));<br /></span><span style="color: #008080;">&nbsp;9</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">10</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(var&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;repeatTime;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br /></span><span style="color: #008080;">11</span><span style="color: #000000;"><img id="Codehighlighter1_481_824_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_481_824_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_481_824_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_481_824_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_481_824_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_481_824_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_481_824_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_481_824_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_481_824_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_481_824_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">12</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;(var&nbsp;conn&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlConnection(_connString))<br /></span><span style="color: #008080;">13</span><span style="color: #000000;"><img id="Codehighlighter1_565_810_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_565_810_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_565_810_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_565_810_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_565_810_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_565_810_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_565_810_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_565_810_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_565_810_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_565_810_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">14</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(conn.State&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;System.Data.ConnectionState.Open)<br /></span><span style="color: #008080;">15</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.Open();<br /></span><span style="color: #008080;">16</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">17</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;ctx&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;AdventureWorksDataContext(conn);<br /></span><span style="color: #008080;">18</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;product&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;query(ctx,&nbsp;i);<br /></span><span style="color: #008080;">19</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">20</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">21</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">22</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">23</span><span style="color: #000000;"><img id="Codehighlighter1_844_1058_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_844_1058_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_844_1058_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_844_1058_Open_Text').style.display='inline';" align="top"><img id="Codehighlighter1_844_1058_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_844_1058_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_844_1058_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_844_1058_Closed_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_844_1058_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff;">ITest&nbsp;Members</span><span id="Codehighlighter1_844_1058_Open_Text" style="display: none;"><span style="color: #0000ff;">#region</span><span style="color: #000000;">&nbsp;ITest&nbsp;Members</span><span style="color: #000000;"><br /></span><span style="color: #008080;">24</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">25</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Prepare()<br /></span><span style="color: #008080;">26</span><span style="color: #000000;"><img id="Codehighlighter1_905_942_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_905_942_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_905_942_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_905_942_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_905_942_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_905_942_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_905_942_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_905_942_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_905_942_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_905_942_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">27</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoExecute(</span><span style="color: #800080;">1</span><span style="color: #000000;">);<br /></span><span style="color: #008080;">28</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">29</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">30</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Execute()<br /></span><span style="color: #008080;">31</span><span style="color: #000000;"><img id="Codehighlighter1_982_1038_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_982_1038_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_982_1038_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_982_1038_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_982_1038_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_982_1038_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_982_1038_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_982_1038_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_982_1038_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_982_1038_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">32</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoExecute(Constants.RepeatTime);<br /></span><span style="color: #008080;">33</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">34</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">35</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#endregion</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">36</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">37</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></div><p><br /></p><div class="cnblogs_code"><img id="Code_Closed_Image_013959" onclick="this.style.display='none'; document.getElementById('Code_Closed_Text_013959').style.display='none'; document.getElementById('Code_Open_Image_013959').style.display='inline'; document.getElementById('Code_Open_Text_013959').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" width="11" align="top" height="16"><img id="Code_Open_Image_013959" style="display: none;" onclick="this.style.display='none'; document.getElementById('Code_Open_Text_013959').style.display='none'; getElementById('Code_Closed_Image_013959').style.display='inline'; getElementById('Code_Closed_Text_013959').style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width="11" align="top" height="16"><span id="Code_Closed_Text_013959" class="cnblogs_code_Collapse">NIntegrateQueryTest.cs</span><span id="Code_Open_Text_013959" style="display: none;"><br /><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;">&nbsp;1</span><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;NIntegrateQueryTest&nbsp;:&nbsp;ITest<br /></span><span style="color: #008080;">&nbsp;2</span><span style="color: #000000;"><img id="Codehighlighter1_42_1379_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_42_1379_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_42_1379_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_42_1379_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_42_1379_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_42_1379_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_42_1379_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_42_1379_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_42_1379_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_42_1379_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;3</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">readonly</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">string</span><span style="color: #000000;">&nbsp;_connString&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ConfigurationManager.ConnectionStrings[Constants.ConnectingStringName].ConnectionString;<br /></span><span style="color: #008080;">&nbsp;4</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">&nbsp;5</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;DoExecute(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;repeatTime)<br /></span><span style="color: #008080;">&nbsp;6</span><span style="color: #000000;"><img id="Codehighlighter1_242_1149_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_242_1149_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_242_1149_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_242_1149_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_242_1149_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_242_1149_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_242_1149_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_242_1149_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_242_1149_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_242_1149_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;7</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(var&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">&nbsp;repeatTime;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br /></span><span style="color: #008080;">&nbsp;8</span><span style="color: #000000;"><img id="Codehighlighter1_306_1139_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_306_1139_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_306_1139_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_306_1139_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_306_1139_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_306_1139_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_306_1139_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_306_1139_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_306_1139_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_306_1139_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">&nbsp;9</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;criteria&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;ProductCriteria();<br /></span><span style="color: #008080;">10</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;cmd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;QueryCommandFactory(criteria.And(criteria.ProductID&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;i))<br /></span><span style="color: #008080;">11</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.GetQueryCommand();<br /></span><span style="color: #008080;">12</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Parameters.Add(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SqlParameter(</span><span style="color: #800000;">"</span><span style="color: #800000;">@ProductID</span><span style="color: #800000;">"</span><span style="color: #000000;">,&nbsp;i));<br /></span><span style="color: #008080;">13</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Connection.Open();<br /></span><span style="color: #008080;">14</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;(var&nbsp;reader&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;cmd.ExecuteReader())<br /></span><span style="color: #008080;">15</span><span style="color: #000000;"><img id="Codehighlighter1_674_1125_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_674_1125_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_674_1125_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_674_1125_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_674_1125_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_674_1125_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_674_1125_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_674_1125_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_674_1125_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_674_1125_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">16</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(reader.Read())<br /></span><span style="color: #008080;">17</span><span style="color: #000000;"><img id="Codehighlighter1_735_1063_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_735_1063_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_735_1063_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_735_1063_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_735_1063_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_735_1063_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_735_1063_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_735_1063_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_735_1063_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_735_1063_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">18</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;product&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Product<br /></span><span style="color: #008080;">19</span><span style="color: #000000;"><img id="Codehighlighter1_829_1040_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_829_1040_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_829_1040_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_829_1040_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_829_1040_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_829_1040_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_829_1040_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_829_1040_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_829_1040_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_829_1040_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">20</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProductID&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)&nbsp;reader[</span><span style="color: #800000;">"</span><span style="color: #800000;">ProductID</span><span style="color: #800000;">"</span><span style="color: #000000;">]),<br /></span><span style="color: #008080;">21</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;((</span><span style="color: #0000ff;">string</span><span style="color: #000000;">)&nbsp;reader[</span><span style="color: #800000;">"</span><span style="color: #800000;">Name</span><span style="color: #800000;">"</span><span style="color: #000000;">])<br /></span><span style="color: #008080;">22</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;">;<br /></span><span style="color: #008080;">23</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">24</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Connection.Close();<br /></span><span style="color: #008080;">25</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">26</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">27</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">28</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">29</span><span style="color: #000000;"><img id="Codehighlighter1_1159_1373_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1159_1373_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1159_1373_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1159_1373_Open_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1159_1373_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1159_1373_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1159_1373_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1159_1373_Closed_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1159_1373_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff;">ITest&nbsp;Members</span><span id="Codehighlighter1_1159_1373_Open_Text" style="display: none;"><span style="color: #0000ff;">#region</span><span style="color: #000000;">&nbsp;ITest&nbsp;Members</span><span style="color: #000000;"><br /></span><span style="color: #008080;">30</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">31</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Prepare()<br /></span><span style="color: #008080;">32</span><span style="color: #000000;"><img id="Codehighlighter1_1220_1257_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1220_1257_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1220_1257_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1220_1257_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1220_1257_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1220_1257_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1220_1257_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1220_1257_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1220_1257_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1220_1257_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">33</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoExecute(</span><span style="color: #800080;">1</span><span style="color: #000000;">);<br /></span><span style="color: #008080;">34</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">35</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">36</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Execute()<br /></span><span style="color: #008080;">37</span><span style="color: #000000;"><img id="Codehighlighter1_1297_1353_Open_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1297_1353_Open_Text').style.display='none'; document.getElementById('Codehighlighter1_1297_1353_Closed_Image').style.display='inline'; document.getElementById('Codehighlighter1_1297_1353_Closed_Text').style.display='inline';" align="top"><img id="Codehighlighter1_1297_1353_Closed_Image" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" style="display: none;" onclick="this.style.display='none'; document.getElementById('Codehighlighter1_1297_1353_Closed_Text').style.display='none'; document.getElementById('Codehighlighter1_1297_1353_Open_Image').style.display='inline'; document.getElementById('Codehighlighter1_1297_1353_Open_Text').style.display='inline';" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_1297_1353_Closed_Text" style="border: 1px solid #808080; background-color: #ffffff; display: none;"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1297_1353_Open_Text"><span style="color: #000000;">{<br /></span><span style="color: #008080;">38</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DoExecute(Constants.RepeatTime);<br /></span><span style="color: #008080;">39</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">40</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br /></span><span style="color: #008080;">41</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">#endregion</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">42</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br /></span><span style="color: #008080;">43</span><span style="color: #000000;"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></span></div><p><br /></p><h3>测试结果分析</h3> <ol> <li>在不使用CompiledQuery的情况下，LinqToSql的性能比AdoNet差一个数量级，用百分比的话就是慢超过1000%；</li> <li>在缓存Command的情况下，AdoNet的查询性能可以提高约30%；</li> <li>在使用CompiledQuery的情况下，LinqToSql的查询性能比缓存Command的AdoNet下慢50%；</li> <li>NIntegrqateQuery的查询性能和不带缓存的AdoNet查询性能相当，比LinqToSqlCompiledQuery快约40%;</li></ol> <p>* 如对测试结果有任何异议，欢迎根跟贴友好讨论。</p> <p><strong>什么是NIntegrateQuery？</strong> </p><ol> <li>NIntegrateQuery是Teddy最新开发的开源组件<a href="http://nintegrate.com/"><span style="color: #0000ff;">NIntegrate</span></a>的一部分。</li> <li>NIntegrate是一个企业级系统集成开发框架。它的核心设计思想是，提供一个基于数据库集中化管理WCF服务配置信息和应用程序配置信息的方案，从而使得基于WCF的企业级SOA系统集成真正成为可能。</li> <li>NIntegrateQuery是一个类似Linq的强类型数据库查询语言。它的设计目标并不是ORM，也当然不是重新发明一个类似LinqToSql的轮子。它的设计目标是一个安全（完全防范SQL注入攻击）、高性能（参见测试结果），所有查询对象可以跨WCF、跨COM传递，并且支持动态查询条件、分页、排序的数据库查询语言。因为这个设计目标，它目前不支持，作为NIntegrate的一个组件，将来也没有计划支持类似LinqToSql提供的join、group by这样的查询。如果您要做这样的查询，标准的做法是先建一个View，再对View进行查询。</li> <li>对于比较频繁的查询操作，虽然NIntegrateQuery本身的查询性能是非常好的，但是，如果可能，还是建议尽可能使用存储过程。</li> <li>对于所有的写操作，虽然NIntegrateQuery提供了一个基于DataAdapter.Update的简单实现，但是，出于性能考虑，原则上，建议使用存储过程，当然，您也可以选择同时使用包括LinqToSql在内的任意其他ORM组件。</li></ol>  <p><strong>NIntegrateQuery支持的其它功能还包括：</strong></p> <ol> <li>混合支持多数据库、不同类型数据库的查询（正式版本将至少支持：SQL Server, Oracle, DB2和MySql）。</li> <li>对不同的数据库，支持可扩展的，甚至是仅特定数据库支持的方法或语法。</li> <li>NIntegrate中包括了基于NIntegrateQuery的通用WCF查询服务的定义和默认实现，以及基于NIntegrateQuery和通用WCF查询服务的ASP.NET DataSource控件，方便进行数据绑定。</li></ol>  <h3>后记</h3> <p>这篇文章写完第一遍发布之前点预览时Firefox崩溃了，结果所有内容在Live Writer里老老实实重写了一遍，我哭~~~。为了避免同样的悲剧，我强烈建议您，千万不要在没有在其他地方备份前，在Firefox里点击FreeTextBox这个Rich Editor的&#8220;Preview&#8221;按钮。我是32bit Window Server 2008 + Firefox 3.0。切忌、切忌~~</p><p>&nbsp;</p><p><em>//我是结尾符</em></p><p>&nbsp;</p><img src="http://www.cnblogs.com/teddyma/aggbug/1497903.html?type=1" width="1" height="1" alt=""/><p>评论: 13　<a href="http://www.cnblogs.com/teddyma/archive/2009/06/07/1497903.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/teddyma/archive/2009/06/07/1497903.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59194/" target="_blank">网游3大美女高管仅剩刘伟</a><span style="color:gray">(2010-03-19 23:59)</span><br/>· <a href="http://news.cnblogs.com/n/59193/" target="_blank">查理&#183;米勒宣称将一口气公布20个Mac OS X漏洞</a><span style="color:gray">(2010-03-19 23:55)</span><br/>· <a href="http://news.cnblogs.com/n/59192/" target="_blank">Google投资的海底光缆建设完毕</a><span style="color:gray">(2010-03-19 23:53)</span><br/>· <a href="http://news.cnblogs.com/n/59191/" target="_blank">微软2009年所获专利达苹果10倍</a><span style="color:gray">(2010-03-19 23:50)</span><br/>· <a href="http://news.cnblogs.com/n/59190/" target="_blank">门户网站竞相掀起微博圈地运动</a><span style="color:gray">(2010-03-19 22:26)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>