﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-Design &amp; Pattern团队</title><link>http://DesignPattern.cnblogs.com</link><description>探讨和研究软件设计与模式的应用
</description><language>zh-cn</language><lastBuildDate>Sat, 05 Jul 2008 10:33:35 GMT</lastBuildDate><pubDate>Sat, 05 Jul 2008 10:33:35 GMT</pubDate><ttl>60</ttl><item><title>ASP.NET中进行消息处理(MSMQ) 三 </title><link>http://www.cnblogs.com/beniao/archive/2008/07/04/1234352.html</link><dc:creator>Bēniaǒ</dc:creator><author>Bēniaǒ</author><pubDate>Fri, 04 Jul 2008 11:43:00 GMT</pubDate><guid>http://www.cnblogs.com/beniao/archive/2008/07/04/1234352.html</guid><description><![CDATA[摘要: 在PetShop 4.0中，利用消息队列临时存放要插入的数据，来避免因为频繁访问数据库的操作。而队列中的消息，则等待系统的专用的应用程序来处理，最后将数据插入到数据库中。&nbsp;&nbsp;<a href='http://www.cnblogs.com/beniao/archive/2008/07/04/1234352.html'>阅读全文</a><img src ="http://DesignPattern.cnblogs.comaggbug/1234352.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37543/" target="_blank">[新闻]李开复：中文搜索是谷歌战略核心</a>]]></description></item><item><title>浅谈Linq To Sql集成数据库语言的优劣</title><link>http://www.cnblogs.com/xumingming/archive/2008/07/04/1235660.html</link><dc:creator>Michael Xu</dc:creator><author>Michael Xu</author><pubDate>Fri, 04 Jul 2008 06:50:00 GMT</pubDate><guid>http://www.cnblogs.com/xumingming/archive/2008/07/04/1235660.html</guid><description><![CDATA[<p><strong>Linq To Sql</strong>是<strong>Microsoft</strong>开发的针对解决data!=object问题的新技术。在笔者的一系列的文章中，对它已经做了大量的介绍。现在，笔者将从经验的角度，谈谈它的优劣。</p>
<p>　　<strong>1、Linq To Sql的优点</strong></p>
<p>　　在Linq To Sql推出之前，我们只是把sql语句形成一个string，然后，通过ado.net传给sql server，返回结果集.这里的缺陷就是，如果你sql语句写的有问题，只有到运行时才知道.而且并不所有的人都懂<a class="channel_keylink" href="http://www.bc-cn.net/Article/sjk/Index.html">数据库</a>的。Linq To SQl 在一切围绕数据的项目内都可以使用。特别是在项目中缺少SQL Server方面的专家时，Linq To SQl的强大的功能可以帮我们快速的完成项目。Linq To SQl的推出，是让大家从烦琐的技术细节中解脱出来，更加关注项目的逻辑。Linq To Sql的出现，大大降低了数据库应用程序开发的门楷，它实质是事先为你构架了数据访问层，势必将加快数据库应用程序的开发进度。Linq To Sql解放了众多程序员，让他们的把更多的精力放到业务逻辑以及code上，而不是数据库。对于初学者来讲，Linq To Sql可以让他们迅速进入数据库应用程序开发领域，节约了培训成本。</p>
<p>　　Linq To SQl 的实现，是在ado.net和C#2.0的基础上的。它通过自动翻译sql语句，并把结果集创建成对象并返回。这里我们可以看出，发送到SQL Server端的sql语句是Linq To Sql自动生成的。这对不懂sql的人来说，无疑是个福音。第二，Linq To Sql语句是在编译期间就做检查的。而不是运行时检查。这样，那里出了问题，可以及时更改，而不是到了运行时才发现问题。第三，Linq To Sql是针对对象操作的，更符合今天的oo呼声。</p>
<p>　　在Linq To SQl 之前，在<a class="channel_keylink" href="http://www.bc-cn.net/Article/kfyy/java/Index.html">Java</a>领域有Hibernate，在net领域有NHibernate技术，来实现object/relational 持久和查询服务。那和NHibernate比起来，它又有那些优势呢.第一，影射代码自动生成。VS2008提供了SqlMetal和OR Designer两个工具来完成此步骤。而在NHibernate中，你不得不自己手工写。第二，影射代码有更多的选择.NHibernate只能把<a class="channel_keylink" href="http://www.bc-cn.net/Article/sjk/Index.html">数据库</a>的信息配置在一个xml中，而Linq To Sql有两种方式，一个是放到<a class="channel_keylink" href="http://www.bc-cn.net/Article/web/xml/Index.html">XML</a>中，我们称为Externl Mapping, 再一种就是以Attribute的形式，存在于各个property中。当然，笔者本人并没有使用过NHibernate，只是从资料上得到这些消息，所以无法给出更多的比较。</p>
<p>　　<strong>2、Linq To Sql的缺点</strong></p>
<p>　　很久前，有个网友问到这么一个问题。他在界面上有个DataView，里面绑定了一些Column，然后他勾选那一列就按某列排序。其传回的参数是列的名字。然后问我该怎么用Dlinq 来实现。</p>
<p>　　在以前拼接Sql语句的年代，这个很简单，一个" order by " + string，想按什么排就按什么来排。而现在dlinq是用是一个对象的<a class="channel_keylink" href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%CA%F4%D0%D4">属性</a>，已经不可能拼接了。我当时给他的答案是这样的。 </p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">
            <p><font style="font-weight: bold; color: #990000">以下是引用片段：</font><br />
            private&nbsp;void&nbsp;Methods(string&nbsp;orderId) <br />
            　　{ <br />
            　　&nbsp;var&nbsp;q&nbsp;=&nbsp;db.Customers.Select(c=&gt;c); <br />
            　　 <br />
            　　&nbsp;switch(orderId) <br />
            　　&nbsp;{ <br />
            　　&nbsp;case&nbsp;"ID": <br />
            　　&nbsp;q&nbsp;=&nbsp;q.OrderBy(c=&gt;c.ID); <br />
            　　&nbsp;break; <br />
            　　&nbsp;case&nbsp;"Name": <br />
            　　&nbsp;q&nbsp;=&nbsp;q.OrderBy(c=&gt;c.Name); <br />
            　　&nbsp;break; <br />
            　　&nbsp;default: <br />
            　　&nbsp;break; <br />
            　　&nbsp;} <br />
            　　 <br />
            　　&nbsp;var&nbsp;result&nbsp;=&nbsp;q.ToList(); <br />
            　　}</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>　　我那时也没有想出一个更好的方案来。而后告诉他去查下Compiled Query，说不定可以找到更方便的。后来我才在这个例子中，看到更方便的。&nbsp;</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">
            <p><font style="font-weight: bold; color: #990000">以下是引用片段：</font><br />
            var&nbsp;query&nbsp;= <br />
            　　&nbsp;db.Customers.Where("City&nbsp;==&nbsp;@0&nbsp;and&nbsp;Orders.Count&nbsp;&gt;=&nbsp;@1",&nbsp;"London",&nbsp;10). <br />
            　　&nbsp;OrderBy("CompanyName"). <br />
            　　&nbsp;Select("New(CompanyName&nbsp;as&nbsp;Name,&nbsp;Phone)");</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>　　在这里OrderBy直接接收的就是列的名字。再仔细一看，好像Where里是Linq的语句哎，那OrderBy也该是linq语句。后来，我把CompanyName换成小写的，一跑过了。莫非真的是列的名字?出个难题吧。找了一个列名，是带空格的，重新来建这个工程.一跑，错了!把列名用中国扩号扩起来了，也是错了。咳，只是动态构造Expression Tree而已，永远都不能直接接收列的名字。这个例子看着是很简单，可不知道你有没有注意到它有一个80多k的Dynamic.cs文件。更有意思的事情是，它的名称空间是System.Linq.Dynamic.看样子，ms本来是打算把它加在.net3.5中吗.不晓得为什么放到了例子中了。这个名称空间下，其主要内容就是动态构造Expression Tree. 和Linq To Sql进阶系列(七)动态查询 一文中的方法类似。只是，它还包含了解析字符串部分.</p>
<p>　　从上面那个例子中，可以看出，Linq To Sql在这种动态构造语句时，比拼接sql麻烦很多。在Linq To Sql进阶系列(七)动态查询 一文中，笔者极力推荐使用object的查询。这符合Linq To Sql的设计原则。因为，它主要是为了解决data!=objects 的问题而产生的.它所有的操作均针对object，那就让我们使用object的查询吧.</p>
<p>　　当然，依然会有人习惯拼接字符串.我并不认为这是个坏毛病。只是有点不符合oo思想而已。事实上，在Linq To Sql中，你依然可以使用拼接字符串的形式，而不使用它提供的Query Expression. 它提供了这么两个<a class="channel_keylink" href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BD%D3%BF%DA">接口</a>，一个是，db.ExecuteQuery<tentity></tentity>(string sql); 另一个是，db.ExecuteCommand(string　sql);这两个<a class="channel_keylink" href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>都是直接接收　sql语句的.习惯拼接的人，依然可以调用它们来实现你的程序。特别是第一个，其返回的就是一个对象的集合，多少还是有点oo思想的。</p>
<p>　　看下面的例子：</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">
            <p><font style="font-weight: bold; color: #990000">以下是引用片段：</font><br />
            var&nbsp;products&nbsp;=&nbsp;db.ExecuteQuery( <br />
            　　&nbsp;"SELECT&nbsp;[Product&nbsp;List].ProductID,&nbsp;[Product&nbsp;List].ProductName&nbsp;"&nbsp;+ <br />
            　　&nbsp;"FROM&nbsp;Products&nbsp;AS&nbsp;[Product&nbsp;List]&nbsp;"&nbsp;+ <br />
            　　&nbsp;"WHERE&nbsp;[Product&nbsp;List].Discontinued&nbsp;=&nbsp;0&nbsp;"&nbsp;+ <br />
            　　&nbsp;"ORDER&nbsp;BY&nbsp;[Product&nbsp;List].ProductName;" <br />
            　　&nbsp;).ToList();</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>　　它返回的就是product的集合。而不是什么dataset和datatable之类的。这里，你可以大胆的使用该<a class="channel_keylink" href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BA%AF%CA%FD">函数</a>继续拼接你的sql吧，再看下面这个：</p>
<p>
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">
            <p><font style="font-weight: bold; color: #990000">以下是引用片段：</font><br />
            db.ExecuteCommand("UPDATE&nbsp;Products&nbsp;SET&nbsp;UnitPrice&nbsp;=&nbsp;UnitPrice&nbsp;+&nbsp;1.00");</p>
            </td>
        </tr>
    </tbody>
</table>
</p>
<p>　　它在做批处理的时候，你想不用它，都不行.当然，你如果觉得性能不是问题的话，那就用submitchange方法来做更新好了。简单明了的说，Linq To Sql在批处理更新的时候，SubmitChange只会一个个的更新。浪费时间资源.而这个<a class="channel_keylink" href="http://www.bc-cn.net/Article/Search.asp?Field=Title&amp;ClassID=&amp;keyword=%BD%D3%BF%DA">接口</a>，恰好满足了批处理更新或删除的问题。从这两个例子，我们可以看出。没有任何方案是万能的。各有各的优点。</p>
<p>　　<strong>3、Linq To Sql的性能</strong></p>
<p>　　Linq 的性能已经被好多人提及.Linq To Object 的性能大家讨论的比较多些.它确实比自己实现的查找要慢.但是当数据量特别大时，更多是时间是花在分配虚拟内存上了，那么他们的差别就不是那么明显了。Linq To Sql是又如何提升性能的?第一，采用延迟加载(deferred loading)技术。语句是声明了，但是并不立即执行，而是在真正需要的时候才执行。第二，采用缓存技术。已经取到内存的数据，再依次提取时，会先从缓存中返回，而不是再次访问<a class="channel_keylink" href="http://www.bc-cn.net/Article/sjk/Index.html">数据库</a>。当然，笔者建议，不要对象的时候，没有必要使用Linq To Sql.比如，只是填充DataView或DataGrid时，返回dataset或datatable要比用Linq To Sql实现的快很多。</p>
<p>　　<strong>结论：</strong>各种技术都有其自身的优点和缺点。使用什么样的技术，完全在于项目对性能和开发进度的要求，以及程序员自身的爱好有关。扬长避短，才是正道。</p>
<img src ="http://DesignPattern.cnblogs.comaggbug/1235660.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37542/" target="_blank">[新闻]《星际争霸2》新图：黑暗圣堂武士Zeratul</a>]]></description></item><item><title>用VS2005制造WEB安装程序</title><link>http://www.cnblogs.com/xumingming/archive/2008/07/04/1235326.html</link><dc:creator>Michael Xu</dc:creator><author>Michael Xu</author><pubDate>Fri, 04 Jul 2008 02:37:00 GMT</pubDate><guid>http://www.cnblogs.com/xumingming/archive/2008/07/04/1235326.html</guid><description><![CDATA[<p align="center"><strong></strong><strong></strong>&nbsp;</p>
<p><strong><span style="font-size: 12pt; font-family: 宋体">环境：</span></strong><strong><span style="font-size: 12pt">windows2003 + vs2005+sqlserver2000</span></strong></p>
<p><strong><span style="font-size: 12pt">&nbsp;</span></strong><span><span>1、</span></span><span style="font-family: 宋体">打开</span><span>VS2005</span><span style="font-family: 宋体">，打开工程或网站（这里的示例是一个已发布的网站系统）.</span><span><span>&nbsp;&nbsp; </span></span></p>
<p><span><span>2、</span></span><span style="font-family: 宋体">从&#8220;解决方案资源管理器中&#8221;右键点击解决方案名称，选择&#8220;添加&#8221;――&#8220;新建项目&#8221;，从打开的&#8220;添加新项目&#8221;窗口，在&#8220;项目类型&#8221;栏选择&#8220;其他项目类型&#8221;――&#8220;安装部署&#8221;，在模板栏，选&#8220;</span><span>web</span><span style="font-family: 宋体">项目&#8221;，在下面的名称和地址栏输入名称和地址。</span></p>
<p><span>3</span><span style="font-family: 宋体">、生成</span><span>sql</span><span style="font-family: 宋体">文件（只生成创建数据表的</span><span>SQL</span><span style="font-family: 宋体">语句）</span></p>
<p><span style="font-family: 宋体">打开</span><span>SQLSER</span><span style="font-family: 宋体">企业管理器，登录，选择数据库――选择要生成</span><span>SQL</span><span style="font-family: 宋体">语句的表，右键――所有任务――生成</span><span>SQL</span><span style="font-family: 宋体">脚本。在打开的窗口中点击&#8220;确定&#8221;，保存</span><span>SQL</span><span style="font-family: 宋体">脚本（注意：</span><span>sql</span><span style="font-family: 宋体">文件一定要用小写的英文名称命名，保存完成后把</span><span>SQL</span><span style="font-family: 宋体">文件另存为</span><span>TXT</span><span style="font-family: 宋体">文件，并把里面的所有的&#8220;</span><span>GO</span><span style="font-family: 宋体">&#8221;去掉。）</span></p>
<p><span>4</span><span style="font-family: 宋体">、创建安装程序类库和安装程序类</span></p>
<p><span style="font-family: 宋体">从&#8220;解决方案资源管理器中&#8221;右键点击解决方案名称，选择&#8220;添加&#8221;――&#8220;新建项目&#8221;，从打开的&#8220;添加新项目&#8221;窗口，在&#8220;项目类型&#8221;栏选择&#8220;</span><span>VISAL BASIC</span><span style="font-family: 宋体">&#8221;，在模板栏，选&#8220;类库&#8221;，在下面的名称和地址栏输入名称和地址。点击&#8220;确定&#8221;。</span></p>
<p><span>&nbsp;</span></p>
<p><span>5</span><span style="font-family: 宋体">、从&#8220;解决方案资源管理器中&#8221;点击刚生成的类库，删除自动生成的</span><span>class1.vb</span><span style="font-family: 宋体">类，右键点击类库名称――添加――新建项，选择&#8220;安装程序类&#8221;，输入名称，点击&#8220;添加&#8221;按钮。</span></p>
<p><span>&nbsp;</span></p>
<p><span>6</span><span style="font-family: 宋体">、打开刚生成的安装程序类，在</span><span>dbtest.vb</span><span style="font-family: 宋体">中，添加如下代码</span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">Imports</span><span style="font-size: 9pt; font-family: 新宋体"> System.ComponentModel</span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">Imports</span><span style="font-size: 9pt; font-family: 新宋体"> System.Configuration.Install</span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">Imports</span><span style="font-size: 9pt; font-family: 新宋体"> System.IO</span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">Imports</span><span style="font-size: 9pt; font-family: 新宋体"> System.Reflection</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">Public</span><span style="font-size: 9pt; font-family: 新宋体"> <span style="color: blue">Class</span> dbtest</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">声明私有变量</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Private</span> sqlConnection1 <span style="color: blue">As</span> SqlClient.SqlConnection</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Private</span> ServerName <span style="color: blue">As</span> <span style="color: blue">String</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Private</span> AdminName <span style="color: blue">As</span> <span style="color: blue">String</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Private</span> AdminPwd <span style="color: blue">As</span> <span style="color: blue">String</span></span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Public</span> <span style="color: blue">Sub</span> <span style="color: blue">New</span>()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">MyBase</span>.New()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">组件设计器需要此调用。</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;</span>InitializeComponent()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">调用<span> InitializeComponent </span>后添加初始化代码</span></p>
<p align="left"><span style="font-size: 9pt; color: green; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">Sub</span></span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Private</span> <span style="color: blue">Function</span> GetSql(<span style="color: blue">ByVal</span> Name <span style="color: blue">As</span> <span style="color: blue">String</span>) <span style="color: blue">As</span> <span style="color: blue">String</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Try</span></span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">' Gets the current assembly.</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Dim</span> Asm <span style="color: blue">As</span> [Assembly] = [Assembly].GetExecutingAssembly()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">' Resources are named using a fully qualified name.</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Dim</span> strm <span style="color: blue">As</span> Stream = Asm.GetManifestResourceStream( _</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Asm.GetName().Name + <span style="color: maroon">"."</span> + Name)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">' Reads the contents of the embedded file.</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Dim</span> reader <span style="color: blue">As</span> StreamReader = <span style="color: blue">New</span> StreamReader(strm)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Return</span> reader.ReadToEnd()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Catch</span> ex <span style="color: blue">As</span> Exception</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MsgBox(<span style="color: maroon">"</span></span><span style="font-size: 9pt; color: maroon; font-family: 新宋体">读取<span>SQL</span>文件出错<span>: "</span></span><span style="font-size: 9pt; font-family: 新宋体"> &amp; ex.Message)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Throw</span> ex</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">Try</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">Function</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span style="color: blue"><span style="color: blue">Private</span><span> <span style="color: blue">Sub</span> ExecuteSql(<span style="color: blue">ByVal</span> DatabaseName <span style="color: blue">As</span> <span style="color: blue">String</span>, <span style="color: blue">ByVal</span> Sql <span style="color: blue">As</span> <span style="color: blue">String</span>)</span></span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Dim</span> Command <span style="color: blue">As</span> <span style="color: blue">New</span> SqlClient.SqlCommand(Sql, sqlConnection1)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Command.Connection.Open()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Command.Connection.ChangeDatabase(DatabaseName)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Try</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Command.ExecuteNonQuery()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Finally</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">' Finally, blocks are a great way to ensure that the connection </span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">' is always closed.</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Command.Connection.Close()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">Try</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">Sub</span></span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Protected</span> <span style="color: blue">Sub</span> AddDBTable()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Try</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">' </span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">生成数据库</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ExecuteSql(<span style="color: maroon">"master"</span>, <span style="color: maroon">"CREATE DATABASE water"</span>)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">' </span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">根据<span>SQL</span>语句生成表</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ExecuteSql(<span style="color: maroon">"water"</span>, GetSql(<span style="color: maroon">"watertable.txt"</span>))</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Catch</span> ex <span style="color: blue">As</span> Exception</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">' Reports any errors and abort.</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MsgBox(<span style="color: maroon">"</span></span><span style="font-size: 9pt; color: maroon; font-family: 新宋体">生成数据库错误<span>: "</span></span><span style="font-size: 9pt; font-family: 新宋体"> &amp; ex.Message)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Throw</span> ex</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">Try</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">Sub</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Private</span> <span style="color: blue">Sub</span> WriteWebConfig()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">修改<span>web.config</span>文件</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Try</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Dim</span> FileInfo <span style="color: blue">As</span> System.IO.FileInfo = <span style="color: blue">New</span> System.IO.FileInfo(<span style="color: blue">Me</span>.Context.Parameters.Item(<span style="color: maroon">"targetdir"</span>) &amp; <span style="color: maroon">"\web.config"</span>)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">If</span> <span style="color: blue">Not</span> FileInfo.Exists <span style="color: blue">Then</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Throw</span> <span style="color: blue">New</span> InstallException(<span style="color: maroon">"</span></span><span style="font-size: 9pt; color: maroon; font-family: 新宋体">没有找到配置文件<span>"</span></span><span style="font-size: 9pt; font-family: 新宋体">)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">If</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">实例化<span>xml</span>文档</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Dim</span> XmlDocument <span style="color: blue">As</span> <span style="color: blue">New</span> System.Xml.XmlDocument</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>XmlDocument.Load(FileInfo.FullName)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;</span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">查找到<span>appsettings</span>中的节点</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Dim</span> Node <span style="color: blue">As</span> System.Xml.XmlNode</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Dim</span> FoundIt <span style="color: blue">As</span> <span style="color: blue">Boolean</span> = <span style="color: blue">False</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">For</span> <span style="color: blue">Each</span> Node <span style="color: blue">In</span> XmlDocument.Item(<span style="color: maroon">"configuration"</span>).Item(<span style="color: maroon">"appSettings"</span>)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">If</span> Node.Name = <span style="color: maroon">"add"</span> <span style="color: blue">Then</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">If</span> Node.Attributes.GetNamedItem(<span style="color: maroon">"key"</span>).Value = <span style="color: maroon">"AdoConnBySql"</span> <span style="color: blue">Then</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">写入连接字符串</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Node.Attributes.GetNamedItem(<span style="color: maroon">"value"</span>).Value = <span style="color: blue">String</span>.Format(<span style="color: maroon">"Provider=SQLOLEDB;Data Source={0};Password={2};User ID={1};Initial Catalog=water"</span>, <span style="color: blue">Me</span>.Context.Parameters.Item(<span style="color: maroon">"server"</span>), <span style="color: blue">Me</span>.Context.Parameters.Item(<span style="color: maroon">"user"</span>), <span style="color: blue">Me</span>.Context.Parameters.Item(<span style="color: maroon">"pwd"</span>))</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>FoundIt = <span style="color: blue">True</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">If</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">If</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Next</span> Node</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">If</span> <span style="color: blue">Not</span> FoundIt <span style="color: blue">Then</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Throw</span> <span style="color: blue">New</span> InstallException(<span style="color: maroon">"web.Config </span></span><span style="font-size: 9pt; color: maroon; font-family: 新宋体">文件没有包含<span>connString</span>连接字符串设置<span>"</span></span><span style="font-size: 9pt; font-family: 新宋体">)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">If</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>XmlDocument.Save(FileInfo.FullName)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Catch</span> ex <span style="color: blue">As</span> Exception</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Throw</span> ex</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">Try</span></span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">Sub</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: green">''' </span><span style="color: gray">&lt;summary&gt;</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: green">''' </span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">安装程序入口</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: green">''' </span><span style="color: gray">&lt;/summary&gt;</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: green">''' </span><span style="color: gray">&lt;param name="stateSaver"&gt;&lt;/param&gt;</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: green">''' </span><span style="color: gray">&lt;remarks&gt;&lt;/remarks&gt;</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">Public</span> <span style="color: blue">Overrides</span> <span style="color: blue">Sub</span> Install(<span style="color: blue">ByVal</span> stateSaver <span style="color: blue">As</span> _</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>System.Collections.IDictionary)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: blue">MyBase</span>.Install(stateSaver)</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">读取用户连接数据库信息</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp; </span><span>&nbsp;&nbsp;&nbsp;</span>ServerName = Trim(<span style="color: blue">Me</span>.Context.Parameters.Item(<span style="color: maroon">"server"</span>))</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>AdminName = Trim(<span style="color: blue">Me</span>.Context.Parameters.Item(<span style="color: maroon">"user"</span>))</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>AdminPwd = Trim(<span style="color: blue">Me</span>.Context.Parameters.Item(<span style="color: maroon">"pwd"</span>))</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">根据用户界面输入的信息建立数据库联接</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sqlConnection1 = <span style="color: blue">New</span> SqlClient.SqlConnection</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>sqlConnection1.ConnectionString = <span style="color: maroon">"User ID="</span> + AdminName + <span style="color: maroon">";Data Source = "</span> + ServerName + <span style="color: maroon">";Password="</span> + AdminPwd + <span style="color: maroon">";Initial Catalog=master"</span></span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">'sqlConnection1.Open()</span></span></p>
<p align="left"><span style="font-size: 9pt; color: green; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; color: green; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">添加数据库中的表</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>AddDBTable()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: green">'</span></span><span style="font-size: 9pt; color: green; font-family: 新宋体">修改<span>web.config</span>文件中的数据库连接串</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>WriteWebConfig()</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 9pt; font-family: 新宋体"><span>&nbsp;&nbsp;&nbsp; </span><span style="color: blue">End</span> <span style="color: blue">Sub</span></span></p>
<p align="left"><span style="font-size: 9pt; color: blue; font-family: 新宋体">End</span><span style="font-size: 9pt; font-family: 新宋体"> <span style="color: blue">Class</span></span></p>
<span style="font-size: 9pt; font-family: 新宋体"><span style="color: blue">
<p><span>6</span><span style="font-family: 宋体">、添加</span><span>SQL</span><span style="font-family: 宋体">脚本文件到类库中。</span></p>
<p><span><span>&nbsp;&nbsp; </span></span><span style="font-family: 宋体">右键点击类库名称――添加――现有项，选择</span><span>watertable.txt</span><span style="font-family: 宋体">文件。点击&#8220;确定&#8221;。</span></p>
<p><span><span>&nbsp;&nbsp; </span></span><span style="font-family: 宋体">右键选择刚刚添加的</span><span>watertable.txt</span><span style="font-family: 宋体">文件，选&#8220;属性&#8221;，把&#8220;生成操作&#8221;项内容修改为&#8220;嵌入的资源&#8221;。</span></p>
<p><span>&nbsp;</span></p>
<p><span>7</span><span style="font-family: 宋体">、生成类库的</span><span>DLL</span><span style="font-family: 宋体">文件。</span></p>
<p><span>&nbsp;</span></p>
<p><span>8</span><span style="font-family: 宋体">、右键安装项目名称――&#8220;视图&#8221;――&#8220;文件系统&#8221;，在打开的&#8220;文件系统窗口&#8221;，右键&#8220;</span><span>WEB</span><span style="font-family: 宋体">应用程序文件夹&#8221;――&#8220;添加&#8221;――项目输出，</span></p>
<p><span>&nbsp;</span></p>
<p><span style="font-family: 宋体">从&#8220;项目&#8221;下拉列表框中，选择类库为&#8220;主输出&#8221;，</span></p>
<p><span>&nbsp;</span></p>
<p><span style="font-family: 宋体">重复上步操作，选择网站为&#8220;内容文件&#8221;</span></p>
<p><span>&nbsp;</span></p>
<p><span>&nbsp;</span></p>
<p><span>9</span><span style="font-family: 宋体">、添加安装时用户要输入的数据库服务器名称、用户名、密码的用户界面。</span></p>
<p><span><span>&nbsp;&nbsp; </span></span><span style="font-family: 宋体">右键安装项目名称――视图――用户界面，在打开的安装界面中，右键&#8220;启动&#8221;，选择&#8220;添加对话框&#8221;，在弹出的窗口中，选择&#8220;文本框</span><span>A</span><span style="font-family: 宋体">&#8221;。</span></p>
<p><span style="font-family: 宋体">右键文本框</span><span>A</span><span style="font-family: 宋体">，选择&#8220;上移&#8221;，重复执行，直到在&#8220;安装地址&#8221;上。</span></p>
<p><span>&nbsp;</span></p>
<p><span>&nbsp;</span></p>
<p><span style="font-family: 宋体">右键&#8220;文本框</span><span>A</span><span style="font-family: 宋体">&#8221;――属性，进行如下修改。</span></p>
<p><span>Edit1lable1<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">数据库服务器</span><span>:</span></p>
<p><span>Edit1property<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>DBSERVERNAME</span></p>
<p><span>Edit1visible<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>true</span></p>
<p><span>&nbsp;</span></p>
<p><span>Edit2lable1<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">用户名</span><span>:</span></p>
<p><span>Edit2property<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>USERNAME</span></p>
<p><span>Edit2visible<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>true</span></p>
<p><span>&nbsp;</span></p>
<p><span>Edit3lable1<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体">用户名</span><span>:</span></p>
<p><span>Edit3property<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>PASSWORD</span></p>
<p><span>Edit3visible<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>true</span></p>
<p><span>&nbsp;</span></p>
<p><span>Edit4visible<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>false</span></p>
<p><span>&nbsp;</span></p>
<p><span>&nbsp;</span></p>
<p><span>10</span><span style="font-family: 宋体">、添加自定义操作</span></p>
<p><span>&nbsp;</span></p>
<p><span style="font-family: 宋体">在&#8220;解决方案资源管理器中&#8221;，右键安装项目名称――&#8220;视图&#8221;――&#8220;自定义操作&#8221;，在打开的自定义操作窗口，右键&#8220;安装&#8221;――&#8220;添加自定义操作&#8221;，在打开的&#8220;选择项目的项&#8221;，双击&#8220;</span><span>WEB</span><span style="font-family: 宋体">应用程序文件夹&#8221;――主输出来自</span><span>clslib(</span><span style="font-family: 宋体">活动</span><span>)</span><span style="font-family: 宋体">。</span></p>
<p><span>&nbsp;</span></p>
<p><span style="font-family: 宋体">右键&#8220;主输出来自</span><span>clslib(</span><span style="font-family: 宋体">活动</span><span>)</span><span style="font-family: 宋体">&#8221;――&#8220;属性窗口&#8221;，修改属性</span></p>
<p><span>Customactiondata </span><span style="font-family: 宋体">为</span></p>
<p><span><span>&nbsp;</span>/server=[DBSERVERNAME] /user=[USERNAME] /pwd=[PASSWORD]<span>&nbsp; </span>/targetdir="[TARGETDIR]\"</span></p>
<p><span style="font-family: 宋体">注意：每个变量之间一定要有一个空格做间隔，如果想得到安装文件在安装机器中的路径，一定要添加</span><span><span>&nbsp; </span>targetdir </span><span style="font-family: 宋体">变量。</span></p>
<p><span>&nbsp;</span></p>
<p><span>11</span><span style="font-family: 宋体">、添加系统必备</span></p>
<p><span style="font-family: 宋体">右键安装项目名称――属性――选择系统必备</span></p>
<p><span style="font-family: 宋体">在打开的系统必备窗口，选择</span> <span style="font-family: 宋体">&#8220;</span><span>.net framework 2.0<span style="font-family: 宋体"><span>&#8221;</span></span><span style="font-family: 宋体">――选择&#8220;从与我的应用程序相同路径下载系统必备&#8221;，点击&#8220;确定&#8221;</span></span></p>
<p><span>&nbsp;</span></p>
<p><span>12</span><span style="font-family: 宋体">、生成安装项目。</span></p>
<p><span style="font-family: 宋体">从菜单&#8220;生成&#8221;――&#8220;生成</span><span>websetup</span><span style="font-family: 宋体">&#8221;</span><span>,</span><span style="font-family: 宋体">生成安装项目。</span></p>
<p><span>&nbsp;</span></p>
<p><span>13</span><span style="font-family: 宋体">、安装项目界面</span></p>
<p><span style="font-family: 宋体">从&#8220;解决方案资源管理器&#8221;――安装项目，右键安装项目名称――安装。</span></p>
<p><span>&nbsp;</span></p>
<p><span style="font-family: 宋体">生成的数据库</span></p>
<p><span>&nbsp;</span></p>
<p><span style="font-family: 宋体">生成的网站</span></p>
<p><span>&nbsp;</span></p>
<p><span style="font-family: 宋体">修改后的</span><span>web.config</span></p>
<p><span style="font-family: 宋体">写在后面的话：</span></p>
<p><span style="font-family: 宋体">做完程序后，发现用</span><span>SQLSER</span><span style="font-family: 宋体">的恢复数据库方法比用</span><span>SQL</span><span style="font-family: 宋体">文件要好的多，也方便的多，就做了一个过程，代码如下：</span></p>
<p><span>&nbsp;</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">Private sub RestoreDB()</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">Dim strdir as string</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">Dim strSql as string</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">&#8216;</span><span style="font-size: 12pt; font-family: 宋体">得到安装程序路径</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">Strdir=me.context.parameters.item(&#8220;targetdir&#8221;)</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">Strsql="RESTORE DATABASE water FROM DISK = '" + strdir + "data.bak' " +</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " WITH MOVE 'water_data' TO '" + "c:\water.mdf', " +</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; " MOVE 'water_log' TO '" + "c:\water_log.ldf' "</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">Executesql(&#8220;master&#8221;,strsql)</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">&nbsp;</span></p>
<p align="left"><span style="font-size: 12pt; font-family: 宋体">End sub </span></p>
<p><span style="font-size: 12pt; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></p>
<p><span>&nbsp;</span></p>
<p><span style="font-family: 宋体">注意：</span><span>data.bak</span><span style="font-family: 宋体">是</span><span>sqlserver</span><span style="font-family: 宋体">备份数据库名，也可以没有后缀，如果没有后缀，在程序中也不要有，还有备份文件要和发布的网站文件放在一起，</span><span>water_data</span><span style="font-family: 宋体">、</span><span>water_log</span><span style="font-family: 宋体">是逻辑数据名，在</span><span>sqlserver</span><span style="font-family: 宋体">数据库中的备份恢复中都能查看到的，</span><span>TO </span><span style="font-family: 宋体">后面是把</span><span>*.mdf</span><span style="font-family: 宋体">和</span><span>*.ldf</span><span style="font-family: 宋体">文件复制到一个路径下，直接写死就可以了。</span></span></span></p>
<img src ="http://DesignPattern.cnblogs.comaggbug/1235326.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37541/" target="_blank">[新闻]FriendFeed介绍</a>]]></description></item><item><title>存储过程方法新解——老话重谈！</title><link>http://www.cnblogs.com/xumingming/archive/2008/07/04/1235310.html</link><dc:creator>Michael Xu</dc:creator><author>Michael Xu</author><pubDate>Fri, 04 Jul 2008 02:20:00 GMT</pubDate><guid>http://www.cnblogs.com/xumingming/archive/2008/07/04/1235310.html</guid><description><![CDATA[<strong>摘要</strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp; 存储过程的调用在B/S系统中用的很多。传统的调用方法不仅速度慢，而且代码会随着存储过程的增多不断膨胀，难以维护。新的方法在一定程度上解决了这些问题。 　<br />
<strong>关键词</strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ASP.NET；存储过程　 　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在使用.NET的过程中，数据库访问是一个很重要的部分，特别是在B/S系统的构建过程中，数据库操作几乎成为了一个必不可少的操作。调用存储过程实现数据库操作使很多程序员使用的方法，而且大多数的程序员都是能使用存储过程就使用存储过程，很少直接使用SQL语句，所以存储过程是很有用而且很重要的。 　　<br />
<strong>存储过程简介</strong> 　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单的说，存储过程是由一些SQL语句和控制语句组成的被封装起来的过程，它驻留在数据库中，可以被客户应用程序调用，也可以从另一个过程或触发器调用。它的参数可以被传递和返回。与应用程序中的函数过程类似，存储过程可以通过名字来调用，而且它们同样有输入参数和输出参数。<br />
&nbsp;　　根据返回值类型的不同，我们可以将存储过程分为三类：返回记录集的存储过程， 返回数值的存储过程（也可以称为标量存储过程），以及行为存储过程。顾名思义，返回记录集的存储过程的执行结果是一个记录集，典型的例子是从数据库中检索出符合某一个或几个条件的记录；返回数值的存储过程执行完以后返回一个值，例如在数据库中执行一个有返回值的函数或命令；最后，行为存储过程仅仅是用来实现数据库的某个功能，而没有返回值，例如在数据库中的更新和删除操作。 　<br />
<strong>使用存储过程的好处</strong> 　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相对于直接使用SQL语句，在应用程序中直接调用存储过程有以下好处： 　　<br />
(1)减少网络通信量。调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别，可是如果存储过程包含上百行SQL语句，那么其性能绝对比一条一条的调用SQL语句要高得多。 　<br />
(2)执行速度更快。有两个原因：首先，在存储过程创建的时候，数据库已经对其进行了一次解析和优化。其次，存储过程一旦执行，在内存中就会保留一份这个存储过程，这样下次再执行同样的存储过程时，可以从内存中直接调用。 　　<br />
(3)更强的适应性：由于存储过程对数据库的访问是通过存储过程来进行的，因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动，而这些改动不会对应用程序造成影响。 　　<br />
(4) 布式工作：应用程序和数据库的编码工作可以分别独立进行，而不会相互压制。 　　由以上的分析可以看到，在应用程序中使用存储过程是很有必要的。 　　<strong><br />
两种不同的存储过程调用方法</strong> 　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了突出新方法的优点，首先介绍一下在.NET中调用存储过程的&#8220;官方&#8221;方法。另外，本文的所有示例程序均工作于SqlServer数据库上，其它情况类似，以后不再一一说明。本文所有例子均采用C#语言。 　　<br />
要在应用程序中访问数据库，一般性的步骤是：首先声明一个数据库连接SqlConnection，然后声明一个数据库命令SqlCommand，用来执行SQL语句和存储过程。有了这两个对象后，就可以根据自己的需要采用不同的执行方式达到目的。需要补充的是，不要忘记在页面上添加如下的引用语句：using System.Data.SqlClient。 　　<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就执行存储过程来说，如果执行的是第一类存储过程，那么就要用一个DataAdapter将结果填充到一个DataSet中，然后就可以使用数据网格控件将结果呈现在页面上了；如果执行的是第二和第三种存储过程，则不需要此过程，只需要根据特定的返回判定操作是否成功完成即可。 　<br />
　(1)执行一个没有参数的存储过程的代码如下： <br />
<code>SqlConnection conn=new SqlConnection(&#8220;connectionString&#8221;);<br />
SqlDataAdapter da = new SqlDataAdapter(); <br />
da.SelectCommand = new SqlCommand(); <br />
da.SelectCommand.Connection = conn;<br />
da.SelectCommand.CommandText = "NameOfProcedure";<br />
da.SelectCommand.CommandType = CommandType.StoredProcedure;</code> <br />
　　然后只要选择适当的方式执行此处过程，用于不同的目的即可。 　　<br />
(2)执行一个有参数的存储过程的代码如下（我们可以将调用存储过程的函数声明为<br />
ExeProcedure(string inputdate)）： <br />
<code>SqlConnection conn=new SqlConnection(&#8220;connectionString&#8221;); <br />
SqlDataAdapter da = new SqlDataAdapter(); <br />
da.SelectCommand = new SqlCommand(); <br />
da.SelectCommand.Connection = conn; <br />
da.SelectCommand.CommandText = "NameOfProcedure"; <br />
da.SelectCommand.CommandType = CommandType.StoredProcedure; <br />
（以上代码相同，以下为要添加的代码） <br />
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);<br />
&nbsp;param.Direction = ParameterDirection.Input; <br />
param.Value = Convert.ToDateTime(inputdate); <br />
da.SelectCommand.Parameters.Add(param);</code> 　　<br />
这样就添加了一个输入参数。若需要添加输出参数：<br />
&nbsp;<code>param = new SqlParameter("@ParameterName", SqlDbType.DateTime); <br />
param.Direction = ParameterDirection.Output; <br />
param.Value = Convert.ToDateTime(inputdate);<br />
&nbsp;da.SelectCommand.Parameters.Add(param);</code> 　　<br />
若要获得参储过程的返回值： <br />
<code>param = new SqlParameter("@ParameterName", SqlDbType.DateTime);<br />
&nbsp;param.Direction = ParameterDirection.ReturnValue; <br />
param.Value = Convert.ToDateTime(inputdate); <br />
da.SelectCommand.Parameters.Add(param);</code> <br />
&nbsp;　　从上面的代码我们可以看出，当存储过程比较多或者存储过程的参数比较多时，这种方法会大大影响开发的速度；另外一方面，如果项目比较大，那么这些用于数据库逻辑的函数在以后的维护中也是一个很大的负担。那么，有没有一种改进的方法可以解决这个问题呢？想到在执行没有参数的存储过程时只需要传入一个存储过程的名字就可以调用相应的存储过程，而且在SqlServer数据库中我们可以直接在查询分析器中敲入&#8220;存储过程名（参数列表）&#8221;样的字符串就可以执行存储过程，那么，是否可以把这种思想应用到应用程序中呢？ 　　于是在编译器中键入相应代码。这些代码是在调用不带参数的存储过程的代码的基础上改的。具体代码如下： <code>SqlConnection conn=new SqlConnection(&#8220;connectionString&#8221;); <br />
SqlDataAdapter da = new SqlDataAdapter(); <br />
da.SelectCommand = new SqlCommand(); <br />
da.SelectCommand.Connection = conn; <br />
da.SelectCommand.CommandText = "NameOfProcedure（&#8217;para1&#8217;,&#8217;para2&#8217;,para3）"; da.SelectCommand.CommandType = CommandType.StoredProcedure;</code> 　<br />
&nbsp;&nbsp;&nbsp; 　为了使代码更具有代表性，要调用的存储过程的第一个和第二个参数都为字符串类型，第三个参数为整型。执行以后发现，完全可以达到预期的效果！ 　　<br />
<strong>两种调用方法的比较</strong> <br />
　　&nbsp; 通过比较我们可以看到，第二种方法具有一个很明显的优点，那就是可以提高开发速度，节省开发时间，而且代码容易维护，在一定程度上也减少了系统大小。但是，由于对存储过程参数的处理比较笼统，如果要获取输出参数或者得到存储过程的返回值，这种方法就不能满足需要了。虽然如此，但是，这种方法毕竟可以让开发人员少些很大一部分的代码。如果不需要获取输出参数和返回值，那么几乎可以做到&#8220;一劳永逸&#8221;。因此在实际的程序开发中，这种方法还是具有一定的实用价值的。&nbsp;
<img src ="http://DesignPattern.cnblogs.comaggbug/1235310.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37540/" target="_blank">[新闻]微软在台北发布新色鼠标产品</a>]]></description></item><item><title>精妙SQL语句集合(收集) </title><link>http://www.cnblogs.com/xumingming/archive/2008/07/03/1234434.html</link><dc:creator>徐明明</dc:creator><author>徐明明</author><pubDate>Wed, 02 Jul 2008 23:33:00 GMT</pubDate><guid>http://www.cnblogs.com/xumingming/archive/2008/07/03/1234434.html</guid><description><![CDATA[<div class="postTitle">下列语句部分是Mssql语句，不可以在access中使用。<br />
<br />
SQL分类：&nbsp;<br />
DDL—数据定义语言(Create，Alter，Drop，DECLARE)&nbsp;<br />
DML—数据操纵语言(Select，Delete，Update，Insert)&nbsp;<br />
DCL—数据控制语言(GRANT，REVOKE，COMMIT，ROLLBACK)<br />
<br />
首先,简要介绍基础语句：<br />
1、说明：创建数据库<br />
Create&nbsp;DATABASE&nbsp;database-name&nbsp;<br />
2、说明：删除数据库<br />
drop&nbsp;database&nbsp;dbname<br />
3、说明：备份sql&nbsp;server<br />
---&nbsp;创建&nbsp;备份数据的&nbsp;device<br />
USE&nbsp;master<br />
EXEC&nbsp;sp_addumpdevice&nbsp;'disk',&nbsp;'testBack',&nbsp;'c:\mssql7backup\MyNwind_1.dat'<br />
---&nbsp;开始&nbsp;备份<br />
BACKUP&nbsp;DATABASE&nbsp;pubs&nbsp;TO&nbsp;testBack&nbsp;<br />
4、说明：创建新表<br />
create&nbsp;table&nbsp;tabname(col1&nbsp;type1&nbsp;[not&nbsp;null]&nbsp;[primary&nbsp;key],col2&nbsp;type2&nbsp;[not&nbsp;null],..)<br />
根据已有的表创建新表：&nbsp;<br />
A：create&nbsp;table&nbsp;tab_new&nbsp;like&nbsp;tab_old&nbsp;(使用旧表创建新表)<br />
B：create&nbsp;table&nbsp;tab_new&nbsp;as&nbsp;select&nbsp;col1,col2&#8230;&nbsp;from&nbsp;tab_old&nbsp;definition&nbsp;only<br />
5、说明：删除新表drop&nbsp;table&nbsp;tabname&nbsp;<br />
6、说明：增加一个列<br />
Alter&nbsp;table&nbsp;tabname&nbsp;add&nbsp;column&nbsp;col&nbsp;type<br />
注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。<br />
7、说明：添加主键：&nbsp;Alter&nbsp;table&nbsp;tabname&nbsp;add&nbsp;primary&nbsp;key(col)&nbsp;<br />
说明：删除主键：&nbsp;Alter&nbsp;table&nbsp;tabname&nbsp;drop&nbsp;primary&nbsp;key(col)&nbsp;<br />
8、说明：创建索引：create&nbsp;[unique]&nbsp;index&nbsp;idxname&nbsp;on&nbsp;tabname(col&#8230;.)&nbsp;<br />
删除索引：drop&nbsp;index&nbsp;idxname<br />
注：索引是不可更改的，想更改必须删除重新建。<br />
9、说明：创建视图：create&nbsp;view&nbsp;viewname&nbsp;as&nbsp;select&nbsp;statement&nbsp;<br />
删除视图：drop&nbsp;view&nbsp;viewname<br />
10、说明：几个简单的基本的sql语句<br />
选择：select&nbsp;*&nbsp;from&nbsp;table1&nbsp;where&nbsp;范围<br />
插入：insert&nbsp;into&nbsp;table1(field1,field2)&nbsp;values(value1,value2)<br />
删除：delete&nbsp;from&nbsp;table1&nbsp;where&nbsp;范围<br />
更新：update&nbsp;table1&nbsp;set&nbsp;field1=value1&nbsp;where&nbsp;范围<br />
查找：select&nbsp;*&nbsp;from&nbsp;table1&nbsp;where&nbsp;field1&nbsp;like&nbsp;&#8217;%value1%&#8217;&nbsp;---like的语法很精妙，查资料!<br />
排序：select&nbsp;*&nbsp;from&nbsp;table1&nbsp;order&nbsp;by&nbsp;field1,field2&nbsp;[desc]<br />
总数：select&nbsp;count&nbsp;*&nbsp;as&nbsp;totalcount&nbsp;from&nbsp;table1<br />
求和：select&nbsp;sum(field1)&nbsp;as&nbsp;sumvalue&nbsp;from&nbsp;table1<br />
平均：select&nbsp;avg(field1)&nbsp;as&nbsp;avgvalue&nbsp;from&nbsp;table1<br />
最大：select&nbsp;max(field1)&nbsp;as&nbsp;maxvalue&nbsp;from&nbsp;table1<br />
最小：select&nbsp;min(field1)&nbsp;as&nbsp;minvalue&nbsp;from&nbsp;table1<br />
11、说明：几个高级查询运算词<br />
A：&nbsp;UNION&nbsp;运算符&nbsp;<br />
UNION&nbsp;运算符通过组合其他两个结果表（例如&nbsp;TABLE1&nbsp;和&nbsp;TABLE2）并消去表中任何重复行而派生出一个结果表。当&nbsp;ALL&nbsp;随&nbsp;UNION&nbsp;一起使用时（即&nbsp;UNION&nbsp;ALL），不消除重复行。两种情况下，派生表的每一行不是来自&nbsp;TABLE1&nbsp;就是来自&nbsp;TABLE2。&nbsp;<br />
B：&nbsp;EXCEPT&nbsp;运算符&nbsp;<br />
EXCEPT&nbsp;运算符通过包括所有在&nbsp;TABLE1&nbsp;中但不在&nbsp;TABLE2&nbsp;中的行并消除所有重复行而派生出一个结果表。当&nbsp;ALL&nbsp;随&nbsp;EXCEPT&nbsp;一起使用时&nbsp;(EXCEPT&nbsp;ALL)，不消除重复行。&nbsp;<br />
C：&nbsp;INTERSECT&nbsp;运算符<br />
INTERSECT&nbsp;运算符通过只包括&nbsp;TABLE1&nbsp;和&nbsp;TABLE2&nbsp;中都有的行并消除所有重复行而派生出一个结果表。当&nbsp;ALL&nbsp;随&nbsp;INTERSECT&nbsp;一起使用时&nbsp;(INTERSECT&nbsp;ALL)，不消除重复行。&nbsp;<br />
注：使用运算词的几个查询结果行必须是一致的。&nbsp;<br />
12、说明：使用外连接&nbsp;<br />
A、left&nbsp;outer&nbsp;join：&nbsp;<br />
左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。&nbsp;<br />
SQL:&nbsp;select&nbsp;a.a,&nbsp;a.b,&nbsp;a.c,&nbsp;b.c,&nbsp;b.d,&nbsp;b.f&nbsp;from&nbsp;a&nbsp;LEFT&nbsp;OUT&nbsp;JOIN&nbsp;b&nbsp;ON&nbsp;a.a&nbsp;=&nbsp;b.c<br />
B：right&nbsp;outer&nbsp;join:&nbsp;<br />
右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。&nbsp;<br />
C：full&nbsp;outer&nbsp;join：&nbsp;<br />
全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。<br />
<br />
其次，大家来看一些不错的sql语句<br />
1、说明：复制表(只复制结构,源表名：a&nbsp;新表名：b)&nbsp;(Access可用)<br />
法一：select&nbsp;*&nbsp;into&nbsp;b&nbsp;from&nbsp;a&nbsp;where&nbsp;1&lt;&gt;1<br />
法二：select&nbsp;top&nbsp;0&nbsp;*&nbsp;into&nbsp;b&nbsp;from&nbsp;a<br />
<br />
2、说明：拷贝表(拷贝数据,源表名：a&nbsp;目标表名：b)&nbsp;(Access可用)<br />
insert&nbsp;into&nbsp;b(a,&nbsp;b,&nbsp;c)&nbsp;select&nbsp;d,e,f&nbsp;from&nbsp;b;<br />
<br />
3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径)&nbsp;(Access可用)<br />
insert&nbsp;into&nbsp;b(a,&nbsp;b,&nbsp;c)&nbsp;select&nbsp;d,e,f&nbsp;from&nbsp;b&nbsp;in&nbsp;&#8216;具体数据库&#8217;&nbsp;where&nbsp;条件<br />
例子：..from&nbsp;b&nbsp;in&nbsp;'"&amp;Server.MapPath(".")&amp;"\data.mdb"&nbsp;&amp;"'&nbsp;where..<br />
<br />
4、说明：子查询(表名1：a&nbsp;表名2：b)<br />
select&nbsp;a,b,c&nbsp;from&nbsp;a&nbsp;where&nbsp;a&nbsp;IN&nbsp;(select&nbsp;d&nbsp;from&nbsp;b&nbsp;)&nbsp;或者:&nbsp;select&nbsp;a,b,c&nbsp;from&nbsp;a&nbsp;where&nbsp;a&nbsp;IN&nbsp;(1,2,3)<br />
<br />
5、说明：显示文章、提交人和最后回复时间<br />
select&nbsp;a.title,a.username,b.adddate&nbsp;from&nbsp;table&nbsp;a,(select&nbsp;max(adddate)&nbsp;adddate&nbsp;from&nbsp;table&nbsp;where&nbsp;table.title=a.title)&nbsp;b<br />
<br />
6、说明：外连接查询(表名1：a&nbsp;表名2：b)<br />
select&nbsp;a.a,&nbsp;a.b,&nbsp;a.c,&nbsp;b.c,&nbsp;b.d,&nbsp;b.f&nbsp;from&nbsp;a&nbsp;LEFT&nbsp;OUT&nbsp;JOIN&nbsp;b&nbsp;ON&nbsp;a.a&nbsp;=&nbsp;b.c<br />
<br />
7、说明：在线视图查询(表名1：a&nbsp;)<br />
select&nbsp;*&nbsp;from&nbsp;(Select&nbsp;a,b,c&nbsp;FROM&nbsp;a)&nbsp;T&nbsp;where&nbsp;t.a&nbsp;&gt;&nbsp;1;<br />
<br />
8、说明：between的用法,between限制查询数据范围时包括了边界值,not&nbsp;between不包括<br />
select&nbsp;*&nbsp;from&nbsp;table1&nbsp;where&nbsp;time&nbsp;between&nbsp;time1&nbsp;and&nbsp;time2<br />
select&nbsp;a,b,c,&nbsp;from&nbsp;table1&nbsp;where&nbsp;a&nbsp;not&nbsp;between&nbsp;数值1&nbsp;and&nbsp;数值2<br />
<br />
9、说明：in&nbsp;的使用方法<br />
select&nbsp;*&nbsp;from&nbsp;table1&nbsp;where&nbsp;a&nbsp;[not]&nbsp;in&nbsp;(&#8216;值1&#8217;,&#8217;值2&#8217;,&#8217;值4&#8217;,&#8217;值6&#8217;)<br />
<br />
10、说明：两张关联表，删除主表中已经在副表中没有的信息&nbsp;<br />
delete&nbsp;from&nbsp;table1&nbsp;where&nbsp;not&nbsp;exists&nbsp;(&nbsp;select&nbsp;*&nbsp;from&nbsp;table2&nbsp;where&nbsp;table1.field1=table2.field1&nbsp;)<br />
<br />
11、说明：四表联查问题：<br />
select&nbsp;*&nbsp;from&nbsp;a&nbsp;left&nbsp;inner&nbsp;join&nbsp;b&nbsp;on&nbsp;a.a=b.b&nbsp;right&nbsp;inner&nbsp;join&nbsp;c&nbsp;on&nbsp;a.a=c.c&nbsp;inner&nbsp;join&nbsp;d&nbsp;on&nbsp;a.a=d.d&nbsp;where&nbsp;.....<br />
<br />
12、说明：日程安排提前五分钟提醒&nbsp;<br />
SQL:&nbsp;select&nbsp;*&nbsp;from&nbsp;日程安排&nbsp;where&nbsp;datediff('minute',f开始时间,getdate())&gt;5<br />
<br />
13、说明：一条sql&nbsp;语句搞定数据库分页<br />
select&nbsp;top&nbsp;10&nbsp;b.*&nbsp;from&nbsp;(select&nbsp;top&nbsp;20&nbsp;主键字段,排序字段&nbsp;from&nbsp;表名&nbsp;order&nbsp;by&nbsp;排序字段&nbsp;desc)&nbsp;a,表名&nbsp;b&nbsp;where&nbsp;b.主键字段&nbsp;=&nbsp;a.主键字段&nbsp;order&nbsp;by&nbsp;a.排序字段<br />
<br />
14、说明：前10条记录<br />
select&nbsp;top&nbsp;10&nbsp;*&nbsp;form&nbsp;table1&nbsp;where&nbsp;范围<br />
<br />
15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)<br />
select&nbsp;a,b,c&nbsp;from&nbsp;tablename&nbsp;ta&nbsp;where&nbsp;a=(select&nbsp;max(a)&nbsp;from&nbsp;tablename&nbsp;tb&nbsp;where&nbsp;tb.b=ta.b)<br />
<br />
16、说明：包括所有在&nbsp;TableA&nbsp;中但不在&nbsp;TableB和TableC&nbsp;中的行并消除所有重复行而派生出一个结果表<br />
(select&nbsp;a&nbsp;from&nbsp;tableA&nbsp;)&nbsp;except&nbsp;(select&nbsp;a&nbsp;from&nbsp;tableB)&nbsp;except&nbsp;(select&nbsp;a&nbsp;from&nbsp;tableC)<br />
<br />
17、说明：随机取出10条数据<br />
select&nbsp;top&nbsp;10&nbsp;*&nbsp;from&nbsp;tablename&nbsp;order&nbsp;by&nbsp;newid()<br />
<br />
18、说明：随机选择记录<br />
select&nbsp;newid()<br />
<br />
19、说明：删除重复记录<br />
Delete&nbsp;from&nbsp;tablename&nbsp;where&nbsp;id&nbsp;not&nbsp;in&nbsp;(select&nbsp;max(id)&nbsp;from&nbsp;tablename&nbsp;group&nbsp;by&nbsp;col1,col2,...)<br />
<br />
20、说明：列出数据库里所有的表名<br />
select&nbsp;name&nbsp;from&nbsp;sysobjects&nbsp;where&nbsp;type='U'&nbsp;<br />
<br />
21、说明：列出表里的所有的<br />
select&nbsp;name&nbsp;from&nbsp;syscolumns&nbsp;where&nbsp;id=object_id('TableName')<br />
<br />
22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似select&nbsp;中的case。<br />
select&nbsp;type,sum(case&nbsp;vender&nbsp;when&nbsp;'A'&nbsp;then&nbsp;pcs&nbsp;else&nbsp;0&nbsp;end),sum(case&nbsp;vender&nbsp;when&nbsp;'C'&nbsp;then&nbsp;pcs&nbsp;else&nbsp;0&nbsp;end),sum(case&nbsp;vender&nbsp;when&nbsp;'B'&nbsp;then&nbsp;pcs&nbsp;else&nbsp;0&nbsp;end)&nbsp;FROM&nbsp;tablename&nbsp;group&nbsp;by&nbsp;type<br />
显示结果：<br />
type&nbsp;vender&nbsp;pcs<br />
电脑&nbsp;A&nbsp;1<br />
电脑&nbsp;A&nbsp;1<br />
光盘&nbsp;B&nbsp;2<br />
光盘&nbsp;A&nbsp;2<br />
手机&nbsp;B&nbsp;3<br />
手机&nbsp;C&nbsp;3<br />
<br />
23、说明：初始化表table1<br />
TRUNCATE&nbsp;TABLE&nbsp;table1<br />
<br />
24、说明：选择从10到15的记录<br />
select&nbsp;top&nbsp;5&nbsp;*&nbsp;from&nbsp;(select&nbsp;top&nbsp;15&nbsp;*&nbsp;from&nbsp;table&nbsp;order&nbsp;by&nbsp;id&nbsp;asc)&nbsp;table_别名&nbsp;order&nbsp;by&nbsp;id&nbsp;desc<br />
　　<br />
随机选择数据库记录的方法（使用Randomize函数，通过SQL语句实现）<br />
　　对存储在数据库中的数据来说，随机数特性能给出上面的效果，但它们可能太慢了些。你不能要求ASP&#8220;找个随机数&#8221;然后打印出来。实际上常见的解决方案是建立如下所示的循环：&nbsp;<br />
Randomize&nbsp;<br />
RNumber&nbsp;=&nbsp;Int(Rnd*499)&nbsp;+1&nbsp;<br />
　<br />
While&nbsp;Not&nbsp;objRec.EOF&nbsp;<br />
If&nbsp;objRec("ID")&nbsp;=&nbsp;RNumber&nbsp;THEN&nbsp;<br />
...&nbsp;这里是执行脚本&nbsp;...&nbsp;<br />
end&nbsp;if&nbsp;<br />
objRec.MoveNext&nbsp;<br />
Wend&nbsp;<br />
　<br />
　　这很容易理解。首先，你取出1到500范围之内的一个随机数（假设500就是数据库内记录的总数）。然后，你遍历每一记录来测试ID&nbsp;的值、检查其是否匹配RNumber。满足条件的话就执行由THEN&nbsp;关键字开始的那一块代码。假如你的RNumber&nbsp;等于495，那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些，但相比更为稳固的企业解决方案这还是个小型数据库了，后者通常在一个数据库内就包含了成千上万条记录。这时候不就死定了？&nbsp;<br />
　　采用SQL，你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset，如下所示：&nbsp;<br />
Randomize&nbsp;<br />
RNumber&nbsp;=&nbsp;Int(Rnd*499)&nbsp;+&nbsp;1&nbsp;<br />
　<br />
SQL&nbsp;=&nbsp;"Select&nbsp;*&nbsp;FROM&nbsp;Customers&nbsp;Where&nbsp;ID&nbsp;=&nbsp;"&nbsp;&amp;&nbsp;RNumber&nbsp;<br />
　<br />
set&nbsp;objRec&nbsp;=&nbsp;ObjConn.Execute(SQL)&nbsp;<br />
Response.WriteRNumber&nbsp;&amp;&nbsp;"&nbsp;=&nbsp;"&nbsp;&amp;&nbsp;objRec("ID")&nbsp;&amp;&nbsp;"&nbsp;"&nbsp;&amp;&nbsp;objRec("c_email")&nbsp;<br />
　<br />
　　不必写出RNumber&nbsp;和ID，你只需要检查匹配情况即可。只要你对以上代码的工作满意，你自可按需操作&#8220;随机&#8221;记录。Recordset没有包含其他内容，因此你很快就能找到你需要的记录这样就大大降低了处理时间。&nbsp;<br />
再谈随机数&nbsp;<br />
　　现在你下定决心要榨干Random&nbsp;函数的最后一滴油，那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random&nbsp;示例扩展一下就可以用SQL应对上面两种情况了。&nbsp;<br />
　　为了取出几条随机选择的记录并存放在同一recordset内，你可以存储三个随机数，然后查询数据库获得匹配这些数字的记录：&nbsp;<br />
SQL&nbsp;=&nbsp;"Select&nbsp;*&nbsp;FROM&nbsp;Customers&nbsp;Where&nbsp;ID&nbsp;=&nbsp;"&nbsp;&amp;&nbsp;RNumber&nbsp;&amp;&nbsp;"&nbsp;or&nbsp;ID&nbsp;=&nbsp;"&nbsp;&amp;&nbsp;RNumber2&nbsp;&amp;&nbsp;"&nbsp;or&nbsp;ID&nbsp;=&nbsp;"&nbsp;&amp;&nbsp;RNumber3&nbsp;<br />
　<br />
　　假如你想选出10条记录（也许是每次页面装载时的10条链接的列表），你可以用BETWEEN&nbsp;或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成，但是&nbsp;Select&nbsp;语句只显示一种可能（这里的ID&nbsp;是自动生成的号码）：&nbsp;<br />
SQL&nbsp;=&nbsp;"Select&nbsp;*&nbsp;FROM&nbsp;Customers&nbsp;Where&nbsp;ID&nbsp;BETWEEN&nbsp;"&nbsp;&amp;&nbsp;RNumber&nbsp;&amp;&nbsp;"&nbsp;AND&nbsp;"&nbsp;&amp;&nbsp;RNumber&nbsp;&amp;&nbsp;"+&nbsp;9"&nbsp;<br />
</div>
 <img src ="http://DesignPattern.cnblogs.comaggbug/1234434.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37539/" target="_blank">[新闻]Hitwise:雅虎流量来自Google搜索比来自雅虎搜索的还多</a>]]></description></item><item><title>轻松搞定统计图表(利用OWC) </title><link>http://www.cnblogs.com/xumingming/archive/2008/07/02/1234311.html</link><dc:creator>徐明明</dc:creator><author>徐明明</author><pubDate>Wed, 02 Jul 2008 13:58:00 GMT</pubDate><guid>http://www.cnblogs.com/xumingming/archive/2008/07/02/1234311.html</guid><description><![CDATA[<p><font face="Verdana">&nbsp;轻松搞定统计图表(利用OWC) <br />
利用OWC轻松搞定统计图表 </font></p>
<p><font face="Verdana">本文讲述如何绘制条形图，折线图，柱形图，面积图等常见图形。</font></p>
<p><font face="Verdana">效果图：</font></p>
<font face="Verdana">
<p><br />
手把手教程：</p>
<p>原理：OWC是Office&nbsp;&nbsp; Web&nbsp;&nbsp; Compent的缩写，即Microsoft的Office&nbsp;&nbsp; Web组件，它为在Web中绘制图形提供了灵活的同时也是最基本的机制。在一个intranet环境中，如果可以假设客户机上存在特定的浏览器和一些功能强大的软件（如IE6和Office&nbsp;&nbsp; 2000/XP/2003），那么就有能力利用Office&nbsp;&nbsp; Web组件提供一个交互式图形开发环境。这种模式下，客户端工作站将在整个任务中分担很大的比重。理论上说Excel能做的图都可以通过OWC画。</p>
<p>第一步：<br />
右键点击网站根目录引用。如图所示：</p>
<p><br />
第二步：<br />
点击&#8220;添加引用&#8221;后弹出一个窗口，添加OWC的引用。如图所示：</p>
<p>点&#8220;确定&#8221;。</p>
<p>第三步：<br />
代码中引用Microsoft.Office.Interop.Owc11。</p>
<p>全部代码<br />
后台代码：<br />
using System;<br />
using System.Data;<br />
using System.Configuration;<br />
using System.Web;<br />
using System.Web.Security;<br />
using System.Web.UI;<br />
using System.Web.UI.WebControls;<br />
using System.Web.UI.WebControls.WebParts;<br />
using System.Web.UI.HtmlControls;</p>
<p>using System.Data.SqlClient;&nbsp;&nbsp; //添加数据操作引用<br />
using Microsoft.Office.Interop.Owc11;//添加Office组件引用</p>
<p>public partial class OWCdrawing : System.Web.UI.Page<br />
{<br />
&nbsp; protected void Page_Load(object sender, EventArgs e)<br />
&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //连接数据库并获取特定字符串<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strSeriesName = "图例1";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string ConnectString = "Server=(local);DataBase=web;Uid=sa;Pwd=sa";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string Sql = "SELECT month,Allcount FROM Chart";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlConnection myConn = new SqlConnection(ConnectString);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myConn.Open();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SqlDataAdapter Da = new SqlDataAdapter(Sql, myConn);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DataSet ds = new DataSet();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Da.Fill(ds);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //存放月<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] MonNum = new string[12];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //存放数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] MonCount = new string[12];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //为数组赋值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; ds.Tables[0].Rows.Count; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MonNum = ds.Tables[0].Rows[0].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MonCount = ds.Tables[0].Rows[1].ToString();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //为x轴指定特定字符串，以便显示数据<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strXdata = String.Empty;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (string strData in MonNum)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strXdata += strData + "\t";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strYdata = String.Empty;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //为y轴指定特定的字符串，以便与x轴相对应<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach (string strValue in MonCount)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strYdata += strValue + "\t";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //创建ChartSpace对象来放置图表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ChartSpace laySpace = new ChartSpaceClass();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //在ChartSpace对象中添加图表<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ChChart InsertChart = laySpace.Charts.Add(0);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //指定绘制图表的类型。类型可以通过OWC.ChartChartTypeEnum枚举值得到<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //InsertChart.Type = ChartChartTypeEnum.chChartTypeLine;//折线图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //InsertChart.Type = ChartChartTypeEnum.chChartTypeArea;//面积图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //InsertChart.Type = ChartChartTypeEnum.chChartTypeBarClustered;//条形图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered;//柱形图</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //指定图表是否需要图例标注<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.HasLegend = false;</p>
<p>&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.HasTitle = true;//为图表添加标题<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.Title.Caption = "2006年清清月儿每个月花销流水账";//标题名称</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //为x,y轴添加图示说明<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.Axes[0].HasTitle = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.Axes[0].Title.Caption = "";//月份<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.Axes[1].HasTitle = true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.Axes[1].Scaling.SplitMinimum = 200;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.Axes[1].Title.Caption = "数量";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加一个series系列<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.SeriesCollection.Add(0);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //给定series系列的名字<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimSeriesNames, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, strSeriesName);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //给定分类<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, +(int)ChartSpecialDataSourcesEnum.chDataLiteral, strXdata);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //给定值<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InsertChart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, strYdata);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输出文件.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strAbsolutePath = (Server.MapPath(".")) + "\\ShowData.gif";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; laySpace.ExportPicture(strAbsolutePath, "GIF", 400, 250);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //创建GIF文件的相对路径.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strRelativePath = "./ShowData.gif";</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把图片添加到placeholder中，并在页面上显示<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string strImageTag = "&lt;IMG SRC='" + strRelativePath + "'/&gt;";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.PlaceHolder1.Controls.Add(new LiteralControl(strImageTag));<br />
&nbsp; }<br />
}</p>
<p><br />
前台代码：<br />
&lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="OWCdrawing.aspx.cs" Inherits="OWCdrawing" %&gt;</p>
<p>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</p>
<p>&lt;html xmlns="http://www.w3.org/1999/xhtml" &gt;<br />
&lt;head runat="server"&gt;<br />
&nbsp; &lt;title&gt;清清月儿http://blog.csdn.net/21aspnet&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&nbsp; &lt;form id="form1" runat="server"&gt;<br />
&nbsp; &lt;div style="text-align: left"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table style="width: 600px"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan="3" style="height: 20px"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;strong&gt;怎么样在ASP.NET2.0中使用OWC组件画图&lt;/strong&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td colspan="3" rowspan="2" style="height: 21px"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;asp:PlaceHolder ID="PlaceHolder1" runat="server"&gt;&lt;/asp:PlaceHolder&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;<br />
&nbsp; <br />
&nbsp; &lt;/div&gt;<br />
&nbsp; &lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p><br />
数据库SQL脚本：<br />
USE [web]<br />
GO<br />
/****** 对象:&nbsp;&nbsp; Table [dbo].[Chart]&nbsp;&nbsp; 脚本日期: 03/27/2007 22:26:00 ******/<br />
SET ANSI_NULLS ON<br />
GO<br />
SET QUOTED_IDENTIFIER ON<br />
GO<br />
CREATE TABLE [dbo].[Chart](<br />
[id] [int] IDENTITY(1,1) NOT NULL,<br />
[month] [smallint] NULL,<br />
[Allcount] [int] NULL<br />
) ON [PRIMARY]</p>
<p><br />
在数据库建好表以后要自己手动假想有12条数据，手动添加，最终结果类似下图：</p>
<p><br />
后台程序说明：<br />
最关键就是InsertChart.Type = ChartChartTypeEnum.chChartTypeColumnClustered;</p>
<p>你可以在ChartChartTypeEnum后点出其他方法。如图所示：</p>
<p><br />
下面列出的是其他类型图：</p>
<p>折线图：</p>
<p>&nbsp;</p>
<p><br />
面积图：</p>
<p><br />
条形图：</p>
<p>&nbsp;</p>
<p>OWC什么图形都可以画，还能画立体的，请大家自己尝试。</p>
<p>可以参考OWC手册，具体位置：<br />
C:\Program Files\Common Files\Microsoft Shared\Web Components\11\2052\OWCVBA11.CHM <br />
&nbsp;</font></p>
<img src ="http://DesignPattern.cnblogs.comaggbug/1234311.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37537/" target="_blank">[新闻]YouTube需提交用户信息 网民隐私或遭威胁</a>]]></description></item><item><title>水晶报表的简单实用(.NET2005)</title><link>http://www.cnblogs.com/xumingming/archive/2008/07/02/1234305.html</link><dc:creator>徐明明</dc:creator><author>徐明明</author><pubDate>Wed, 02 Jul 2008 13:47:00 GMT</pubDate><guid>http://www.cnblogs.com/xumingming/archive/2008/07/02/1234305.html</guid><description><![CDATA[<p>&nbsp;&nbsp;<br />
<br />
5)右击"解决方案管理器",在弹出的菜单中选择"添加"-&gt;"添加新项"-&gt;Crystal报表(或Crystal Report,他们的后缀名是：.rpt)<br />
6)在&#8220;Crystal Report库&#8221;中选择&#8220;作为空白报表&#8221;单选按钮，最后点确定，这时会出现水晶报表设计器<br />
7)右击报表中的&#8220;详细资料区&#8221;选择&#8220;数据库&#8221;-〉数据库专家，之后点击左边的&#8220;创建新连接&#8221;<br />
选Access/Excel(DAO)(注: 这里用的是Access数据库,大家可以自己调整),在弹出的窗体中选你的数据库.之后点完成.<br />
8)这时左边窗体会出现拟数据库中的表,选择你要在报表中用的表,移动到右边.点确定.<br />
9)这时从右边可以看到多了一个&#8220;字段资源管理器&#8221;里边有你刚加的一个表及他的所有字段，拖动字段名　到详细资料区，字段名将会自动出现在&#8220;页眉&#8221;区，如果你想修改头部文字，则可以右击&#8220;页眉&#8221;区中<br />
　的文字，选择&#8220;编辑文本对象&#8221;选项并进行编辑。<br />
10)到此 .rpt文件　基本完成。<br />
<br />
回到前面的Form1窗体，拖放一个CrystalReportViewer控件到叶面中去。<br />
<br />
导入连接数据库的包：using System.Data.OleDb;<br />
<br />
在按钮的单击事件里写以下代码：<br />
<br />
try<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //连接数据库，得到结果集<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=finance.mdb");<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; string sql = "select * from bank";<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; OleDbDataAdapter da = new OleDbDataAdapter(sql, con);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DataSet ds = new DataSet();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; da.Fill(ds);<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //.rpt对象<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CrystalReport1 cr = new CrystalReport1();<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //利用结果集封装<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cr.SetDataSource(ds);<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //邦定到控件<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.crystalReportViewer1.ReportSource = cr;<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
&nbsp; &nbsp; &nbsp; &nbsp; catch (Exception es)<br />
&nbsp; &nbsp; &nbsp; &nbsp; {<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //有可能发生异常<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; es.ToString();<br />
&nbsp; &nbsp; &nbsp; &nbsp; }<br />
<br />
<br />
希望以上可以对大家有所帮助吧 也不知道对不对 呵呵！谁有更好的欢迎通知我声，谢谢！</p>
<img src ="http://DesignPattern.cnblogs.comaggbug/1234305.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37535/" target="_blank">[新闻]纽约用户提前7天排队购iPhone</a>]]></description></item><item><title>几种适合开发用的在线编辑器-推荐及下载</title><link>http://www.cnblogs.com/xumingming/archive/2008/07/02/1234175.html</link><dc:creator>徐明明</dc:creator><author>徐明明</author><pubDate>Wed, 02 Jul 2008 09:22:00 GMT</pubDate><guid>http://www.cnblogs.com/xumingming/archive/2008/07/02/1234175.html</guid><description><![CDATA[<div class="CommentBody">1，FCKeditor 编辑器 <br />
<br />
最新版本: 2.3.1 <br />
站点：<a href="http://www.fckeditor.net/" target="_blank">http://www.fckeditor.net/</a> <br />
演示：<a href="http://www.fckeditor.net/demo" target="_blank">http://www.fckeditor.net/demo</a> <br />
特点：开源、免费 <br />
FCKeditor是一款功能强大的开源在线文本编辑器(DHTML editor)，它使你在web上可以使用类似微软Word 的桌面文本编辑器的许多强大功能。它是轻量级且不必在客户端进行任何方式的安装。 <br />
FCKeditor兼容 Firefox, Mozilla, Netscape 和 IE。 <br />
<br />
2，eWebEditor在线编辑器 <br />
<br />
最新版本：4.0 <br />
站点：<a href="http://www.ewebsoft.com/" target="_blank">http://www.ewebsoft.com/</a> <br />
演示：<a href="http://ewebeditor.webasp.net/demo.asp" target="_blank">http://ewebeditor.webasp.net/demo.asp</a> <br />
特点：国产、易用 <br />
<br />
3，InnovaStudio WYSIWYG Editor在线编辑器 <br />
注：WYSIWYG是What You See Is What You Get（所见即所得）首字母组合 <br />
<br />
最新版本：2.9.7 <br />
站点：<a href="http://www.innovastudio.com/editor.asp" target="_blank">http://www.innovastudio.com/editor.asp</a> <br />
演示: <a href="http://www.innovastudio.com/editor_tutorial.asp" target="_blank">http://www.innovastudio.com/editor_tutorial.asp</a> <br />
特点: 物有所值 <br />
<br />
4，Tinymce在线编辑器 <br />
<br />
最新版本：2.0.6.1 <br />
站点：<a href="http://tinymce.moxiecode.com/" target="_blank">http://tinymce.moxiecode.com/</a> <br />
演示:<a href="http://tinymce.moxiecode.com/" target="_blank">http://tinymce.moxiecode.com/</a> /example_full.php?example=true <br />
<br />
有关如上4款在线编辑器的测试比较，经典论坛有份帖子，可以参阅下： <br />
<a href="http://bbs.blueidea.com/viewthread.php?tid=2621172" target="_blank">http://bbs.blueidea.com/viewthread.php?tid=2621172</a> <br />
<br />
5，XStandard <br />
<br />
最新版本：1.7.1 <br />
站点：<a href="http://xstandard.com/" target="_blank">http://xstandard.com/</a> <br />
特点：支持XHTML+CSS <br />
说明：XStandard Lite免费，XStandard Pro30天试用 <br />
<br />
6，Free TextBox在线编辑器 <br />
<br />
最新版本：3.1.6 <br />
<a href="http://freetextbox.com/" target="_blank">http://freetextbox.com/</a> <br />
<a href="http://freetextbox.com/" target="_blank">http://freetextbox.com/</a>demos/ <br />
说明：FreeTextBox 是一个基于 Internet Explorer 中 MSHTML 技术的 ASP.NET 开源服务器控件。这是一款优秀的自由软件（Free Software），我们可以轻松地将其嵌入到 Web Forms 中实现 HTML 内容的在线编辑，在新闻发布、博客写作、论坛社区等多种 Web 系统中都会有用途。 <br />
<br />
======================= <br />
<br />
7.Cute Editer <br />
<a href="http://cutesoft.net/asp/EnableAll.asp" target="_blank">http://cutesoft.net/asp/EnableAll.asp</a> <br />
<br />
开发案例：DW版在线编辑器 <br />
演示：<a href="http://www.nlimi.com/ud/dreampower.htm" target="_blank">http://www.nlimi.com/ud/dreampower.htm</a> <br />
下载：<a href="http://www.nlimi.com/ud/dreampower.rar" target="_blank">http://www.nlimi.com/ud/dreampower.rar</a> </div>
<img src ="http://DesignPattern.cnblogs.comaggbug/1234175.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37534/" target="_blank">[新闻]财富：微软必然得到雅虎 是对抗Google唯一出路</a>]]></description></item><item><title>解读设计模式----适配器(Adapter)模式,麻雀飞上枝头真能成凤凰？</title><link>http://www.cnblogs.com/beniao/archive/2008/07/01/1232799.html</link><dc:creator>Bēniaǒ</dc:creator><author>Bēniaǒ</author><pubDate>Tue, 01 Jul 2008 14:23:00 GMT</pubDate><guid>http://www.cnblogs.com/beniao/archive/2008/07/01/1232799.html</guid><description><![CDATA[摘要: 金庸武侠里出现的有3大神功：北冥神功、化工大法和吸醒大法，这三大神功都是吸取别人内力的武功。&nbsp;&nbsp;<a href='http://www.cnblogs.com/beniao/archive/2008/07/01/1232799.html'>阅读全文</a><img src ="http://DesignPattern.cnblogs.comaggbug/1232799.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37533/" target="_blank">[新闻]分众无线剥离短信业务 裁员2/3</a>]]></description></item><item><title>ASP.NET中进行消息处理(MSMQ) 二</title><link>http://www.cnblogs.com/beniao/archive/2008/06/28/1230311.html</link><dc:creator>Bēniaǒ</dc:creator><author>Bēniaǒ</author><pubDate>Fri, 27 Jun 2008 21:54:00 GMT</pubDate><guid>http://www.cnblogs.com/beniao/archive/2008/06/28/1230311.html</guid><description><![CDATA[摘要: 介绍了MSMQ中的消息优先级、异步消息处理以及事务性处理等相关知识点。&nbsp;&nbsp;<a href='http://www.cnblogs.com/beniao/archive/2008/06/28/1230311.html'>阅读全文</a><img src ="http://DesignPattern.cnblogs.comaggbug/1230311.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37532/" target="_blank">[新闻]传统新闻产业受新媒体冲击 面临动荡性调整</a>]]></description></item><item><title>状态模式 state</title><link>http://www.cnblogs.com/microsoft-jiang/archive/2008/06/28/1231264.html</link><dc:creator>笑笑江南</dc:creator><author>笑笑江南</author><pubDate>Fri, 27 Jun 2008 17:48:00 GMT</pubDate><guid>http://www.cnblogs.com/microsoft-jiang/archive/2008/06/28/1231264.html</guid><description><![CDATA[摘要: 状态模式：允许对象的内部状态改变时改变它的行为，对想看起来好像修改了它的类。 状态模式和策略模式比较相似（类图就完全一样），都是A对象关联B对象，而B是可以更换的，A对象的功能随着B的具体实现的改变而改变。策略模式一般都是B对象在A对象所在的上下文中改变。而状态模式则是在B对象（状态对象）完成一定的操作在B对象内部吧A关联的B的具体实现更换。对于A来说就像是一个封闭的机器，内部实现了一套状态转换的&nbsp;&nbsp;<a href='http://www.cnblogs.com/microsoft-jiang/archive/2008/06/28/1231264.html'>阅读全文</a><img src ="http://DesignPattern.cnblogs.comaggbug/1231264.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37531/" target="_blank">[新闻]微软Silverlight被指侵犯Gotuit三项专利</a>]]></description></item><item><title>寫給DUDU老大的日歷改善建議</title><link>http://www.cnblogs.com/godwar/archive/2008/06/24/1228788.html</link><dc:creator>巍巍边疆</dc:creator><author>巍巍边疆</author><pubDate>Tue, 24 Jun 2008 03:48:00 GMT</pubDate><guid>http://www.cnblogs.com/godwar/archive/2008/06/24/1228788.html</guid><description><![CDATA[<P>DUDU老大，我在其他blog網站上發現一個比較全面的日歷，我建議加入我們的blog，看是否可行，代碼如下：</P>
<P>
<TABLE style="BORDER-RIGHT: #d2dee2 1px solid; PADDING-RIGHT: 1px; BORDER-TOP: #d2dee2 1px solid; PADDING-LEFT: 1px; PADDING-BOTTOM: 1px; BORDER-LEFT: #d2dee2 1px solid; PADDING-TOP: 1px; BORDER-BOTTOM: #d2dee2 1px solid; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 width=220 align=center bgColor=#ffffff border=0>
<TBODY>
<TR bgColor=#edf2f2 height=20>
<TD title=上一年 style="FONT-SIZE: 9pt; CURSOR: hand; COLOR: #1f72d0" onclick="pushBtm('YU')" align=middle width=14>||</TD>
<TD title=上一月 style="FONT-SIZE: 9pt; CURSOR: hand; COLOR: #1f72d0" onclick="pushBtm('MU')" align=middle width=14>&lt;&lt;</TD>
<TD id=YMBG style="FONT-SIZE: 9pt; COLOR: #1f72d0" noWrap align=middle>2008年6月</TD>
<TD id=GZ style="FONT-SIZE: 9pt; COLOR: #1f72d0" noWrap align=middle>戊子年（鼠）</TD>
<TD title=下一月 style="FONT-SIZE: 9pt; CURSOR: hand; COLOR: #1f72d0" onclick="pushBtm('MD')" align=middle width=14>&gt;&gt;</TD>
<TD title=下一年 style="FONT-SIZE: 9pt; CURSOR: hand; COLOR: #1f72d0" onclick="pushBtm('YD')" align=middle width=14>||</TD></TR>
<TR>
<TD colSpan=6>
<DIV id=ttdiv align=center width="210">
<TABLE id=datetable style="BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 width=216 bgColor=#f6f8f8 border=0>
<TBODY>
<TR style="COLOR: #a6aa97" align=middle bgColor=#edf2f2>
<TD width=32 height=24>日</TD>
<TD width=32>一</TD>
<TD width=32>二</TD>
<TD width=32>三</TD>
<TD width=32>四</TD>
<TD width=32>五</TD>
<TD width=32>六</TD></TR>
<TR align=middle>
<TD noWrap><FONT class="" id=SD0 title="儿童节 " style="COLOR: #cdbc71" face="Arial Black" color=#cdbc71 size=2>1</FONT><BR><FONT id=LD0 style="FONT-SIZE: 7pt"><FONT color=#6fc2ff>儿童节 </FONT></FONT></TD>
<TD noWrap><FONT class="" id=SD1 title=廿九 face="Arial Black" color=#a6aa97 size=2><A title=查看2日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_2.html">2</A></FONT><BR><FONT id=LD1 style="FONT-SIZE: 7pt">廿九</FONT></TD>
<TD noWrap><FONT class="" id=SD2 title=三十 face="Arial Black" color=#a6aa97 size=2><A title=查看3日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_3.html">3</A></FONT><BR><FONT id=LD2 style="FONT-SIZE: 7pt">三十</FONT></TD>
<TD noWrap><FONT class="" id=SD3 title="<B>5月小</B>" face="Arial Black" color=#a6aa97 size=2>4</FONT><BR><FONT id=LD3 style="FONT-SIZE: 7pt"><B>5月小</B></FONT></TD>
<TD noWrap><FONT class="" id=SD4 title=芒种 face="Arial Black" color=#a6aa97 size=2><A title=查看5日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_5.html">5</A></FONT><BR><FONT id=LD4 style="FONT-SIZE: 7pt"><FONT color=limegreen>芒种</FONT></FONT></TD>
<TD noWrap><FONT class="" id=SD5 title=初三 face="Arial Black" color=#a6aa97 size=2><A title=查看6日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_6.html">6</A></FONT><BR><FONT id=LD5 style="FONT-SIZE: 7pt">初三</FONT></TD>
<TD noWrap><FONT class="" id=SD6 title=初四 face="Arial Black" color=#cdbc71 size=2>7</FONT><BR><FONT id=LD6 style="FONT-SIZE: 7pt">初四</FONT></TD></TR>
<TR align=middle>
<TD noWrap><FONT class="" id=SD7 title="端午节 " style="COLOR: #cdbc71" face="Arial Black" color=#cdbc71 size=2>8</FONT><BR><FONT id=LD7 style="FONT-SIZE: 7pt"><FONT color=#6fc2ff>端午节 </FONT></FONT></TD>
<TD noWrap><FONT class="" id=SD8 title=初六 face="Arial Black" color=#a6aa97 size=2><A title=查看9日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_9.html">9</A></FONT><BR><FONT id=LD8 style="FONT-SIZE: 7pt">初六</FONT></TD>
<TD noWrap><FONT class="" id=SD9 title=初七 face="Arial Black" color=#a6aa97 size=2><A title=查看10日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_10.html">10</A></FONT><BR><FONT id=LD9 style="FONT-SIZE: 7pt">初七</FONT></TD>
<TD noWrap><FONT class="" id=SD10 title=初八 face="Arial Black" color=#a6aa97 size=2><A title=查看11日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_11.html">11</A></FONT><BR><FONT id=LD10 style="FONT-SIZE: 7pt">初八</FONT></TD>
<TD noWrap><FONT class="" id=SD11 title=初九 face="Arial Black" color=#a6aa97 size=2><A title=查看12日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_12.html">12</A></FONT><BR><FONT id=LD11 style="FONT-SIZE: 7pt">初九</FONT></TD>
<TD noWrap><FONT class="" id=SD12 title=初十 face="Arial Black" color=#a6aa97 size=2>13</FONT><BR><FONT id=LD12 style="FONT-SIZE: 7pt">初十</FONT></TD>
<TD noWrap><FONT class="" id=SD13 title=十一 style="COLOR: #cdbc71" face="Arial Black" color=#cdbc71 size=2>14</FONT><BR><FONT id=LD13 style="FONT-SIZE: 7pt">十一</FONT></TD></TR>
<TR align=middle>
<TD noWrap><FONT class="" id=SD14 title=十二 style="COLOR: #cdbc71" face="Arial Black" color=#cdbc71 size=2>15</FONT><BR><FONT id=LD14 style="FONT-SIZE: 7pt">十二</FONT></TD>
<TD noWrap><FONT class="" id=SD15 title=十三 face="Arial Black" color=#a6aa97 size=2><A title=查看16日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_16.html">16</A></FONT><BR><FONT id=LD15 style="FONT-SIZE: 7pt">十三</FONT></TD>
<TD noWrap><FONT class="" id=SD16 title=十四 face="Arial Black" color=#a6aa97 size=2><A title=查看17日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_17.html">17</A></FONT><BR><FONT id=LD16 style="FONT-SIZE: 7pt">十四</FONT></TD>
<TD noWrap><FONT class="" id=SD17 title=十五 face="Arial Black" color=#a6aa97 size=2>18</FONT><BR><FONT id=LD17 style="FONT-SIZE: 7pt">十五</FONT></TD>
<TD noWrap><FONT class="" id=SD18 title=十六 face="Arial Black" color=#a6aa97 size=2><A title=查看19日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_19.html">19</A></FONT><BR><FONT id=LD18 style="FONT-SIZE: 7pt">十六</FONT></TD>
<TD noWrap><FONT class="" id=SD19 title=十七 face="Arial Black" color=#a6aa97 size=2><A title=查看20日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_20.html">20</A></FONT><BR><FONT id=LD19 style="FONT-SIZE: 7pt">十七</FONT></TD>
<TD noWrap><FONT class="" id=SD20 title=夏至 face="Arial Black" color=#cdbc71 size=2><A title=查看21日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_21.html">21</A></FONT><BR><FONT id=LD20 style="FONT-SIZE: 7pt"><FONT color=limegreen>夏至</FONT></FONT></TD></TR>
<TR align=middle>
<TD noWrap><FONT class="" id=SD21 title=十九 style="COLOR: #cdbc71" face="Arial Black" color=#cdbc71 size=2><A title=查看22日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_22.html">22</A></FONT><BR><FONT id=LD21 style="FONT-SIZE: 7pt">十九</FONT></TD>
<TD noWrap><FONT class="" id=SD22 title=二十 face="Arial Black" color=#a6aa97 size=2><A title=查看23日的文章 href="http://blog.chinaunix.net/u1/40527/date_2008_6_23.html">23</A></FONT><BR><FONT id=LD22 style="FONT-SIZE: 7pt">二十</FONT></TD>
<TD noWrap><FONT class=todyaColor id=SD23 title=廿一 face="Arial Black" color=#a6aa97 size=2>24</FONT><BR><FONT id=LD23 style="FONT-SIZE: 7pt">廿一</FONT></TD>
<TD noWrap><FONT class="" id=SD24 title=廿二 face="Arial Black" color=#a6aa97 size=2>25</FONT><BR><FONT id=LD24 style="FONT-SIZE: 7pt">廿二</FONT></TD>
<TD noWrap><FONT class="" id=SD25 title=廿三 face="Arial Black" color=#a6aa97 size=2>26</FONT><BR><FONT id=LD25 style="FONT-SIZE: 7pt">廿三</FONT></TD>
<TD noWrap><FONT class="" id=SD26 title=廿四 face="Arial Black" color=#a6aa97 size=2>27</FONT><BR><FONT id=LD26 style="FONT-SIZE: 7pt">廿四</FONT></TD>
<TD noWrap><FONT class="" id=SD27 title=廿五 style="COLOR: #cdbc71" face="Arial Black" color=#cdbc71 size=2>28</FONT><BR><FONT id=LD27 style="FONT-SIZE: 7pt">廿五</FONT></TD></TR>
<TR align=middle>
<TD noWrap><FONT class="" id=SD28 title=廿六 style="COLOR: #cdbc71" face="Arial Black" color=#cdbc71 size=2>29</FONT><BR><FONT id=LD28 style="FONT-SIZE: 7pt">廿六</FONT></TD>
<TD noWrap><FONT class="" id=SD29 title=廿七 face="Arial Black" color=#a6aa97 size=2>30</FONT><BR><FONT id=LD29 style="FONT-SIZE: 7pt">廿七</FONT></TD>
<TD noWrap><FONT class="" id=SD30 title="" face="Arial Black" color=#a6aa97 size=2></FONT><BR><FONT id=LD30 style="FONT-SIZE: 7pt"></FONT></TD>
<TD noWrap><FONT class="" id=SD31 title="" face="Arial Black" color=#a6aa97 size=2></FONT><BR><FONT id=LD31 style="FONT-SIZE: 7pt"></FONT></TD>
<TD noWrap><FONT class="" id=SD32 title="" face="Arial Black" color=#a6aa97 size=2></FONT><BR><FONT id=LD32 style="FONT-SIZE: 7pt"></FONT></TD>
<TD noWrap><FONT class="" id=SD33 title="" face="Arial Black" color=#a6aa97 size=2></FONT><BR><FONT id=LD33 style="FONT-SIZE: 7pt"></FONT></TD>
<TD noWrap><FONT class="" id=SD34 title="" face="Arial Black" color=#cdbc71 size=2></FONT><BR>&nbsp;</TD></TR></TBODY></TABLE></DIV></TD></TR></TBODY></TABLE><BR>&lt;table bgcolor="#FFFFFF" cellspacing="0" cellpadding="0" style="border-collapse: collapse;border: 1px solid #D2DEE2; padding: 1" align="center" width="220" border="0"&gt;<BR>&lt;tr height="20" bgcolor="#EDF2F2"&gt;<BR>&lt;td align="center" width="14" style="cursor: hand; color: #1F72D0;font-size:9pt;" title="上一年" onclick="pushBtm('YU')"&gt;||&lt;/td&gt;<BR>&lt;td align="center" width="14" style="cursor: hand; color: #1F72D0;font-size:9pt" title="上一月" onclick="pushBtm('MU')"&gt;&amp;lt;&amp;lt;&lt;/td&gt;<BR>&lt;td align="center" nowrap="nowrap" id="YMBG" style="color: #1F72D0;font-size:9pt"&gt;&lt;/td&gt;<BR>&lt;td align="center" nowrap="nowrap" id="GZ" style="color: #1F72D0;font-size:9pt"&gt;&lt;/td&gt;<BR>&lt;td align="center" width="14" style="cursor: hand; color: #1F72D0;font-size:9pt" title="下一月" onclick="pushBtm('MD')"&gt;&gt;&gt;&lt;/td&gt;<BR>&lt;td align="center" width="14" style="cursor: hand; color: #1F72D0;font-size:9pt" title="下一年" onclick="pushBtm('YD')"&gt;||&lt;/td&gt;<BR>&lt;/tr&gt;<BR>&lt;tr&gt;&lt;td colspan="6"&gt;<BR>&lt;div id="ttdiv" align="center" width="210"&gt;&lt;/div&gt;<BR>&lt;/td&gt;&lt;/tr&gt;<BR>&lt;tr&gt;&lt;td colspan="6" height="1"&gt;&lt;/td&gt;&lt;/tr&gt;<BR>&lt;/table&gt;</P>
<P>&lt;script src="<A href="http://blog.chinaunix.net/templates/newtech/mdate.js">http://blog.chinaunix.net/templates/newtech/mdate.js</A>" &gt;&lt;/script&gt;<BR>&lt;script language="javascript"&gt;<BR>var arrArtdate=new Array('20070604','20070605','20070606','20070607','20070611','20070614','20070618','20070620','20070621','20070622','20070623','20070624','20070628','20070703','20070705','20070706','20070709','20070717','20070719','20070721','20070723','20070801','20070802','20070817','20070824','20070829','20070904','20070912','20070919','20070926','20070928','20071008','20071017','20071024','20071031','20071102','20071103','20071105','20071106','20071108','20071112','20071113','20071115','20071119','20071122','20071125','20071127','20071129','20071201','20071204','20071205','20071206','20071207','20071209','20071210','20071212','20071213','20071214','20071215','20071216','20071217','20071220','20071223','20071226','20071231','20080103','20080106','20080107','20080108','20080109','20080111','20080112','20080113','20080115','20080116','20080117','20080118','20080119','20080120','20080121','20080123','20080124','20080125','20080126','20080128','20080129','20080201','20080215','20080219','20080220','20080221','20080222','20080226','20080227','20080228','20080229','20080301','20080304','20080305','20080308','20080311','20080312','20080313','20080318','20080319','20080323','20080324','20080327','20080328','20080331','20080401','20080402','20080403','20080407','20080408','20080409','20080410','20080414','20080417','20080418','20080419','20080421','20080422','20080423','20080424','20080425','20080426','20080427','20080428','20080429','20080503','20080506','20080508','20080509','20080510','20080512','20080513','20080514','20080516','20080517','20080518','20080519','20080520','20080521','20080522','20080525','20080527','20080530','20080531','20080602','20080603','20080605','20080606','20080609','20080610','20080611','20080612','20080616','20080617','20080619','20080620','20080621','20080622','20080623');</P>
<P>initial("ttdiv");</P>
<P>&lt;/script&gt;<BR></P><img src ="http://DesignPattern.cnblogs.comaggbug/1228788.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37530/" target="_blank">[新闻]Symbian开源:救赎,反击与未来</a>]]></description></item><item><title>应用OOP的设计过程演化（三）</title><link>http://www.cnblogs.com/beniao/archive/2008/06/21/1224238.html</link><dc:creator>Bēniaǒ</dc:creator><author>Bēniaǒ</author><pubDate>Sat, 21 Jun 2008 09:07:00 GMT</pubDate><guid>http://www.cnblogs.com/beniao/archive/2008/06/21/1224238.html</guid><description><![CDATA[摘要: 引入策略模式，改善折扣率的固化设计&nbsp;&nbsp;<a href='http://www.cnblogs.com/beniao/archive/2008/06/21/1224238.html'>阅读全文</a><img src ="http://DesignPattern.cnblogs.comaggbug/1224238.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37528/" target="_blank">[新闻]《福布斯》:暴雪的新一波完美风暴已经到来</a>]]></description></item><item><title>适当使用Web Service</title><link>http://www.cnblogs.com/swanmsg/archive/2008/06/19/1226272.html</link><dc:creator>李明飞</dc:creator><author>李明飞</author><pubDate>Thu, 19 Jun 2008 15:52:00 GMT</pubDate><guid>http://www.cnblogs.com/swanmsg/archive/2008/06/19/1226272.html</guid><description><![CDATA[公布我早期的一篇愚作。<br />
下面我说说Web Service的优点和不足之处：<br />
跨越防火墙的通信 <img height="85" alt="" src="http://www.cnblogs.com/images/cnblogs_com/swanmsg/0802151355242.jpg" width="120" align="right" border="0" /><br />
<font color="#996699">如果你的应用程序有成千上万的用户，而且他们都分布在世界各地，那么客户端和服务器之间的通信将是一个棘手的问题。那是因为客户端和服务器之间通常都会有防火墙或者代理服务器。在这种情况下，你想使用DCOM就不是那么简单了，而且，通常你也不愿意把你的客户端程序发布到如此庞大数量的每一个用户手中。于是，你最终选择了用浏览器作为客户端，写下一堆ASP页面，把应用程序的中间层暴露给最终用户。结果呢？运气好的话，只是开发难度大了一些，运气不好的话，就会得到一个根本无法维护的应用程序。<br />
</font><a href="http://swanmsg.blog.sohu.com/74949250.html"><strong style="color: red">查看全文</strong></a> 
<img src ="http://DesignPattern.cnblogs.comaggbug/1226272.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37527/" target="_blank">[新闻]中国互联网公司在哪儿</a>]]></description></item><item><title>重温Observer模式--热水器·改</title><link>http://www.cnblogs.com/JimmyZhang/archive/2008/06/18/1225061.html</link><dc:creator>Jimmy Zhang</dc:creator><author>Jimmy Zhang</author><pubDate>Wed, 18 Jun 2008 15:39:00 GMT</pubDate><guid>http://www.cnblogs.com/JimmyZhang/archive/2008/06/18/1225061.html</guid><description><![CDATA[摘要: 在 <a target='_blank' href="http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx">C#中的委托和事件</A> 一文的后半部分，我向大家讲述了Observer(观察者)模式，并使用委托和事件实现了这个模式。实际上，不使用委托和事件，一样可以实现Observer模式。在本文中，我将使用GOF的经典方式，再次实现一遍Observer模式，同时将讲述在 <a target='_blank' href="http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx">C#中的委托和事件</A> 一文中没有提及的推模式(Push)和拉模式(Pull)。&nbsp;&nbsp;<a href='http://www.cnblogs.com/JimmyZhang/archive/2008/06/18/1225061.html'>阅读全文</a><img src ="http://DesignPattern.cnblogs.comaggbug/1225061.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37526/" target="_blank">[新闻]微软:Silverlight内容也可被搜索引擎检索</a>]]></description></item><item><title>应用OOP的设计过程演化（二）</title><link>http://www.cnblogs.com/beniao/archive/2008/06/17/1223419.html</link><dc:creator>Bēniaǒ</dc:creator><author>Bēniaǒ</author><pubDate>Mon, 16 Jun 2008 16:02:00 GMT</pubDate><guid>http://www.cnblogs.com/beniao/archive/2008/06/17/1223419.html</guid><description><![CDATA[摘要: 业务类型的封装，分析具体的业务角色的职责，完善系统具体的业务角色的功能。&nbsp;&nbsp;<a href='http://www.cnblogs.com/beniao/archive/2008/06/17/1223419.html'>阅读全文</a><img src ="http://DesignPattern.cnblogs.comaggbug/1223419.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37525/" target="_blank">[新闻]内置AI技术 三星聪明微波炉还能上网</a>]]></description></item><item><title>应用OOP的设计过程演化（一）</title><link>http://www.cnblogs.com/beniao/archive/2008/06/15/1222689.html</link><dc:creator>Bēniaǒ</dc:creator><author>Bēniaǒ</author><pubDate>Sun, 15 Jun 2008 11:26:00 GMT</pubDate><guid>http://www.cnblogs.com/beniao/archive/2008/06/15/1222689.html</guid><description><![CDATA[摘要: 为了更好的理解设计思想，本文以一个简单系统的设计为例，但随着需求的增加，程序将越来越复杂。&nbsp;&nbsp;<a href='http://www.cnblogs.com/beniao/archive/2008/06/15/1222689.html'>阅读全文</a><img src ="http://DesignPattern.cnblogs.comaggbug/1222689.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37524/" target="_blank">[新闻]盛大设文学公司 原新浪博客负责人侯小强任CEO</a>]]></description></item><item><title>[美术制作流程]魔兽世界角色换装分析</title><link>http://www.cnblogs.com/godwar/archive/2008/06/15/1222668.html</link><dc:creator>巍巍边疆</dc:creator><author>巍巍边疆</author><pubDate>Sun, 15 Jun 2008 10:03:00 GMT</pubDate><guid>http://www.cnblogs.com/godwar/archive/2008/06/15/1222668.html</guid><description><![CDATA[FW:&nbsp; http://www.cnblogs.com/winsonchen/archive/2008/01/24/1051716.html<BR><BR>基于WowModelView的代码分析魔兽的换装流程，给程序包括美术提示avatar换装思路。<STRONG><BR><BR>魔兽角色系统设计原则:</STRONG><BR>1.一套模型多套纹理贴图<BR>2.某一角色只有一个模型,<STRONG> </STRONG>该模型包含了各种服装搭配所需的Mesh, 是该角色网格全集. 当用户换装时，会动态显示、隐藏一些网格细节。<BR>比如发型：有短发、中发、长发；37开、辫子等。这些都是已经做好跟Skin一起导出。只是运行时根据用户配置决定显示具体发型对应的网格。<BR>3.基本角色模型不包括头盔、肩甲、盾牌等装饰品。<BR><BR><STRONG>举HumanFemale角色为例:</STRONG><BR>1.一个HumanFemale Model，包括了所有服装配件用到的网格。<BR>2. 总共有62部分组成。<BR>3.为了提高效率，角色贴图只使用一张；服装配件用贴图叠加混合到基本身体贴图。<BR>4.魔兽在贴图制作上都只用了半边，用镜像方式节省资源。<BR>5.没有调整Material，皮肤及脸、发型等颜色的变化用更换纹理实现。这样做比较细腻。<BR><BR>HumanFemal角色纹理制作细节分析, <BR>1.角色纹理制作规则，分两大类：<BR>&nbsp;&nbsp; a.每个基本角色都有自己一套基本纹理资源目录。具体纹理资源分类见HumanFemal例子。<BR>&nbsp;&nbsp; b.所有角色共用的纹理资源。比如外衣、腰带、护腕等用到的纹理贴图。<BR><BR>2.HumanFemale特有的一套资源目录:<BR>&nbsp;&nbsp;&nbsp; Skin&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // 256*256, 10张（对应不同皮肤颜色）<BR>&nbsp;&nbsp;&nbsp; Face Style&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // <BR>&nbsp;&nbsp;&nbsp; Hair Style<BR>&nbsp;&nbsp;&nbsp; Hair Color<BR>&nbsp;&nbsp;&nbsp; Facial Feature<BR>&nbsp;&nbsp;&nbsp; Facial Color<BR>&nbsp;&nbsp;&nbsp; Skin是基本纹理（Tex0），其他所有纹理都要跟其混合。<BR>&nbsp;&nbsp;&nbsp; 命名规则：HumanFemaleSkin00_00.blp …HumanFemaleSkin00_09.blp<BR><BR>3.Face Style 魔兽分成两部分FaceUpper、FaceLower<BR>&nbsp;&nbsp; FaceLower&nbsp; 128×64&nbsp; 张数＝FaceStyleCount×SkinCount＝14×10＝140<BR>&nbsp;&nbsp; FaceUpper&nbsp; 128×32&nbsp; 张数＝FaceStyleCount×SkinCount＝14×10＝140<BR>&nbsp;&nbsp; 命名规则：HumanFemaleFaceLower00_00.blp …HumanFemaleFaceLower14_09.blp<BR><BR>4.Hair Style、Hair Color<BR>&nbsp;&nbsp; Hair Style：对应的是网格。有11种发型。也就是HumanFemale需制作11种发型网格，并跟角色一起导出。<BR>&nbsp;&nbsp; HairColor：HairMesh对应的纹理。有3种发型贴图：直发、微卷、卷。有10种颜色。<BR>&nbsp;&nbsp; HairColor纹理张数＝HairColorCount×3＝10×3＝30；<BR>&nbsp;&nbsp; 命名规则：Hair00_00.blp&nbsp; …&nbsp; Hair03..09.blp<BR>&nbsp;&nbsp; 注意：Hair纹理Human男女共用。<BR><BR>5.Facial Feature、Facial Color<BR>&nbsp;&nbsp; Facial Feature用于表现角色脸部局部细节特征，如女性的耳环、闭环，男性的粗眉毛、胡子等。<BR>&nbsp;&nbsp; Facial Feature 用于决定哪些角色装饰网格可视。<BR>&nbsp;&nbsp; Facial Color 是Facial Feature对应的纹理。<BR>&nbsp;&nbsp; Facial Color纹理张数＝FacialFeatureCount×9＝7×9＝63；<BR>&nbsp;&nbsp; 命名规则：Facial00_00.blp&nbsp; …&nbsp; Facial06..09.blp<BR><BR>6.由以上统计，HumanFemale角色特有的纹理需 10＋140＋140＋30＋63 ＝ 383张。<BR><BR>7.角色区域坐标（Skin0-Skin9纹理区域划分）<BR>const CharRegionCoords regions[NUM_REGIONS] =<BR>{<BR>&nbsp;&nbsp;&nbsp; {0, 0, 256, 256},&nbsp;&nbsp;&nbsp; // base<BR>&nbsp;&nbsp;&nbsp; {0, 0, 128, 64},&nbsp;&nbsp;&nbsp; // arm upper<BR>&nbsp;&nbsp;&nbsp; {0, 64, 128, 64},&nbsp;&nbsp;&nbsp; // arm lower<BR>&nbsp;&nbsp;&nbsp; {0, 128, 128, 32},&nbsp;&nbsp;&nbsp; // hand<BR>&nbsp;&nbsp;&nbsp; {0, 160, 128, 32},&nbsp;&nbsp;&nbsp; // face upper<BR>&nbsp;&nbsp;&nbsp; {0, 192, 128, 64},&nbsp;&nbsp;&nbsp; // face lower<BR>&nbsp;&nbsp;&nbsp; {128, 0, 128, 64},&nbsp;&nbsp;&nbsp; // torso upper<BR>&nbsp;&nbsp;&nbsp; {128, 64, 128, 32},&nbsp;&nbsp;&nbsp; // torso lower<BR>&nbsp;&nbsp;&nbsp; {128, 96, 128, 64}, // pelvis upper<BR>&nbsp;&nbsp;&nbsp; {128, 160, 128, 64},// pelvis lower<BR>&nbsp;&nbsp;&nbsp; {128, 224, 128, 32}&nbsp;&nbsp;&nbsp; // foot<BR>};<BR><BR><STRONG>装备系统分析</STRONG>：<BR>1.魔兽世界有八种角色、每种角色分男女性别。<BR>2.这里的装备不仅仅指刀剑等武器，还包括手套、盔甲、长袍等。<BR>3.装备分类，部分装备每个角色各做一套，比如头盔做了16套。<BR>4.部分装备，所有角色共用同一纹理。比如长袍、护腕等。<BR>5.一套装备类型对应所有角色。也就是说下面的装备枚举类型适用所有角色。不存在特殊角色独有的装备。<BR>&nbsp;&nbsp;&nbsp; enum eCharSlots &nbsp;&nbsp;&nbsp; // Character Equipment Slot<BR>&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_HEAD,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_NECK,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_SHOULDER,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_BOOTS,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_BELT,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_SHIRT,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_PANTS,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_CHEST,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_BRACERS,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_GLOVES,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_HAND_RIGHT,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_HAND_LEFT,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_CAPE,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_TABARD,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CS_QUIVER,<BR><BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; NUM_CHAR_SLOTS<BR>&nbsp;&nbsp;&nbsp; };<BR>6.部分装备的纹理贴图要跟角色模型的纹理混合。<BR>&nbsp;&nbsp; 比如Belt腰带就要混合到角色256*256贴图的CR_LEG_UPPER部分。<BR>&nbsp;&nbsp; 比如Bracers护腕就要混合到角色256*256贴图的CR_ARM_LOWER部分。<BR>&nbsp;&nbsp; 比如Cheat、Shirt装备就要跟角色多个区域混合。<BR>7.简单装备用一张贴图，如护腕、腰带。复杂装备会用到多张贴图，如Shirt就要四张（用于跟角色纹理四个区域混合CR_ARM_UPPER、CR_ARM_LOWER、CR_TORSO_UPPER、CR_TORSO_LOWER）。<BR><BR><BR><STRONG>角色信息DB</STRONG><BR>魔兽使用dbc数据表形式存储各种信息配置。包括了角色基本纹理区域划分信息,装备跟纹理的对应信息。<BR>ChrRaces.dbc<BR>CharHairGeosets.dbc<BR>CharSections.dbc<BR>CharacterFacialHairStyles.dbc<BR>HelmetGeosetVisData.dbc<BR>ItemDisplayInfo.dbc<BR>ItemVisuals.dbc<BR>ItemVisualEffects.dbc<BR>ItemSet.dbc<BR>ItemClass.dbc<BR>ItemSubClass.dbc<BR>CharStartOutfit.dbc<BR>SpellVisualEffectName.dbc<img src ="http://DesignPattern.cnblogs.comaggbug/1222668.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/37523/" target="_blank">[新闻]Gmail、Hotmail和Yahoo验证码被攻破</a>]]></description></item><item><title>[ZT]解密中国IT人十大职业现状</title><link>http://www.cnblogs.com/godwar/archive/2008/06/05/1214542.html</link><dc:creator>巍巍边疆</dc:creator><author>巍巍边疆</author><pubDate>Thu, 05 Jun 2008 08:03:00 GMT</pubDate><guid>http://www.cnblogs.com/godwar/archive/2008/06/05/1214542.html</guid><description><![CDATA[<H1><A href="http://news.csdn.net/n/20080605/116530.html"><FONT size=2>http://news.csdn.net/n/20080605/116530.html</FONT></A></H1>
<H5>中国IT工程师大多数对当前薪酬收入状况不是很满意，数据显示，有68%的人群持不满意态度，认为以自己当前的能力与付出应该拿更高的薪酬，只有21%人群对当前收入水平持满意态度，认为当前的薪酬是自己业务能力的真实反映，另外有11%人群比例持无所谓态度。&nbsp;
<DIV id=beacon_2173 style="LEFT: 0px; VISIBILITY: hidden; POSITION: absolute; TOP: 0px"><IMG style="WIDTH: 0px; HEIGHT: 0px" height=0 alt="" src="http://z.csdn.net/gmlog.php?bannerid=2173&amp;clientid=752&amp;zf=&amp;zoneid=13&amp;source=&amp;block=0&amp;capping=0&amp;cb=adb613d