<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_MaoBisheng</title><subtitle type="text">Asp.Net(C#) &amp; SQL &amp; Oracle</subtitle><id>http://feed.cnblogs.com/blog/u/40684/rss</id><updated>2011-12-24T13:18:53Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/40684/rss"/><entry><id>http://www.cnblogs.com/MaoBisheng/archive/2011/12/24/2300646.html</id><title type="text">new与override区别</title><summary type="text">new和override的区别：1.new声明的方法，当使用子类的类型来调用的时候，它会运行子类中的函数，当类型是基类的话 ，则使用基类的函数来执行，可以简单的记忆：override--覆盖（父类的没了，始终是儿子），new--新的（父子共存）PS:只有使用virtual定义基类中的函数，并使用override标记子类的函数，才可以达到多态类----始终调用子类的方法2.子类中override父类的方法，父类的方法一定要是virtual，而在子类中new父类的方法，父类的方法不一定要是virtual3.抽象类中的抽象方法，必须要被子类override，不能new4.override可以与sealed关键词连用： sealed override void F()，而new不行。被sealed修饰过的方法，不能再被子类重写</summary><published>2011-12-24T12:34:00Z</published><updated>2011-12-24T12:34:00Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaoBisheng/archive/2011/12/24/2300646.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/archive/2011/12/24/2300646.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;先看override的情况：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; A&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; A()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span style="color: #006080;"&gt;'A'&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Fun()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span style="color: #006080;"&gt;"A.Fun()"&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; B : A&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; B()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span style="color: #006080;"&gt;'B'&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Fun()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span style="color: #006080;"&gt;"B.Fun()"&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;声明B类型的对象：&lt;/p&gt;&#xD;
&lt;p&gt;B test = new B();&lt;br /&gt;test.Fun();&lt;/p&gt;&#xD;
&lt;p&gt;输出结果是：&lt;/p&gt;&#xD;
&lt;p&gt;A&lt;br /&gt;B&lt;br /&gt;B.Fun()&lt;/p&gt;&#xD;
&lt;p&gt;该结果中，先输出A，在输出B，说明初始化的时候，先执行基类，再执行化子类的构造函数&lt;/p&gt;&#xD;
&lt;p&gt;声明A类型的对象：&lt;/p&gt;&#xD;
&lt;p&gt;A test = new B();&lt;br /&gt;test.Fun();&lt;/p&gt;&#xD;
&lt;p&gt;运行结果：&lt;/p&gt;&#xD;
&lt;p&gt;A&lt;br /&gt;B&lt;br /&gt;B.Fun()&lt;/p&gt;&#xD;
&lt;p&gt;说明无论是父类型还是子类型的对象 ，当使用override时，父类的虚函数完全被子类的函数给&amp;ldquo;覆盖&amp;rdquo;了。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000;"&gt;再来看new的情况：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; A&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; A()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span style="color: #006080;"&gt;'A'&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Fun()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span style="color: #006080;"&gt;"A.Fun()"&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; B : A&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; B()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span style="color: #006080;"&gt;'B'&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Fun()&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(&lt;span style="color: #006080;"&gt;"B.Fun()"&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;声明B类型的对象：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;B test = new B();&lt;br /&gt;test.Fun();&lt;/p&gt;&#xD;
&lt;p&gt;输出结果是：&lt;/p&gt;&#xD;
&lt;p&gt;A&lt;br /&gt;B&lt;br /&gt;B.Fun() ----此时与override的效果相同&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;声明A类型的对象：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;A test = new B();&lt;br /&gt;test.Fun();&lt;/p&gt;&#xD;
&lt;p&gt;运行结果：&lt;/p&gt;&#xD;
&lt;p&gt;A&lt;br /&gt;B&lt;br /&gt;A.Fun() ----此时，与override的情况不一样了。。。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;结论：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1.new声明的方法，当使用子类的类型来调用的时候，它会运行子类中的函数，当类型是基类的话 ，则使用基类的函数来执行，可以简单的记忆：&lt;/p&gt;&#xD;
&lt;p&gt;override--覆盖（父类的没了，始终是儿子），new--新的（父子共存）&lt;/p&gt;&#xD;
&lt;p&gt;PS:只有使用virtual定义基类中的函数，并使用override标记子类的函数，才可以达到多态类----始终调用子类的方法&lt;/p&gt;&#xD;
&lt;p&gt;2.子类中override父类的方法，父类的方法一定要是virtual，而在子类中new父类的方法，父类的方法不一定要是virtual&lt;/p&gt;&#xD;
&lt;p&gt;3.抽象类中的抽象方法，必须要被子类override，不能new&lt;/p&gt;&#xD;
&lt;p&gt;4.override可以与sealed关键词连用： sealed override void F()，而new不行。被sealed修饰过的方法，不能再被子类重写&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;再来一道复杂点的网上看到的面试题：&lt;/p&gt;&#xD;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; A&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Fun1(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(i);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Fun2(A a)&lt;br /&gt;    {&lt;br /&gt;        a.Fun1(1);&lt;br /&gt;        Fun1(5);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; B : A&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Fun1(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i)&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.Fun1(i + 1);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;B b = new B();&lt;br /&gt;A a = new A();&lt;br /&gt;a.Fun2(b);&lt;br /&gt;b.Fun2(a);&lt;/p&gt;&#xD;
&lt;p&gt;运行上面语句，执行结果是什么？&lt;/p&gt;&#xD;
&lt;p&gt;先分析a.Fun2(b)：传入的参数是B类型的，因此a.Fun1(1)执行的是B类型对象的Fun1方法，运行结果是2&lt;/p&gt;&#xD;
&lt;p&gt;然后执行Fun1(5)，由于运行的是A类型对象的Fun2方法，Fun1自然就是A中的Fun1，运行结果是5&lt;/p&gt;&#xD;
&lt;p&gt;再分析b.Fun2(a)：传入的参数是A类型的，因此a.Fun1(1)执行的是A类型对象的Fun1方法，运行结果是1&lt;/p&gt;&#xD;
&lt;p&gt;然后运行Fun1(5)，由于运行的是B类型对象的Fun2方法，此时的Fun1已经被B覆盖掉了，因此执行的是被覆盖后的方法，运行结果是6&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;那么如果把B类中的override改成new，情况会是什么样呢？&lt;/p&gt;&#xD;
&lt;p&gt;由于public void Fun2(A a)的参数类型始终是A类型（当传入B类型时，会转成A类型，相当于A a =&amp;nbsp; new B()的效果），而用new不会覆盖父类的方法，因此结果是：&lt;/p&gt;&#xD;
&lt;p&gt;1&lt;/p&gt;&#xD;
&lt;p&gt;5&lt;/p&gt;&#xD;
&lt;p&gt;1&lt;/p&gt;&#xD;
&lt;p&gt;5&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaoBisheng/aggbug/2300646.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaoBisheng/archive/2011/12/24/2300646.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaoBisheng/archive/2011/08/11/2134998.html</id><title type="text">水晶报表错误：bobj is not defined</title><summary type="text">水晶报表错误：bobj is not defined1.拷贝C:\inetpub\wwwroot\aspnet_client\system_web\4_0_30319\crystalreportviewers13 (先安装CRforVS_redist_install_32bit_13_0.exe) 到你的项目文件夹下(ProjectName/crystalreportviewers13)2.配置WebConfig&amp;lt;configSections&amp;gt; &amp;lt;sectionGroup name=&amp;quot;businessObjects&amp;quot;&amp;gt; &amp;lt;sectionGrou</summary><published>2011-08-11T06:55:00Z</published><updated>2011-08-11T06:55:00Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/11/2134998.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/11/2134998.html"/><content type="html">&lt;p&gt;水晶报表错误：bobj is not defined&lt;/p&gt;&#xD;
&lt;p&gt;1.拷贝C:\inetpub\wwwroot\aspnet_client\system_web\4_0_30319\crystalreportviewers13 (先安装CRforVS_redist_install_32bit_13_0.exe) 到你的项目文件夹下(ProjectName/crystalreportviewers13)&lt;/p&gt;&#xD;
&lt;p&gt;2.配置WebConfig&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;sectionGroup &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="businessObjects"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;sectionGroup &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="crystalReports"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;section &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="rptBuildProvider"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="CrystalDecisions.Shared.RptBuildProviderHandler, CrystalDecisions.Shared, Version=13.0.2000.0,Culture=neutral, PublicKeyToken=692fbea5521e1304, Custom=null"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;section &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="crystalReportViewer"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="System.Configuration.NameValueSectionHandler"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;sectionGroup&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;sectionGroup&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;businessObjects&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;crystalReports&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;rptBuildProvider&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;add &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;embedRptInResource&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="true"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;rptBuildProvider&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;crystalReportViewer&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;add &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;key&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="ResourceUri"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; value&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="/crystalreportviewers13"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;crystalReportViewer&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;crystalReports&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;businessObjects&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/MaoBisheng/aggbug/2134998.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/11/2134998.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaoBisheng/archive/2011/08/10/2133741.html</id><title type="text">SQL生成唯一ID号解决方案</title><summary type="text">新建存自增ID的表：CREATE TABLE [dbo].[IdentityID]( [TableName] [varchar](500) NOT NULL, [NextID] [bigint] NOT NULL, CONSTRAINT [PK_IdentityID] PRIMARY KEY CLUSTERED ( [TableName] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [P</summary><published>2011-08-10T07:36:00Z</published><updated>2011-08-10T07:36:00Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/10/2133741.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/10/2133741.html"/><content type="html">&lt;p&gt;新建存自增ID的表：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;IdentityID&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;TableName&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;varchar&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;500&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;NextID&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;bigint&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;NOT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NULL&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;PK_IdentityID&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;KEY&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CLUSTERED&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;(&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;TableName&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ASC&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WITH&lt;/span&gt;&lt;span style="color: #000000;"&gt; (PAD_INDEX  &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;OFF&lt;/span&gt;&lt;span style="color: #000000;"&gt;, STATISTICS_NORECOMPUTE  &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;OFF&lt;/span&gt;&lt;span style="color: #000000;"&gt;, IGNORE_DUP_KEY &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;OFF&lt;/span&gt;&lt;span style="color: #000000;"&gt;, ALLOW_ROW_LOCKS  &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;span style="color: #000000;"&gt;, ALLOW_PAGE_LOCKS  &lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;PRIMARY&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;写一个存储获取当前表的ID:&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;PROCEDURE&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;dbo&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;SP_GetIdentityID&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;@TableName&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;500&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt;&lt;span style="color: #000000;"&gt; NOCOUNT &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@IdentityID&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;bigint&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@IdentityID&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;tran&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;update&lt;/span&gt;&lt;span style="color: #000000;"&gt; IdentityID&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@IdentityID&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;NextID,NextID&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;NextID&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt;&lt;span style="color: #000000;"&gt; TableName&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TableName&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000; font-weight: bold;"&gt;@@rowcount&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;            &lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;into&lt;/span&gt;&lt;span style="color: #000000;"&gt; IdentityID(TableName,NextID)&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;values&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;@TableName&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #008000;"&gt;@IdentityID&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #800000; font-weight: bold;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;commit&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;tran&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;@IdentityID&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/MaoBisheng/aggbug/2133741.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/10/2133741.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaoBisheng/archive/2011/08/10/2133479.html</id><title type="text">水晶报表文本框内文字过长溢出问题</title><summary type="text">水晶报表文本框内文字过长溢出问题:先看效果：仔细琢磨了下，看到文本框有个“can grow”属性：看字面意思是可以增长的意思，于是就勾上了，文本框是增长了，可是这个横线（为了好看，一般会在“Details”的底部画一条横线）不对，看效果：解决办法很简单，把横线放到“Details”的顶部，问题又来了，最后的横线没有了，看效果：那么还需要再到最后加上一条横线，自然是放到“Details”部分中，需要设置个属性“Move to Buttom of Section when Pringting”：再来看下效果：还需要细微调整下，竖线没有接触到底部，需要对竖线设置个属性：完美了，成功解决了文字过长溢出</summary><published>2011-08-10T03:35:00Z</published><updated>2011-08-10T03:35:00Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/10/2133479.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/10/2133479.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;水晶报表文本框内文字过长溢出问题:&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;先看效果：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135067960.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="cr_cangrow_01" alt="cr_cangrow_01" src="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135068210.jpg" border="0" height="277" width="1042" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;仔细琢磨了下，看到文本框有个&amp;ldquo;can grow&amp;rdquo;属性：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135075669.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="cr_cangrow_02" alt="cr_cangrow_02" src="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135076192.jpg" border="0" height="558" width="455" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;看字面意思是可以增长的意思，于是就勾上了，文本框是增长了，可是这个横线（为了好看，一般会在&amp;ldquo;Details&amp;rdquo;的底部画一条横线）不对，看效果：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135075287.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="cr_cangrow_03" alt="cr_cangrow_03" src="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135077762.jpg" border="0" height="262" width="1048" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;解决办法很简单，把横线放到&amp;ldquo;Details&amp;rdquo;的顶部，问题又来了，最后的横线没有了，看效果：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135087729.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="cr_cangrow_04" alt="cr_cangrow_04" src="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135082156.jpg" border="0" height="301" width="1051" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;那么还需要再到最后加上一条横线，自然是放到&amp;ldquo;Details&amp;rdquo;部分中，需要设置个属性&amp;ldquo;Move to Buttom of Section when Pringting&amp;rdquo;：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135092962.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="cr_canfrow_05" alt="cr_canfrow_05" src="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135094009.jpg" border="0" height="419" width="378" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;再来看下效果：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135094532.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="cr_cangrow_06" alt="cr_cangrow_06" src="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/2011081011351039.jpg" border="0" height="200" width="1080" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;还需要细微调整下，竖线没有接触到底部，需要对竖线设置个属性：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135101958.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="cr_cangrow_07" alt="cr_cangrow_07" src="http://images.cnblogs.com/cnblogs_com/MaoBisheng/201108/201108101135107465.jpg" border="0" height="432" width="436" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: small;" size="3"&gt;完美了，成功解决了文字过长溢出问题，让水晶报表根据文字长度自动调整。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaoBisheng/aggbug/2133479.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/10/2133479.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaoBisheng/archive/2011/08/02/2124576.html</id><title type="text">水晶报表导出中文字符乱码</title><summary type="text">水晶报表中文字符导出为PDF中文字符乱码，解决办法：中文显示的字段或者参数，采用中文字体，比如“宋体”即可解决</summary><published>2011-08-02T01:47:00Z</published><updated>2011-08-02T01:47:00Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/02/2124576.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/02/2124576.html"/><content type="html">&lt;p&gt;在ASP.Net开发的页面上嵌入的水晶报表，中文字符和英文字符均能正确显示&lt;/p&gt;&#xD;
&lt;p&gt;但是导出为PDF后发现中文字符乱码了&lt;/p&gt;&#xD;
&lt;p&gt;所有的字体都是&amp;ldquo;Arial&amp;rdquo;&lt;/p&gt;&#xD;
&lt;p&gt;解决办法：&lt;/p&gt;&#xD;
&lt;p&gt;针对中文显示的字段或者参数，采用中文字体，比如&amp;ldquo;宋体&amp;rdquo;即可解决&lt;/p&gt;&#xD;
&lt;p&gt;为了好看并且兼容，索性将所有的字体都改为&amp;ldquo;宋体&amp;rdquo;，否则部分为&amp;ldquo;宋体&amp;rdquo;，部分为别的字体，不大协调&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaoBisheng/aggbug/2124576.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaoBisheng/archive/2011/08/02/2124576.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaoBisheng/archive/2011/07/21/2112913.html</id><title type="text">利用水晶报表实现Web打印</title><summary type="text">由于B/S系统是采用浏览器作为用户界面与服务器进行交互的，我们的应用程序是部署在服务器端，而打印机则在客户端，服务器端不能精确的控制客户端的打印机，使得B/S系统中的打印功能不像C/S系统中那么方便</summary><published>2011-07-21T07:44:00Z</published><updated>2011-07-21T07:44:00Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaoBisheng/archive/2011/07/21/2112913.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/archive/2011/07/21/2112913.html"/><content type="html">&lt;p&gt;由于B/S系统是采用浏览器作为用户界面与服务器进行交互的，我们的应用程序是部署在服务器端，而打印机则在客户端，服务器端不能精确的控制客户端的打印机，使得B/S系统中的打印功能不像C/S系统中那么方便。&lt;/p&gt;&#xD;
&lt;p&gt;目前常见的几种Web打印方法(&lt;a title="http://www.cnblogs.com/chenqingwei/archive/2009/10/09/1579467.html" href="http://www.cnblogs.com/chenqingwei/archive/2009/10/09/1579467.html"&gt;http://www.cnblogs.com/chenqingwei/archive/2009/10/09/1579467.html&lt;/a&gt;)：&lt;/p&gt;&#xD;
&lt;p&gt;1.利用IE浏览器直接打印&lt;/p&gt;&#xD;
&lt;p&gt;&amp;mdash;&amp;mdash;缺点：对于复杂的报表难以实现，且页面上哪些东西需要显示哪些需要隐藏，需要花费大量时间去分析&lt;/p&gt;&#xD;
&lt;p&gt;2.调用Office实现Web打印&lt;/p&gt;&#xD;
&lt;p&gt;&amp;mdash;&amp;mdash;缺点：客户端必须要安装Office，导出数据前无预览功能&lt;/p&gt;&#xD;
&lt;p&gt;3.利用第三方控件实现打印&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;4.利用水晶报表实现打印&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;本人最近利用水晶报表实现了一个ERP系统中的单据打印功能，折腾了很久，在此做个记录：&lt;/p&gt;&#xD;
&lt;p&gt;最初为了图方便，页面上不用水晶报表控件，想直接使用PrintToPrinter通过一个打印按钮把东西给打印出来，结果本机用的好好的，部署到服务器上的时候，发现找不到客户端的打印机，代码如下：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; btnPrintDoc_Click(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    ReportDocument reportDoc &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; GenerateDocReport();&lt;br /&gt;    reportDoc.PrintToPrinter(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这种方法即便是可以，也有一些缺陷，比如预览功能没有，选择打印设置也没有。&lt;/p&gt;&#xD;
&lt;p&gt;直接打印不行，那么跳转到新页面，把参数传过去，在新页面上放个水晶报表控件，只显示导出和打印按钮：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;object &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;classid&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="CLSID:BAEE131D-290A-4541-A50A-8936F159563A"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; codebase&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="http://127.0.0.1/rpt/PrintControl.cab"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;        version&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="10,2,0,1078"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; viewastext style&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="display: none"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;object&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;form &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;id&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="form1"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; runat&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="server"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;CR:CrystalReportViewer &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="DocumentReportView"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; runat&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="server"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; PrintMode&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Pdf"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;            AutoDataBind&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="true"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HasCrystalLogo&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="False"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HasDrilldownTabs&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="False"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HasDrillUpButton&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="False"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;            HasExportButton&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="True"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HasGotoPageButton&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="False"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HasPageNavigationButtons&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="False"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;            HasRefreshButton&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="False"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HasSearchButton&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="False"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HasToggleGroupTreeButton&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="false"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;            HasToggleParameterPanelButton&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="False"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; HasZoomFactorList&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="False"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Height&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="50px"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;&lt;br /&gt;            ToolPanelView&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="None"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; ToolPanelWidth&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="200px"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; Width&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="350px"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;div&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;form&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;body&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span &gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span &gt;PrintMode设置成&lt;/span&gt;&lt;span &gt;"ActiveX"&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;需要在WebConfig中做一些配置，在&lt;span &gt;configuration节点下&lt;/span&gt;：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;sectionGroup &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="businessObjects"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;sectionGroup &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="crystalReports"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;section &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="printControl"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="System.Configuration.NameValueSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;sectionGroup&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;sectionGroup&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;configSections&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;businessObjects&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;crystalReports&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;printControl&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;add &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;key&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="url"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; value&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="http://127.0.0.1/rpt/PrintControl.cab"&lt;/span&gt;&lt;span style="color: #ff0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;printControl&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;crystalReports&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;businessObjects&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;PrintControl.cab可以从官网下载，我只找到一个比较老的版本，链接地址：&lt;a href="http://support.businessobjects.com/CRforVS2005/PrintControl.cab"&gt;http://support.businessobjects.com/CRforVS2005/PrintControl.cab&lt;/a&gt;，VS2010也可以用&lt;/p&gt;&#xD;
&lt;p&gt;下载下来后，放到自己建立的一个文件夹下，发布到服务器上即可。&lt;/p&gt;&#xD;
&lt;p&gt;客户端第一个打开时，会提示安装一个ActiveX插件&lt;/p&gt;&#xD;
&lt;p&gt;我们要做的只是把报表生成即可，打印，导出功能，水晶报表都帮我们做好了，还是挺方便的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;缺点：&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;非IE内核的浏览器貌似不可以，不会提示让你安装ActiveX插件(我试了firefox4和Chrome，其他的没有试)。&lt;/p&gt;&#xD;
&lt;p&gt;既然浏览器不兼容，那么给点提示吧，免得用户点了木有反应：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;script &lt;/span&gt;&lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="text/javascript"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;&lt;br /&gt;        $(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;#IconImg_DocumentReportView_toptoolbar_print&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;'&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;).click(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #0000ff;"&gt;function&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; () {&lt;br /&gt;            &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; (&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;!&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;$.browser.msie) {&lt;br /&gt;                alert(&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;很抱歉，该打印功能目前只支持IE内核的浏览器！&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;);&lt;br /&gt;                &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt; &lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="background-color: #f5f5f5; color: #000000;"&gt;;&lt;br /&gt;            }&lt;br /&gt;        });&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&lt;img src="http://www.cnblogs.com/MaoBisheng/aggbug/2112913.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaoBisheng/archive/2011/07/21/2112913.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaoBisheng/archive/2011/06/07/2074464.html</id><title type="text">VS2010 Add Web Reference与Add Service Reference区别</title><summary type="text">VS2010 Add Web Reference与Add Service Reference区别： Web Reference 是 2.0 内容，由 wsdl.exe 包装，Service Reference 是 3.0+ 内容，由 svcutile.exe 包装。保留 Add Web Reference是为了版本向前兼容。 Add Web Reference：生成的代理可以被2.0或者更早的版本...</summary><published>2011-06-07T08:57:00Z</published><updated>2011-06-07T08:57:00Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaoBisheng/archive/2011/06/07/2074464.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/archive/2011/06/07/2074464.html"/><content type="html">&lt;p&gt;VS2010 Add Web Reference与Add Service Reference区别：&lt;/p&gt; &lt;p&gt;&lt;br&gt;Web Reference 是 2.0 内容，由 wsdl.exe 包装，&lt;br&gt;Service Reference 是 3.0+ 内容，由 svcutile.exe 包装。保留 Add Web Reference是为了版本向前兼容。&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Add Web Reference：生成的代理可以被2.0或者更早的版本调用&lt;br&gt;Add Service Reference：只能被3.0+的版本调用，它不仅生成代理类，还会在web.config或app.config中增加一些配置&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Add Web Reference在Web Application项目下会默认显示，在Class Library、控制台、Windows Form等项目下是不显示的，可以通过Add Service Reference的高级选项里，选择添加Add Web Reference。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/MaoBisheng/aggbug/2074464.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaoBisheng/archive/2011/06/07/2074464.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaoBisheng/archive/2011/06/01/2065393.html</id><title type="text">VS2010 Debugger --The source file is different from when the module was built</title><summary type="text">Error message: The source file is different from when the module was built. Would you like the debugger to user it anyway? When choose Yes, the breakpoint will be hit, detail information is: &amp;quot;The brea...</summary><published>2011-06-01T01:26:00Z</published><updated>2011-06-01T01:26:00Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaoBisheng/archive/2011/06/01/2065393.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/archive/2011/06/01/2065393.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;Error message:&lt;/font&gt;&lt;/strong&gt; &lt;p&gt;The source file is different from when the module was built. Would you like the debugger to user it anyway? &lt;p&gt;&lt;p&gt;When choose Yes, the breakpoint will be hit, detail information is: &lt;p&gt;&lt;p&gt;"The breakpoint will not currently be hit. The source code is different from the original version." &lt;p&gt;right-click on the breakpoint in question, and you should see a Location item. On the resulting dialog you should see an override checkbox which will get rid of the message you're seeing when you hover over your breakpoints. Or you could go to Tools-&amp;gt;Options-&amp;gt;Debugging-&amp;gt;General and uncheck the "Require source to exactly match..." option, which will turn off all checksum functionality in the debugger. &lt;p&gt;&lt;p&gt;&lt;strong&gt;&lt;font size="4"&gt;Solution:&lt;/font&gt;&lt;/strong&gt; &lt;p&gt;Build-&amp;gt;Configuration Manager &lt;p&gt;Check whether all project allows to build when the Configuration is Debug. &lt;img src="http://www.cnblogs.com/MaoBisheng/aggbug/2065393.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaoBisheng/archive/2011/06/01/2065393.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaoBisheng/archive/2011/05/30/2063508.html</id><title type="text">利用反射实现WSDL实体与自定义实体之间的转换</title><summary type="text">场景：WebService中的传入/传出参数是一个字段非常多的一个对象，我们往往是在业务逻辑层来引用WebService，而值是从页面层传入的，因此需要自己定义一个实体，来实现页面层往业务逻辑层之间的传值。如果两个实体之间字段非常多的话，可以利用反射来实现两个实体之间的转换。</summary><published>2011-05-30T09:54:00Z</published><updated>2011-05-30T09:54:00Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaoBisheng/archive/2011/05/30/2063508.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/archive/2011/05/30/2063508.html"/><content type="html">&lt;p&gt;场景：&lt;/p&gt; &lt;p&gt;WebService中的传入/传出参数是一个字段非常多的一个对象，我们往往是在业务逻辑层来引用WebService，而值是从页面层传入的，因此需要自己定义一个实体，来实现页面层往业务逻辑层之间的传值。&lt;/p&gt; &lt;p&gt;如果两个实体之间字段非常多的话，可以利用反射来实现两个实体之间的转换。&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;首先，我们自定义一个Attribute，用于表示实体中某个属性，在WSDL中的名称（WSDL中的属性名称与自定义的不一定一致，比如用Java开发的WebService，在C#中调用，属性的编码规范不一样）：&lt;/p&gt; &lt;div &gt;&lt;pre &gt;[AttributeUsage(AttributeTargets.All, AllowMultiple=&lt;span &gt;true&lt;/span&gt;)]&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;class&lt;/span&gt; WSDLFieldNameAttribute : Attribute&lt;/pre&gt;&lt;pre &gt;{      &lt;/pre&gt;&lt;pre&gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;string&lt;/span&gt; FieldName&lt;/pre&gt;&lt;pre &gt;{&lt;/pre&gt;&lt;pre&gt;get;&lt;/pre&gt;&lt;pre &gt;set;&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;pre &gt;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;public&lt;/span&gt; Type FieldType&lt;/pre&gt;&lt;pre &gt;{&lt;/pre&gt;&lt;pre&gt;get;&lt;/pre&gt;&lt;pre &gt;set;&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;pre &gt;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;public&lt;/span&gt; WSDLFieldNameAttribute(&lt;span &gt;string&lt;/span&gt; Field)&lt;/pre&gt;&lt;pre &gt;{&lt;/pre&gt;&lt;pre&gt;FieldName = Field;&lt;/pre&gt;&lt;pre &gt;FieldType = &lt;span &gt;typeof&lt;/span&gt;(&lt;span &gt;string&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;public&lt;/span&gt; WSDLFieldNameAttribute(&lt;span &gt;string&lt;/span&gt; Field, Type type)&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre &gt;FieldName = Field;&lt;/pre&gt;&lt;pre&gt;FieldType = type;&lt;/pre&gt;&lt;pre &gt;}&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;使用方法：&lt;/p&gt;&lt;pre &gt;[WSDLFieldNameAttribute(&lt;span &gt;"fromDate"&lt;/span&gt;)]&#xD;
[Description(&lt;span &gt;"开始日期，格式“yyyyMMdd”"&lt;/span&gt;)]&#xD;
&lt;span &gt;public&lt;/span&gt; &lt;span &gt;string&lt;/span&gt; FromDate&#xD;
{&#xD;
    get;&#xD;
    set;&#xD;
}&lt;/pre&gt;&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;转换类：&lt;/p&gt;&lt;pre &gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;static&lt;/span&gt; &lt;span &gt;class&lt;/span&gt; WSDLFieldMappingUtil&#xD;
{&#xD;
    &lt;span &gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&#xD;
    &lt;span &gt;/// fill wsdl entity from entity&lt;/span&gt;&#xD;
    &lt;span &gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&#xD;
    &lt;span &gt;/// &amp;lt;param name="wsdlObject"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&#xD;
    &lt;span &gt;/// &amp;lt;param name="entity"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&#xD;
    &lt;span &gt;public&lt;/span&gt; &lt;span &gt;static&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; FillInWSDLEntity(&lt;span &gt;object&lt;/span&gt; wsdlObject, &lt;span &gt;object&lt;/span&gt; entity)&#xD;
    {&#xD;
        Type wsdlType = wsdlObject.GetType();&#xD;
        Type entityType = entity.GetType();&#xD;
&#xD;
        PropertyInfo wsdlProperty;&#xD;
        PropertyInfo[] pi = entityType.GetProperties();&#xD;
&#xD;
        &lt;span &gt;foreach&lt;/span&gt; (PropertyInfo entityProperty &lt;span &gt;in&lt;/span&gt; pi)&#xD;
        {&#xD;
            WSDLFieldNameAttribute[] myAttribute = (WSDLFieldNameAttribute[])entityProperty.GetCustomAttributes(&lt;span &gt;typeof&lt;/span&gt;(WSDLFieldNameAttribute), &lt;span &gt;false&lt;/span&gt;);&#xD;
            &lt;span &gt;if&lt;/span&gt; (myAttribute.Length == 0)&#xD;
            {&#xD;
                &lt;span &gt;continue&lt;/span&gt;;&#xD;
            }&#xD;
&#xD;
            &lt;span &gt;if&lt;/span&gt; (entityProperty.PropertyType.IsEnum)&#xD;
            {&#xD;
                &lt;span &gt;if&lt;/span&gt; (myAttribute.Length == 1 &amp;amp;&amp;amp; myAttribute[0].FieldType == &lt;span &gt;typeof&lt;/span&gt;(&lt;span &gt;string&lt;/span&gt;))&#xD;
                {&#xD;
                    wsdlProperty = wsdlType.GetProperty(myAttribute[0].FieldName);&#xD;
                    &lt;span &gt;if&lt;/span&gt; (wsdlProperty == &lt;span &gt;null&lt;/span&gt;)&#xD;
                        &lt;span &gt;continue&lt;/span&gt;;&#xD;
&#xD;
                    var &lt;span &gt;value&lt;/span&gt; = entityProperty.GetValue(entity, &lt;span &gt;null&lt;/span&gt;);&#xD;
                    &lt;span &gt;if&lt;/span&gt; (&lt;span &gt;value&lt;/span&gt; != &lt;span &gt;null&lt;/span&gt;)&#xD;
                    {&#xD;
                        wsdlProperty.SetValue(wsdlObject, EnumAttributeHelper.GetSqlByEnum(&lt;span &gt;value&lt;/span&gt;), &lt;span &gt;null&lt;/span&gt;);&#xD;
                    }&#xD;
                }&#xD;
                &lt;span &gt;else&lt;/span&gt;&#xD;
                {&#xD;
                    &lt;span &gt;throw&lt;/span&gt; &lt;span &gt;new&lt;/span&gt; Exception(&lt;span &gt;string&lt;/span&gt;.Empty);&#xD;
                }&#xD;
            }&#xD;
            &lt;span &gt;else&lt;/span&gt;&#xD;
            {&#xD;
                wsdlProperty = wsdlType.GetProperty(myAttribute[0].FieldName);&#xD;
                &lt;span &gt;if&lt;/span&gt; (wsdlProperty == &lt;span &gt;null&lt;/span&gt;)&#xD;
                    &lt;span &gt;continue&lt;/span&gt;;&#xD;
&#xD;
                var &lt;span &gt;value&lt;/span&gt; = entityType.GetProperty(entityProperty.Name).GetValue(entity, &lt;span &gt;null&lt;/span&gt;);&#xD;
                &lt;span &gt;if&lt;/span&gt; (&lt;span &gt;value&lt;/span&gt; != &lt;span &gt;null&lt;/span&gt;)&#xD;
                {&#xD;
                    &lt;span &gt;if&lt;/span&gt; (wsdlProperty.PropertyType != entityProperty.PropertyType)&#xD;
                    {&#xD;
                        &lt;span &gt;if&lt;/span&gt; (wsdlProperty.PropertyType.IsEnum)&#xD;
                        {&#xD;
                            &lt;span &gt;value&lt;/span&gt; = Enum.Parse(wsdlProperty.PropertyType, &lt;span &gt;value&lt;/span&gt;.ToString());&#xD;
                        }&#xD;
                        &lt;span &gt;else&lt;/span&gt; &lt;span &gt;if&lt;/span&gt; (entityProperty.PropertyType == &lt;span &gt;typeof&lt;/span&gt;(DateTime))&#xD;
                        {&#xD;
                            &lt;span &gt;value&lt;/span&gt; = ((DateTime)&lt;span &gt;value&lt;/span&gt;).ToString(&lt;span &gt;"yyyyMMdd"&lt;/span&gt;);&#xD;
                        }&#xD;
                        &lt;span &gt;else&lt;/span&gt;&#xD;
                        {&#xD;
                            &lt;span &gt;value&lt;/span&gt; = Convert.ChangeType(&lt;span &gt;value&lt;/span&gt;, wsdlProperty.PropertyType);&#xD;
                        }&#xD;
                    }&#xD;
&#xD;
                    wsdlProperty.SetValue(wsdlObject, &lt;span &gt;value&lt;/span&gt;, &lt;span &gt;null&lt;/span&gt;);&#xD;
                }&#xD;
                &lt;span &gt;else&lt;/span&gt;&#xD;
                {&#xD;
                    &lt;span &gt;if&lt;/span&gt; (wsdlProperty.PropertyType == &lt;span &gt;typeof&lt;/span&gt;(&lt;span &gt;string&lt;/span&gt;))&#xD;
                    {&#xD;
                        wsdlProperty.SetValue(wsdlObject, &lt;span &gt;""&lt;/span&gt;, &lt;span &gt;null&lt;/span&gt;);&#xD;
                    }&#xD;
                }&#xD;
            }&#xD;
        }&#xD;
    }&#xD;
&#xD;
    &lt;span &gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&#xD;
    &lt;span &gt;/// fill entity from wsdl entity&lt;/span&gt;&#xD;
    &lt;span &gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&#xD;
    &lt;span &gt;/// &amp;lt;param name="wsdlObject"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&#xD;
    &lt;span &gt;/// &amp;lt;param name="entity"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&#xD;
    &lt;span &gt;public&lt;/span&gt; &lt;span &gt;static&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; FillInEntityFromWSDLObject(&lt;span &gt;object&lt;/span&gt; entity, &lt;span &gt;object&lt;/span&gt; wsdlObject)&#xD;
    {&#xD;
        &lt;span &gt;if&lt;/span&gt; (wsdlObject == &lt;span &gt;null&lt;/span&gt;)&#xD;
            &lt;span &gt;return&lt;/span&gt;;&#xD;
&#xD;
        Type wsdlType = wsdlObject.GetType();&#xD;
        Type entityType = entity.GetType();&#xD;
&#xD;
        PropertyInfo wsdlProperty;&#xD;
        PropertyInfo[] pi = entityType.GetProperties();&#xD;
&#xD;
        &lt;span &gt;foreach&lt;/span&gt; (PropertyInfo entityProperty &lt;span &gt;in&lt;/span&gt; pi)&#xD;
        {&#xD;
            WSDLFieldNameAttribute[] myAttribute = (WSDLFieldNameAttribute[])entityProperty.GetCustomAttributes(&lt;span &gt;typeof&lt;/span&gt;(WSDLFieldNameAttribute), &lt;span &gt;false&lt;/span&gt;);&#xD;
            &lt;span &gt;if&lt;/span&gt; (myAttribute.Length == 0)&#xD;
            {&#xD;
                &lt;span &gt;continue&lt;/span&gt;;&#xD;
            }&#xD;
&#xD;
            &lt;span &gt;if&lt;/span&gt; (entityProperty.PropertyType.IsEnum)&#xD;
            {&#xD;
                &lt;span &gt;if&lt;/span&gt; (myAttribute.Length == 1 &amp;amp;&amp;amp; myAttribute[0].FieldType == &lt;span &gt;typeof&lt;/span&gt;(&lt;span &gt;string&lt;/span&gt;))&#xD;
                {&#xD;
                    wsdlProperty = wsdlType.GetProperty(myAttribute[0].FieldName);&#xD;
                    &lt;span &gt;if&lt;/span&gt; (wsdlProperty == &lt;span &gt;null&lt;/span&gt;)&#xD;
                        &lt;span &gt;continue&lt;/span&gt;;&#xD;
&#xD;
                    var &lt;span &gt;value&lt;/span&gt; = wsdlProperty.GetValue(wsdlObject, &lt;span &gt;null&lt;/span&gt;);&#xD;
                    &lt;span &gt;if&lt;/span&gt; (&lt;span &gt;value&lt;/span&gt; != &lt;span &gt;null&lt;/span&gt; &amp;amp;&amp;amp; &lt;span &gt;value&lt;/span&gt;.ToString() != &lt;span &gt;""&lt;/span&gt;)&#xD;
                    {&#xD;
                        entityProperty.SetValue(entity, EnumAttributeHelper.GetEnumBySqlValue(entityProperty, &lt;span &gt;value&lt;/span&gt;.ToString()), &lt;span &gt;null&lt;/span&gt;);&#xD;
                    }&#xD;
                }&#xD;
                &lt;span &gt;else&lt;/span&gt;&#xD;
                {&#xD;
                    &lt;span &gt;throw&lt;/span&gt; &lt;span &gt;new&lt;/span&gt; Exception(&lt;span &gt;string&lt;/span&gt;.Empty);&#xD;
                }&#xD;
            }&#xD;
            &lt;span &gt;else&lt;/span&gt;&#xD;
            {&#xD;
                wsdlProperty = wsdlType.GetProperty(myAttribute[0].FieldName);&#xD;
                &lt;span &gt;if&lt;/span&gt; (wsdlProperty == &lt;span &gt;null&lt;/span&gt;)&#xD;
                    &lt;span &gt;continue&lt;/span&gt;;&#xD;
&#xD;
                var &lt;span &gt;value&lt;/span&gt; = wsdlProperty.GetValue(wsdlObject, &lt;span &gt;null&lt;/span&gt;);&#xD;
                &lt;span &gt;if&lt;/span&gt; (&lt;span &gt;value&lt;/span&gt; != &lt;span &gt;null&lt;/span&gt;)&#xD;
                {&#xD;
                    &lt;span &gt;if&lt;/span&gt; (&lt;span &gt;value&lt;/span&gt;.ToString() == &lt;span &gt;""&lt;/span&gt;)&#xD;
                    {&#xD;
                        &lt;span &gt;if&lt;/span&gt; (entityProperty.PropertyType == &lt;span &gt;typeof&lt;/span&gt;(&lt;span &gt;string&lt;/span&gt;))&#xD;
                        {&#xD;
                            entityProperty.SetValue(entity, &lt;span &gt;value&lt;/span&gt;, &lt;span &gt;null&lt;/span&gt;);&#xD;
                        }&#xD;
                        &lt;span &gt;continue&lt;/span&gt;;&#xD;
                    }&#xD;
&#xD;
                    &lt;span &gt;if&lt;/span&gt; (wsdlProperty.PropertyType != entityProperty.PropertyType)&#xD;
                    {&#xD;
                        &lt;span &gt;if&lt;/span&gt; (entityProperty.PropertyType == &lt;span &gt;typeof&lt;/span&gt;(DateTime))&#xD;
                        {&#xD;
                            &lt;span &gt;if&lt;/span&gt; (&lt;span &gt;value&lt;/span&gt;.ToString().Length == 8)&#xD;
                            {&#xD;
                                &lt;span &gt;value&lt;/span&gt; = &lt;span &gt;value&lt;/span&gt;.ToString().Substring(0, 4) + &lt;span &gt;"-"&lt;/span&gt; + &lt;span &gt;value&lt;/span&gt;.ToString().Substring(4, 2) + &lt;span &gt;"-"&lt;/span&gt; + &lt;span &gt;value&lt;/span&gt;.ToString().Substring(6, 2);&#xD;
                            }&#xD;
                        }&#xD;
                        &lt;span &gt;value&lt;/span&gt; = Convert.ChangeType(&lt;span &gt;value&lt;/span&gt;, entityProperty.PropertyType);&#xD;
                    }&#xD;
&#xD;
                    entityProperty.SetValue(entity, &lt;span &gt;value&lt;/span&gt;, &lt;span &gt;null&lt;/span&gt;);&#xD;
                }&#xD;
            }&#xD;
        }&#xD;
    }&#xD;
}&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
&lt;/style&gt;&#xD;
&#xD;
&lt;style&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;上面代码需要注意的是，在某些时候，某个属性在传输的时候是以字符串的形式传输或者存储的，而在我们自定义的实体中，为了提高代码的可读性，而使用枚举&lt;/p&gt;&#xD;
&lt;p&gt;如：在数据库中存储的值分别是：O,C,P,D&lt;/p&gt;&lt;pre &gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;enum&lt;/span&gt; DcoumentStatusEnum&#xD;
{&#xD;
    [SqlValue(&lt;span &gt;"O"&lt;/span&gt;)]&#xD;
    Open = 0,&#xD;
    [SqlValue(&lt;span &gt;"C"&lt;/span&gt;)]&#xD;
    Close = 1,&#xD;
    [SqlValue(&lt;span &gt;"P"&lt;/span&gt;)]&#xD;
    Paid = 2,&#xD;
    [SqlValue(&lt;span &gt;"D"&lt;/span&gt;)]&#xD;
    Delivered = 3&#xD;
}&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;因此需要对枚举做些特殊处理，自定义一个SqlValueAttribute:&lt;/p&gt;&#xD;
&lt;div &gt;&lt;pre &gt;[AttributeUsage(AttributeTargets.All)]&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;class&lt;/span&gt; SqlValueAttribute : Attribute&lt;/pre&gt;&lt;pre &gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;string&lt;/span&gt; Text&lt;/pre&gt;&lt;pre &gt;{&lt;/pre&gt;&lt;pre&gt;get;&lt;/pre&gt;&lt;pre &gt;set;&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;public&lt;/span&gt; SqlValueAttribute(&lt;span &gt;string&lt;/span&gt; text)&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre &gt;Text = text;&lt;/pre&gt;&lt;pre&gt;}        &lt;/pre&gt;&lt;pre &gt;}&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;利用反射，根据SqlValue获取枚举，或者根据枚举获取SqlValue，性能可能会比较低，暂时也没想出什么好的办法。&lt;/p&gt;&#xD;
&lt;div &gt;&lt;pre &gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;static&lt;/span&gt; &lt;span &gt;object&lt;/span&gt; GetEnumBySqlValue(PropertyInfo pInfo, &lt;span &gt;string&lt;/span&gt; sqlValue)&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre &gt;FieldInfo[] pi = pInfo.PropertyType.GetFields();&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;foreach&lt;/span&gt; (FieldInfo p &lt;span &gt;in&lt;/span&gt; pi)&lt;/pre&gt;&lt;pre &gt;{&lt;/pre&gt;&lt;pre&gt;SqlValueAttribute[] myAttribute = (SqlValueAttribute[])p.GetCustomAttributes(&lt;span &gt;typeof&lt;/span&gt;(SqlValueAttribute), &lt;span &gt;false&lt;/span&gt;);&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;foreach&lt;/span&gt; (SqlValueAttribute m &lt;span &gt;in&lt;/span&gt; myAttribute)&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;if&lt;/span&gt; (m.Text == sqlValue.Trim())&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;string&lt;/span&gt; a = p.ToString();&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;return&lt;/span&gt; Enum.Parse(pInfo.PropertyType, p.Name);                        &lt;/pre&gt;&lt;pre &gt;}&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;pre &gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;return&lt;/span&gt; &lt;span &gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre &gt;}&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;public&lt;/span&gt; &lt;span &gt;static&lt;/span&gt; &lt;span &gt;string&lt;/span&gt; GetSqlByEnum(&lt;span &gt;object&lt;/span&gt; enumValue)&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre &gt;FieldInfo[] pi = enumValue.GetType().GetFields();&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;foreach&lt;/span&gt; (FieldInfo p &lt;span &gt;in&lt;/span&gt; pi)&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;if&lt;/span&gt; (p.Name == enumValue.ToString())&lt;/pre&gt;&lt;pre&gt;{&lt;/pre&gt;&lt;pre &gt;SqlValueAttribute[] myAttribute = (SqlValueAttribute[])p.GetCustomAttributes(&lt;span &gt;typeof&lt;/span&gt;(SqlValueAttribute), &lt;span &gt;false&lt;/span&gt;);&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;foreach&lt;/span&gt; (SqlValueAttribute m &lt;span &gt;in&lt;/span&gt; myAttribute)&lt;/pre&gt;&lt;pre &gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;return&lt;/span&gt; m.Text;&lt;/pre&gt;&lt;pre &gt;}&lt;/pre&gt;&lt;pre&gt;}&lt;/pre&gt;&lt;pre &gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;return&lt;/span&gt; &lt;span &gt;null&lt;/span&gt;;&lt;/pre&gt;&lt;pre &gt;}&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
&lt;/style&gt;&#xD;
&#xD;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
&lt;/style&gt;&lt;img src="http://www.cnblogs.com/MaoBisheng/aggbug/2063508.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaoBisheng/archive/2011/05/30/2063508.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/MaoBisheng/archive/2010/07/18/1780024.html</id><title type="text">使用“性能监视器”监视系统性能/运行情况</title><summary type="text">Windows 性能监视器概述Windows 性能监视器是一个 Microsoft 管理控制台 (MMC) 管理单元，提供用于分析系统性能的工具。仅从一个单独的控制台，即可实时监视应用程序和硬件性能，自定义要在日志中收集的数据，定义警报和自动操作的阈值，生成报告以及以各种方式查看过去的性能数据。 启动 Windows 性能监视器：开始--&amp;gt;运行&amp;mdash;&amp;gt;输入perfmon--&amp;g...</summary><published>2010-07-18T01:31:00Z</published><updated>2010-07-18T01:31:00Z</updated><author><name>MaoBisheng</name><uri>http://www.cnblogs.com/MaoBisheng/</uri></author><link rel="alternate" href="http://www.cnblogs.com/MaoBisheng/archive/2010/07/18/1780024.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/MaoBisheng/archive/2010/07/18/1780024.html"/><content type="html">&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;Windows 性能监视器概述&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;Windows 性能监视器是一个 Microsoft 管理控制台 (MMC) 管理单元，提供用于分析系统性能的工具。仅从一个单独的控制台，即可实时监视应用程序和硬件性能，自定义要在日志中收集的数据，定义警报和自动操作的阈值，生成报告以及以各种方式查看过去的性能数据。 &lt;/p&gt;&#xD;
&lt;p&gt;启动 Windows 性能监视器：开始--&amp;gt;运行&amp;mdash;&amp;gt;输入perfmon--&amp;gt;回车&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;添加-保存计数器设置：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在Windows 2003中，添加完计数器后，直接按Ctrl+S，就能将设置保存为文件的形式，方便下次直接查看，在Win7中来的不那么直接。&lt;/p&gt;&#xD;
&lt;p&gt;开始--&amp;gt;运行--&amp;gt;输入MMC--&amp;gt;文件--&amp;gt;添加/删除管理单元--&amp;gt;选择性能监视器--&amp;gt;添加，然后在性能（本地）中来添加你的计数器，这样就可以保存了，方便下次查看。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;运行截图：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://maobisheng.cnblogs.com/" target="_blank"&gt;&lt;img style="display: inline; border: 0px;" title="曲线图" alt="曲线图" src="http://images.cnblogs.com/cnblogs_com/MaoBisheng/WindowsLiveWriter/5be1ad9687b6_7FCE/4.jpg" border="0" height="637" width="904" /&gt;&lt;/a&gt; &lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;常用的监视计数器：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;table style="width: 853px;" border="1" cellpadding="2" cellspacing="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;对象&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="151"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;计数器&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;td width="483"&gt;&#xD;
&lt;p align="center"&gt;&lt;b&gt;说明&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;.NET CLR Exceptions&lt;/td&gt;&#xD;
&lt;td width="151"&gt;# of Exceps Thrown / sec&lt;/td&gt;&#xD;
&lt;td width="483"&gt;显示每秒钟抛出的异常数。这包括 .NET 异常和转换为 .NET 异常的未受管异常。性能随此数目的增大而下降。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;.NET CLR Memory&lt;/td&gt;&#xD;
&lt;td width="151"&gt;# Bytes in all Heaps&lt;/td&gt;&#xD;
&lt;td width="483"&gt;显示其他四个计数器的总和：Gen 0 堆大小、Gen 1 堆大小、Gen 2 堆大小以及大对象堆大小。此计数器表示 GC 堆上当前分配的内存（以字节为单位）。此计数器的值总是比 Process\Private Bytes 的值小，Process\Private Bytes 对进程的 MEM_COMMIT 区域进行计数。Private Bytes minus # Bytes in all Heaps 就是由未受管对象提交的字节数。&lt;br /&gt;用于监视可能的内存泄漏，或者监视受管或未受管对象的内存使用率是否过大。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;.NET CLR Remoting&lt;/td&gt;&#xD;
&lt;td width="151"&gt;Remote Calls/sec&lt;/td&gt;&#xD;
&lt;td width="483"&gt;显示每秒调用的远程过程调用的数目。远程过程调用是对调用方所在应用程序域之外的任何对象的调用。此计数器不是一段时间内的平均值；它显示最近两个样本观测值的差除以取样间隔所得的结果。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;.NET Data Provider for Oracle&lt;/td&gt;&#xD;
&lt;td width="151"&gt;NumberOfFreeConnections&lt;/td&gt;&#xD;
&lt;td width="483"&gt;连接池中可用连接的数量。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;.NET Data Provider for SqlServer&lt;/td&gt;&#xD;
&lt;td width="151"&gt;NumberOfFreeConnections&lt;/td&gt;&#xD;
&lt;td width="483"&gt;连接池中可用连接的数量。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;Process&lt;/td&gt;&#xD;
&lt;td width="151"&gt;% Processor Time&lt;/td&gt;&#xD;
&lt;td width="483"&gt;显示所有进程线程用于执行指令的已用处理器时间的&lt;span style="color: #ff0000;"&gt;百分比&lt;/span&gt;。指令是计算机中的基本执行单位；线程是执行指令的对象；进程是运行程序时创建的对象。此计数中包含了处理某些硬件中断和陷阱条件时执行的代码。如果总的处理器时间较长，请使用此计数器确定导致 CPU 利用率很高的进程。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;Process&lt;/td&gt;&#xD;
&lt;td width="151"&gt;Handle Count&lt;/td&gt;&#xD;
&lt;td width="483"&gt;显示此进程当前打开的句柄的总数。此数字是此进程中的每个线程当前打开的句柄总数。特定进程中句柄计数的增加可能是发生句柄泄漏的错误进程的症状，这将导致服务器上发生性能问题。此问题并不一定会出现，但是在一段时间内对其进行监视以确定是否发生句柄泄漏十分重要。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;Process&lt;/td&gt;&#xD;
&lt;td width="151"&gt;Thread Count&lt;/td&gt;&#xD;
&lt;td width="483"&gt;&lt;span style="color: #ff0000;"&gt;这个进程中正在活动的线程数目&lt;/span&gt;。指令是在处理器中基本的执行单位，线程是指执行指令的对象。每个运行的进程至少有一个线程。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;SQLServer:General Statistics&lt;/td&gt;&#xD;
&lt;td width="151"&gt;User Connections&lt;/td&gt;&#xD;
&lt;td width="483"&gt;&lt;span style="color: #ff0000;"&gt;显示sqlserver目前连接的数量，而不是用户数&lt;/span&gt;。如果该计数器超过255，那么你需要将sqlserver的"Maximum Worker Threads" 的配置值设置得比缺省值255高。如果连接的数量超过可用的线程数，那么sqlserver将共享线程，这样会影响性能。"Maximum Worker Threads"需要设置得比你服务器曾经达到的最大连接数更高。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;SQLServer:Locks&lt;/td&gt;&#xD;
&lt;td width="151"&gt;Number of Deadlocks/sec&lt;/td&gt;&#xD;
&lt;td width="483"&gt;死锁的数量/秒，死锁对应用程序的可伸缩性非常有害，并且会导致恶劣的用户体验。该计数器的值必须为0。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;LogicalDisk&lt;/td&gt;&#xD;
&lt;td width="151"&gt;% Free Space&lt;/td&gt;&#xD;
&lt;td width="483"&gt;% Free Space 是所选逻辑磁盘驱动器上总计可用空间所占的&lt;span style="color: #ff0000;"&gt;百分比&lt;/span&gt;。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;PhysicalDisk&lt;/td&gt;&#xD;
&lt;td width="151"&gt;Disk Read Bytes/sec&lt;/td&gt;&#xD;
&lt;td width="483"&gt;指在读取操作时从磁盘上传送字节的速率。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="217"&gt;PhysicalDisk&lt;/td&gt;&#xD;
&lt;td width="151"&gt;Disk Write Bytes/sec&lt;/td&gt;&#xD;
&lt;td width="483"&gt;指在写入操作时传送到磁盘上的字节速度。&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;默认状况下，以下两个计数器的开关是关着的，需要配置下%WINDIR%\microsoft.net\Framework64\v2.0.50727\CONFIG\machine.config如下开关的（32和64位操作系统的路径也有不同），否则数据采集不到。&lt;/p&gt;&#xD;
&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&#xD;
&lt;tbody&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td width="233"&gt;.NET Data Provider for Oracle&lt;/td&gt;&#xD;
&lt;td width="173"&gt;NumberOfFreeConnections&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;tr&gt;&#xD;
&lt;td&gt;.NET Data Provider for SqlServer&lt;/td&gt;&#xD;
&lt;td&gt;NumberOfFreeConnections&lt;/td&gt;&#xD;
&lt;/tr&gt;&#xD;
&lt;/tbody&gt;&#xD;
&lt;/table&gt;&#xD;
&lt;p&gt;增加配置，并重启相应的进程（重启服务，或者是重启IIS等）&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;system.diagnostics&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;switches&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span &gt;&amp;lt;&lt;/span&gt;&lt;span &gt;add&lt;/span&gt; &lt;span &gt;name&lt;/span&gt;&lt;span &gt;="ConnectionPoolPerformanceCounterDetail" &lt;/span&gt;&lt;span &gt;value&lt;/span&gt;&lt;span &gt;="4"&lt;/span&gt;&lt;span &gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;switches&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span &gt;&amp;lt;/&lt;/span&gt;&lt;span &gt;system.diagnostics&lt;/span&gt;&lt;span &gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&#xD;
&lt;p&gt;&lt;span style="font-size: 14pt;"&gt;用C#采集计数器的数据：&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;虽然Windows自带了perfmon工具，并可以生成报告以及以各种方式查看过去的性能数据，但是有时候我们还是定义自己的一些曲线或者报表，那么就需要将性能监视器的数据收集起来，C#提供了PerformanceCounterCategory（性能对象），PerformanceCounter（性能计数器组件）两个类，提供了操作性能监视器的一些方法，这样我们就能把数据读取出来保存到数据库中或者文件中，可用来随意产生一些曲线或报表，或者报警Mail等。。。&lt;/p&gt;&#xD;
&lt;p&gt;示例代码：&lt;/p&gt;&#xD;
&lt;pre &gt;&lt;span &gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span &gt;using&lt;/span&gt; System.Diagnostics;&lt;br /&gt;&lt;span &gt;using&lt;/span&gt; System.Threading;&lt;br /&gt;&lt;br /&gt;&lt;span &gt;namespace&lt;/span&gt; TestApplication&lt;br /&gt;{&lt;br /&gt;    &lt;span &gt;public&lt;/span&gt; &lt;span &gt;class&lt;/span&gt; Program&lt;br /&gt;    {&lt;br /&gt;        &lt;span &gt;static&lt;/span&gt; &lt;span &gt;void&lt;/span&gt; Main(&lt;span &gt;string&lt;/span&gt;[] args)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(GetPerfCount(&lt;span &gt;"Process"&lt;/span&gt;, &lt;span &gt;"% Processor Time"&lt;/span&gt;, &lt;span &gt;"_Total"&lt;/span&gt;));&lt;br /&gt;            Console.WriteLine(GetPerfCount(&lt;span &gt;".NET CLR Memory"&lt;/span&gt;, &lt;span &gt;"# Bytes in all Heaps"&lt;/span&gt;, &lt;span &gt;"_Global_"&lt;/span&gt;));&lt;br /&gt;            Console.WriteLine(GetPerfCount(&lt;span &gt;"SQLServer:General Statistics"&lt;/span&gt;, &lt;span &gt;"User Connections"&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;            Console.Read();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// 获取计数器样本并为其返回计算所得值--有实例的计数器(对于大多数的计数器)&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;param name="categoryName"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;param name="counterName"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;param name="instance"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;public&lt;/span&gt; &lt;span &gt;static&lt;/span&gt; &lt;span &gt;float&lt;/span&gt; GetPerfCount(&lt;span &gt;string&lt;/span&gt; categoryName, &lt;span &gt;string&lt;/span&gt; counterName, &lt;span &gt;string&lt;/span&gt; instance)&lt;br /&gt;        {&lt;br /&gt;            PerformanceCounter counter = &lt;span &gt;new&lt;/span&gt; PerformanceCounter&lt;br /&gt;            {&lt;br /&gt;                CategoryName = categoryName,&lt;br /&gt;                CounterName = counterName,&lt;br /&gt;                InstanceName = instance,&lt;br /&gt;                MachineName = &lt;span &gt;"."&lt;/span&gt;,&lt;br /&gt;                ReadOnly = &lt;span &gt;true&lt;/span&gt;&lt;br /&gt;            };&lt;br /&gt;            counter.NextValue();&lt;br /&gt;            Thread.Sleep(200);&lt;br /&gt;            &lt;span &gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span &gt;if&lt;/span&gt; (counter != &lt;span &gt;null&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span &gt;return&lt;/span&gt; counter.NextValue();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;span &gt;catch&lt;/span&gt; (Exception)&lt;br /&gt;            {&lt;br /&gt;                &lt;span &gt;return&lt;/span&gt; -2f;&lt;br /&gt;            }&lt;br /&gt;            &lt;span &gt;return&lt;/span&gt; -1f;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// 获取计数器样本并为其返回计算所得值--无实例的计数器&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// 比如categoryName=SQLServer:General Statistics，counterName=User Connections&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;param name="categoryName"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;param name="counterName"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span &gt;public&lt;/span&gt; &lt;span &gt;static&lt;/span&gt; &lt;span &gt;float&lt;/span&gt; GetPerfCount(&lt;span &gt;string&lt;/span&gt; categoryName, &lt;span &gt;string&lt;/span&gt; counterName)&lt;br /&gt;        {&lt;br /&gt;            PerformanceCounter counter = &lt;span &gt;new&lt;/span&gt; PerformanceCounter&lt;br /&gt;            {&lt;br /&gt;                CategoryName = categoryName,&lt;br /&gt;                CounterName = counterName&lt;br /&gt;            };&lt;br /&gt;            counter.NextValue();&lt;br /&gt;            Thread.Sleep(200);&lt;br /&gt;            &lt;span &gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span &gt;if&lt;/span&gt; (counter != &lt;span &gt;null&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span &gt;return&lt;/span&gt; counter.NextValue();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            &lt;span &gt;catch&lt;/span&gt; (Exception)&lt;br /&gt;            {&lt;br /&gt;                &lt;span &gt;return&lt;/span&gt; -2f;&lt;br /&gt;            }&lt;br /&gt;            &lt;span &gt;return&lt;/span&gt; -1f;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;pre &gt;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;&lt;!--&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
--&gt;&lt;/style&gt;&lt;img src="http://www.cnblogs.com/MaoBisheng/aggbug/1780024.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/MaoBisheng/archive/2010/07/18/1780024.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
