﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title><![CDATA[最新博客列表 - 艺风在线 - Power By CSZI.com]]></title>
    <link>http://max.cszi.com</link>
    <description><![CDATA[CSBlog官方网站，CSBlog是巧思工作室使用Asp.Net2.0(C#)开发的一套免费的Blog系统，采用原始数据的Xml+Xslt模板输出标准的Xhtml页面，原创的经典架构、合理的设计、轻巧方便的更改主题，是同类产品中的佼佼者。希望我们辛苦的努力可以为您的生活和工作带来很多方便。]]></description>
    <language>zh-cn</language>
    <copyright><![CDATA[Copyright 2003-2008 ChaosStudio[巧思]]]></copyright>
    <webMaster>zhouyu@69sea.com(一线风)
        </webMaster>
    <generator>CSBlog v2.0.1</generator>
    <image>
      <title><![CDATA[最新博客列表 - 艺风在线 - Power By ]]></title>
      <url>/App_Themes/Love/Images/</url>
      <link>http://max.cszi.com</link>
      <description><![CDATA[CSBlog官方网站，CSBlog是巧思工作室使用Asp.Net2.0(C#)开发的一套免费的Blog系统，采用原始数据的Xml+Xslt模板输出标准的Xhtml页面，原创的经典架构、合理的设计、轻巧方便的更改主题，是同类产品中的佼佼者。希望我们辛苦的努力可以为您的生活和工作带来很多方便。]]></description>
    </image>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=564</link>
      <title><![CDATA[CSBlogV2.11问题收集与信息反馈专用-提供09年贺岁版下载地址]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2008-12-31 9:38:44</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=564</guid>
      <comments>
              /Blog/Blog.aspx?Id=564#commentbox
            </comments>
      <description><![CDATA[<p><strong><font color="#3366ff">您在使用CSBlogV2.11的过程中有什么问题请发表与此的评论中，我们会尽快的给予解决。</font></strong></p>
<p>&nbsp;<a href="http://max.cszi.com/Blog/565-1.aspx"><strong><font color="#ff0000">CSBlogV2.11的更新历史记录：http://max.cszi.com/Blog/565-1.aspx</font></strong></a></p>
<p>1. 如果出现要求写权限的错误，请打开Everyone的读写权限。并且数据库的只读属性要去掉。</p>
<p>&nbsp;</p>
<p><font face="Verdana" color="#ff0000" size="3"><strong>2009新年贺岁版－ 牛气冲天下载：<br />
<br />
1. </strong></font><a href="http://down.chinaz.com/soft/24379.htm"><font face="Verdana" color="#ff0000" size="3"><strong>http://down.chinaz.com/soft/24379.htm</strong></font></a></p>
<p><strong><font face="Verdana" color="#ff0000" size="3">2. </font></strong><a href="http://files.cnblogs.com/atwind/CSBlogV211-Preview1.rar"><strong><font face="Verdana" color="#ff0000" size="3">http://files.cnblogs.com/atwind/CSBlogV211-Preview1.rar</font></strong></a><br />
<br />
<br />
<br />
Q: 为什么新发表的Blog会出现重写错误?<br />
A: 原因是读取不到评论的集合及分页信息,解决办法一是让所有角色都可以读取评论,二是在Blog.xslt(这个对应你的主题的Blog目录下)修改136行附近的原内容为:</p>
<p>&nbsp;&nbsp;&lt;xsl:if test=&quot;$Collection&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;div&nbsp; class=&quot;comment-page&quot;&nbsp; xml:space=&quot;preserve&quot;&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;xsl:call-template name=&quot;UI.RePaging&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsl:with-param name=&quot;Paging&quot; select=&quot;$Paging&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;xsl:with-param name=&quot;BaseUrl&quot; select=&quot;cs:makePage('/Blog/Blog.aspx','BlogDetail',$Paging,$Blog/@Id)&quot; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/xsl:call-template&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp;&lt;/xsl:if&gt;</p>
<p>第二种办法是解决的根本.</p><p>----------------------------------------------------------<br />
热心网友建议及回复:</p>
<p>1.大图片应该能自适应最大页面框架，超出某个比例时，将显示最大宽幅的自适应显示器和浏览器的页面（有滚动条也行），不过这一点不太重要。<br />
<font color="#339966">A: 这个可以在后面设定一个比较小的缩略图,而不是直接设为最大的.(因为大图对客户端的下载也是个问题.) 还有个办法就是CSS来控制,溢出时自动隐藏(Baidu 是这样的)</font><br />
<br />
2.图片（附件）上传后，在编辑状态中后或者重新上传，对于指定的上传文件夹中无效的旧图片和附件，系统均应自动给与删除。<br />
<font color="#99cc00">A: 这个将在下一版本上实现.</font><br />
<br />
3.后台可以查看图片附件以及手动清理非有效链接附件（图片）。<br />
<font color="#99cc00">A: 这个将在下一版本上实现.</font><br />
<br />
4.标签总管理，应该可以删除或者修改。<br />
<font color="#33cccc">A: 这个暂时记下</font><br />
<br />
5.系统自动识别图片后，在相册中集中显示；或者单独开设相册（画册）栏目，以列表幻灯等多种模式显示。<br />
<font color="#99cc00">A: 这个将在下一版本上实现.</font><br />
<br />
6.图片上传有时有故障，上传不能成功，需要查找原因修正。<br />
<font color="#ff0000">A: 下一版本改进</font><br />
<br />
7.留言板不可用,不过我考虑外挂一个，因为也有很不错的小型留言板。<br />
<font color="#99cc00">A: 下一版本的插件形式发布</font><br />
<br />
8.用户中心不可用，这需要及早修复，因为会影响用户体验。<br />
<font color="#ff0000">A: 因为现在基本上是本人,所以大多是直接在后台更改,下一版本中改进</font><br />
<br />
9.用户Norton(Symantec）防火墙开启时，诸多功能都出现异常，比如回复，显示为未知错误，但在无验证码情况下，在显示错误的同时，能发布。发文章和图片上传则不行。<br />
<font color="#ff00ff">A:这个没有碰到过,回头我查一下.</font><br />
<br />
10.后台给管理员在后台查看文章标题和所有评论的功能，可以随时总览文章以及评论，方便删除。目前前后台管理分离，分别授权。习惯上后台管理权限应该包括前台管理。但方便起见，增加对文章列表、评论列表、标签列表的管理即可。<br />
<font color="#993366">A: 暂时记下</font><br />
<br />
11.ReWrite重写，可否写成html的后缀？搜索引擎很喜欢。<br />
<font color="#ff0000">A:Html后缀是直接要修改IIS的解析指向的,这个可以在IIS上自已改.已经实现</font><br />
<br />
12.从百度搜索官方站点看，搜索到的内容部分，需要进行改进。目前在meta使用了优秀的调用前部分文章文字功能，但没有发挥作用。<br />
<font color="#00ff00">A:我的SEO确实是凭感觉,回头好好看一下!</font><br />
<br />
13.ACC数据库总保持在出现ldb打开的状态，我不懂，不知道是否是同程序代码有关？<br />
<strong><font style="background-color: #ff0000">A: 一直保持在打开状态是能为了更快速的响应数据读取与更新,可以在后台暂时关闭.</font></strong></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=734</link>
      <title><![CDATA[新增皮肤--爱的记忆]]></title>
      <author>一线风</author>
      <category>相关作品</category>
      <pubDate>2009-12-11 15:38:15</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=734</guid>
      <comments>
              /Blog/Blog.aspx?Id=734#commentbox
            </comments>
      <description><![CDATA[<p>这个是专为我和老婆的新婚制作的。所以就不另发布了，想要的朋友 你另存一下再改吧！ 嘿嘿~~~<br />
<img border="0" alt="请柬" src="/Upload/2009_12/11_181754_2536637_thumb.jpg" /><br />
快要回家结婚了~~~~ 2010.1.2 号，有回来的朋友要来参加哟~~</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=732</link>
      <title><![CDATA[一位软件工程师的7年总结:借此导航自己人生]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-12-3 17:12:13</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=732</guid>
      <comments>
              /Blog/Blog.aspx?Id=732#commentbox
            </comments>
      <description><![CDATA[<p>1、分享第一条经验：&ldquo;学历代表过去、能力代表现在、<strong><font color="#ff0000">学习力代表未来</font></strong>。&rdquo;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要：&ldquo;重要的道理明白太晚将抱憾终生！&rdquo;所以放在每一条，让刚刚毕业的朋友们早点看到哈！</p>
<p>2、一定要确定自己的<strong><font color="#ff0000">发展方向</font></strong>，并<font color="#ff0000">为此目的制定可行的计划</font>。<br />
&nbsp;&nbsp;&nbsp; 不要说什么，&ldquo;我刚毕业，还不知道将来可能做什么？&rdquo;，&ldquo;跟着感觉走，先做做看&rdquo;。因为，这样的观点会通过 你的潜意识去暗示你的行为无所事事、碌碌无为。<u><font color="#800080">一直做技术，将来成为专家级人物？向管理方向走，成为职业经理人？先熟悉行业和领域，将来自立门户？</font></u>还是先 在行业里面混混，过几年转行做点别的？这很重要，它将决定你近几年、十年内&ldquo;做什么事情才是在做正确的事情！&rdquo;。</p>
<p>&nbsp;</p><p><br />
3、软件开发团队中，技术不是万能的，但没有技术是万万不能的！<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在技术型团队中，技术与人品同等重要，当然长相也比较重要哈，尤其在MM比较多的团队中。在软件项目团队 中，技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码，还是产品管理、测试、文档、实施、维护，多少你都要有技术基础。算我孤 陋寡闻，我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目，哪怕就一个，也没有看到。倒是曾经看到过一个&ldquo;高学历的牛人&rdquo;（非 技术型）带一堆人做完过一个项目，项目交付的第二天，项目组成员扔下一句&ldquo;再也受不了啦！&rdquo;四分五裂、各奔东西。那个项目的&ldquo;成功度&rdquo;大家可想而知了。</p>
<p><br />
4、<strong><font color="#ff0000">详细制定自己软件开发专业知识学习计划，并注意及时修正和调整（软件开发技术变化实在太快）。</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 请牢记：&ldquo;如果一个软件开发人员在1、2年内都没有更新过自己的知识，那么，其实他已经不再属于这个行业了。&rdquo;不要告诉自己没有时间。来自时间管理领域的著名的&ldquo;三八原则&rdquo;告诫我们：另外的那8小时如何使用 将决定你的人生成败！本人自毕业以来，平均每天实际学习时间超过2小时。</p>
<p><br />
5、书籍是人类进步的阶梯，对软件开发人员尤其如此。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 书籍是学习知识的最有效途径，<em><font color="#339966">不要过多地指望在工作中能遇到&ldquo;世外高人&rdquo;，并不厌其烦地教你。</font></em>对于花钱买书，我个人经验是：<strong><font color="#ff9900">千万别买国内那帮人出的书</font></strong>！我买的那些 家伙出的书，100%全部后悔了，无一本例外。更气愤的是，这些书在二手市场的地摊上都很难卖掉<strong><font color="#ff0000">。&ldquo;拥有书籍并不表示拥有知识；拥有知识并不表示拥有技 能；拥有技能并不表示拥有文化；拥有文化并不表示拥有智慧。&rdquo;只有将书本变成的自己智慧，才算是真正拥有了它。</font></strong></p>
<p><br />
6、<strong><font color="#ff0000">不要仅局限于对某项 技术的表面使用上，哪怕你只是偶尔用一、二次。<br />
</font></strong>&nbsp;&nbsp;&nbsp; &nbsp;&ldquo;对任何事物不究就里&rdquo;是任何行业的工程师所不应该具备的素质。开发Windows应用程序，看看 Windows程序的设计、加载、执行原理，分析一下PE文件格式，试试用SDK开发从头开发一个Windows应用程序；用VC＋＋、</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Delphi、Java、.Net开发应用程序，花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码；除了会用J2EE、 JBoss、Spring、Hibernate等等优秀的开源产品或者框架，<strong><font color="#008080">抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的</font></strong>。 试着这样做做，你以后的工作将会少遇到一些让你不明就里、一头雾水的问题，因为，很多东西你&ldquo;知其然且知其所以然&rdquo;！</p>
<p><br />
7、<font color="#800080">在一种语言上编程，但别为其束缚了思想。</font><br />
&nbsp;&nbsp;&nbsp;&nbsp; &ldquo;代码大全&rdquo;中说：&ldquo;深入一门语言编程，不要浮于表面&rdquo;。深入一门语言开发还远远不足，任何编程语言的存在都有其自身的理由， 所以也没有哪门语言是&ldquo;包治百病&rdquo;的&ldquo;灵丹妙药&rdquo;。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 我的经验是：用面对对象工具开发某些关键模块时，为什么不可以借鉴C、C51、汇编的模块化封装方式？用传统的桌面开发工具（目前主要有VC++、Delphi） 进行系统体统结构设计时，为什么不可以参考来自Java社区的IoC、AOP设计思想，甚至借鉴像Spring、Hibernate、JBoss等等优秀 的开源框架？在进行类似于实时通信、数据采集等功能的设计、实现时，为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式？为什么一切都必须 以个人、团队在当然开发语言上的传统或者经验来解决问题？？？&ldquo;他山之石、可以攻玉&rdquo;。</p>
<p><br />
<strong><font color="#ff0000" size="4">8、养成总结与反思的习惯，并有意识地提炼日常工作成果，形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp; 众所周知，对软件开发人员而言，有、无经验的一个显著区别是：无经验 者完成任何任务时都从头开始，而有经验者往往通过重组自己的可复用模块、类库来解决问题（其实这个结论不应该被局限在软件开发领域、可以延伸到很多方 面）。这并不是说，所有可复用的东西都必须自己实现，别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是，最好还是自己实现，这样没 有知识产权、版权等问题，关键是自己实现后能真正掌握这个知识点，拥有这个技能。</p>
<p><br />
<strong><font size="4">9、理论与实践并重，内外双修。</font></strong><br />
&nbsp;&nbsp;&nbsp; 工程师的内涵是：以工 程师的眼光观察、分析事物和世界。一个合格的软件工程师，是真正理解了软件产品的本质及软件产品研发的思想精髓的人（个人观点、欢迎探讨）。掌握软件开发 语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作，但从软件工程师这个角度来看，这只是外在的东西，并非重要的、本质的工 作。学习、掌握软件产品开发理论知识、软件开发方法论，并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题，才是真正的软 件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题，并在具体实践中验证和修正这些思想与方式，最终形成自己的理论体系和实用方法论。</p>
<p><br />
<strong><font face="Verdana" size="4">10、心态有多开放，视野就有多开阔。</font></strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不要抱着自己的技术和成果，等到它们都已经过时变成垃圾了，才拿出来丢人现眼。请及时发布自己的研究成果：开发的 产品、有创意的设计或代码，公布出来让大家交流或者使用，你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具，5、6 年之后的今天，还是那个样子，今天流行的好多Windows系统工具都比自己的晚，但进化得很好，且有那么多用户在使用。并且，不要保守自己的技术和思 想，尽可能地与人交流与分享，或者传授给开发团队的成员。&ldquo;与人交换苹果之后，每个人还是只有一个苹果；但交换思想之后，每个人都拥有两种思想&rdquo;，道理大 家都懂，但有多少人真正能做到呢？</p>
<p><br />
<strong><font size="4">11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品，千万不要因为没有钱赚而不做。</font></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 网络早已不再只是&ldquo;虚拟世界&rdquo;，网上有很多的开源项目、合作开发项目、外包项目，这都是涉猎工作以外的知识的绝好机会，并且能够结识更广的人缘。不要因为工 作是做ERP，就不去学习和了解嵌入式、实时、通信、网络等方面的技术，反过来也是一样。如果当别人拿着合同找你合作，你却这也不会，那也不熟时，你将后 悔莫及。</p>
<p><strong><font size="4">12、书到用时方恨少，不要将自己的知识面仅仅局限于技术方面。</font></strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 诺贝尔经济学奖得主西蒙教授的研究结果表明：&ldquo;对于一个有一定基础的人来说，他只要真正肯下功夫，在6个月内就可以掌握任何一门学问。&rdquo;教育心理学界为感谢西蒙教授的研究成果，故命名为西蒙学习法。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可见，掌握一门陌生的学问远远没有想象的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识，有空花时间看看，韬光养晦、未雨绸缪。</p>
<p><br />
13、本文的总结与反思：<br />
&nbsp;<font color="#800080" size="4">A：不要去做技术上的高手，除非你的目标如此。虽然本文是关于提高软件开发知识的建议，做技术的高手是我一向都不赞同的。你可以提高自己的专业知识，但能胜任工作即止。<br />
&nbsp;B：提高软件知识和技术只是问题的表面，<strong><font color="#ff0000">本质是要提高自己认识问题、分析问题、解决问题的思想高度</font></strong>。软件专业知识的很多方法和原理，可以很容易地延伸、应用到生活的其它方面。<br />
&nbsp;C：在能胜任工作的基础上，立即去涉猎其它领域的专业知识，丰富自己的知识体系、提高自己的综合素质，尤其是那些目标不在技术方面的朋友。</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=731</link>
      <title><![CDATA[今天用别人的webform分页控件，遇到的一个怪问题。]]></title>
      <author>一线风</author>
      <category>工作相关</category>
      <pubDate>2009-12-3 17:00:01</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=731</guid>
      <comments>
              /Blog/Blog.aspx?Id=731#commentbox
            </comments>
      <description><![CDATA[<p>控件的当前页PageIndex是在控件的PageChanged事件后改变的，所以传入底层时，不能在Page_Load里写，在这儿写的时候PageChanged方法还没有执行。是获取不到正确的PageInddex的。但是我把底层的查询置于PageChanged后又发现PageIndex始终是1 ，死也不变，搞了一两个小时，最后还是问老黄，他看了会儿才说这个控件是必须不能在所在form里使用enableviewstate属性的，不管是true还是false，而我是一开始就关闭了这个viewstate，最不喜欢的就是这个东东了。</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=729</link>
      <title><![CDATA[地球不是人类的，但是人类却是地球的。--2012观后感]]></title>
      <author>一线风</author>
      <category>游戏娱乐</category>
      <pubDate>2009-11-24 10:03:13</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=729</guid>
      <comments>
              /Blog/Blog.aspx?Id=729#commentbox
            </comments>
      <description><![CDATA[<p>上周未看完了2012，确实不错。值得一看。一直想写一下，不过工作比较忙，加上最近事情也比较多，就一直没有写，但是刚才看到CB上的一个砖家的言论后就不得不写一下了！</p>
<p><img alt="01" border="0" src="/Upload/2009_11/24_100237_3886646_thumb.jpg" /></p>
<p>&nbsp;</p><p>原文地址：<a href="http://www.cnbeta.com/articles/98455.htm">http://www.cnbeta.com/articles/98455.htm</a><br />
砖家给出了4个理由来反驳2012是世界未日，可是我发现它写的东东，它自已都不信。都没有明确和肯定的结论。还有第一个的比较，太扯淡了。地磁对人的影响，是可以不计，它真正影响的是太阳的高能粒子，将这些高能粒子给转到南北两极，而不是直接投射到地个上，如果要造一个这样效果的磁铁，你要造多大的磁铁才能做 到这个效果？</p>
<p>并且2012年太阳太黑子确实会大规模的爆发，这有多少影响知道吗？ 它们会影向暴露在阳光下人们的皮肤，它们会影响作物的生长，它们会使卫星能通信受到非常严重的影响。这些还不够吗？ 假设突然出现不可预测的大爆发，大阳风大量的的能量来到地球，加速两极冰盖的融化，这些还不够吓人的吗？</p>
<p>人类在其历史的短短的进程中，像病毒一样，把地球给搞的千疮百孔的。地球呢？现在已经开始显示出她自我调节能力了，近年来的未明的病毒，如果调节不过来，那真的是未日不远！ 我相信地球随咳嗽一下，抖几下身子，那结果可想而知了。人类能通过这弹那弹来毁灭的只能是人类，而不是地球。</p>
<p>如果，2012真的是未日，那也是人类的未日，不是地球的未日。</p>
<p>如果，2012真的是未日，你会去做什么？在这两年内。</p>
<p>【附：为什么现在GOV一直在不停洗老百姓的米？我可以认为是在制做诺亚方舟不？】</p>
<p>胡言乱语，一家之言，如明雷同，那也活该！</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=728</link>
      <title><![CDATA[韩寒:我接受谷歌的六十美元 欢迎谷歌扫描我的图书]]></title>
      <author>一线风</author>
      <category>视角杂谈</category>
      <pubDate>2009-11-23 9:19:50</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=728</guid>
      <comments>
              /Blog/Blog.aspx?Id=728#commentbox
            </comments>
      <description><![CDATA[<p style="text-indent: 2em">我欢迎谷歌图书馆扫描我的每一本图书，并欣然接受在显示目录和摘要下60美元一本的条件。之前对于谷歌的指责是因为我在接受采访时受到了某些媒体的误导，而当时在外地比赛并无查证的时间和条件，特此收回。</p>
<p style="text-indent: 2em">经过对比，我发现这是非常合适的一个条件，谷歌只显示我的书的目录和摘要，就支付给我60美元。回首祖国，无数的网站都能下载我的书的全文，从1999年2009年，我从来没有收到过一分钱。现在谷歌仅仅刊登了我的书的目录，就支付给我60美金，我觉得非常的满足。这十年来，我曾一度接近可以通过互联网赚点稿费，在2000年的时候，某中文网曾经和我签约第一本书的电子版权，在点击和下载量终于可以接近10000人民币的时候，突然间所有数据都变成0了，后来就再也没有人提起过这事。在中国，唯独起点中文网支付给我网络连载的费用，但那是针对尚未出版的新小说。</p><div class="articleContent" id="articleBody">
<p style="text-indent: 2em">我欢迎谷歌图书馆扫描我的每一本图书，并欣然接受在显示目录和摘要下60美元一本的条件。之前对于谷歌的指责是因为我在接受采访时受到了某些媒体的误导，而当时在外地比赛并无查证的时间和条件，特此收回。</p>
<p style="text-indent: 2em">经过对比，我发现这是非常合适的一个条件，谷歌只显示我的书的目录和摘要，就支付给我60美元。回首祖国，无数的网站都能下载我的书的全文，从1999年2009年，我从来没有收到过一分钱。现在谷歌仅仅刊登了我的书的目录，就支付给我60美金，我觉得非常的满足。这十年来，我曾一度接近可以通过互联网赚点稿费，在2000年的时候，某中文网曾经和我签约第一本书的电子版权，在点击和下载量终于可以接近10000人民币的时候，突然间所有数据都变成0了，后来就再也没有人提起过这事。在中国，唯独起点中文网支付给我网络连载的费用，但那是针对尚未出版的新小说。</p>
<p style="text-indent: 2em">而谷歌支付的这60美元仅仅是个目录而已，如果有人要全文下载，那需要另外收费，如果我拿七谷歌拿三，我认为是非常合理的，因为在传统出版中，我只拿一，书店要拿到四到五。</p>
<p style="text-indent: 2em">在谷歌数字图书馆之前，作为内行，我甚至都不知道中国还有文字著作协会。我一直以为在中国负责版权保护的人都已经死绝了。可能打击国内的盗版网站工作量大而且没有什么钱可以赚吧，所以他们一直潜伏着没有出动。也可能对中国的所谓版权保护协会来说，有奶才是敌。既然有这个协会，那我恳请他们帮我维权，打击除了谷歌以外一切可以免费阅读下载我的长篇小说全文的文学网站（我愿意将我的杂文，散文，短篇小说在网络上免费共享，但长篇小说和整本图书实在不行，希望大家留我一条生路，虽然如此，如果你要强行共享，也完全可以搜索到我的任何文字）。</p>
<p style="text-indent: 2em">谷歌是第一个愿意就已出版图书支付给我钱的网站，出于对先烈的优惠，我给他们打五折，也就是30美元一本，即可获得我的授权。</p>
<p style="text-indent: 2em">特此申明。</p>
<p style="text-indent: 2em">韩寒。</p>
</div>
<!--   -->]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=727</link>
      <title><![CDATA[更改配置app.Config里的值]]></title>
      <author>一线风</author>
      <category>工作相关</category>
      <pubDate>2009-11-17 17:53:37</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=727</guid>
      <comments>
              /Blog/Blog.aspx?Id=727#commentbox
            </comments>
      <description><![CDATA[<div class="codeText">
<div class="codeHead">C#代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>&nbsp;System.Configuration.Configuration&nbsp;config&nbsp;= &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;AppSettingsSection&nbsp;appSetcion&nbsp;=&nbsp;config.GetSection(</span><span class="string">&quot;appSettings&quot;</span><span>)&nbsp;</span><span class="keyword">as</span><span>&nbsp;AppSettingsSection; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;appSetcion.Settings[</span><span class="string">&quot;AutoRun&quot;</span><span>].Value&nbsp;=&nbsp;</span><span class="string">&quot;this&nbsp;is&nbsp;&nbsp;a&nbsp;test&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//&nbsp;ConfigurationManager.AppSettings[&quot;Save&quot;]&nbsp;=&nbsp;isCheck.ToString(); </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;txtMessage.Text&nbsp;+=&nbsp;ConfigurationManager.AppSettings[</span><span class="string">&quot;AutoRun&quot;</span><span>]; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;config.Save(); &nbsp;&nbsp;</span></li>
</ol>
</div><div class="codeText">
<div class="codeHead">更改自动定义配置的C#代码</div>
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">bool</span><span>&nbsp;isCheck&nbsp;=&nbsp;chkAutoRun.Checked; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Configuration.Configuration&nbsp;config&nbsp;=&nbsp;ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CoreSection&nbsp;core&nbsp;=&nbsp;config.GetSection(</span><span class="string">&quot;coreSection&quot;</span><span>)&nbsp;</span><span class="keyword">as</span><span>&nbsp;CoreSection; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>&nbsp;(core&nbsp;!=&nbsp;</span><span class="keyword">null</span><span>)&nbsp;core.AutoRun&nbsp;=&nbsp;isCheck; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;config.Save();&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>注意：要使用Section操作才行。直接用Appsettting[&quot;somekey&quot;]是不行的</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=726</link>
      <title><![CDATA[简历更新，更新对Xhtml，DIV，CSS的一些认识]]></title>
      <author>一线风</author>
      <category>工作相关</category>
      <pubDate>2009-11-11 17:31:24</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=726</guid>
      <comments>
              /Blog/Blog.aspx?Id=726#commentbox
            </comments>
      <description><![CDATA[<p>今天对简历进行了更新，因为女朋友最近在学习DIV+CSS，我也跟着一块学了学，刚好，把学到的差不多都用上了。修正了一些原先的错误观念，修改过后还是有点心得的，呵！<br />
<br />
总结：<br />
-------------------------<br />
1. CSS应用了float属性后要同时申请宽度定义,widht:auto，这个是标准问题<br />
2. CSS应用了float后在下面要应用clear:both;清除，否则float元素会脱离上一级元素<br />
3. W3C很变态，target=&quot;_blank&quot; 不符合规范了<br />
4. 想让固定尺寸的DIV居中于屏幕的话，除了最上层的DIV的texta-align:center;外还要在其下层的DIV里写上margin-Right: auto; margin-Left: auto;才行</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=725</link>
      <title><![CDATA[IE6真的过时了？]]></title>
      <author>一线风</author>
      <category>生活杂谈</category>
      <pubDate>2009-11-4 21:43:42</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=725</guid>
      <comments>
              /Blog/Blog.aspx?Id=725#commentbox
            </comments>
      <description><![CDATA[<p>最近，大概有一个月左右吧，用Maxthon时老是卡死，刚才在CNBLOGS上发文章时点个插入代码也卡死了，不论是Maxthon还是IE6，在Firefox里就好好的。哎~估计是IE6真的老去了。我也有点老了，是该换的时候了。换上IE8，明显有好转了。当初留着IE6是为了测试兼容性的。各位没有升级的朋友，也出现这个问题的话，不防升级试一下！</p>
<p>&nbsp;</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=724</link>
      <title><![CDATA[使用Oracle提供的Oracle.DataAccess 返回包里的记录集游标，含Oralce里的分页包代码]]></title>
      <author>一线风</author>
      <category>工作相关</category>
      <pubDate>2009-11-4 17:41:02</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=724</guid>
      <comments>
              /Blog/Blog.aspx?Id=724#commentbox
            </comments>
      <description><![CDATA[<p>C#里的调用代码</p>
<div class="codeText">
<div class="codeHead">C#代码</div>
<ol class="dp-c">
    <li class="alt"><span><span>[Test] &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;Page1Test() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">using</span><span>(Database&nbsp;db&nbsp;=&nbsp;DBFactory.Create()) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">const</span><span>&nbsp;</span><span class="keyword">string</span><span>&nbsp;sql&nbsp;=&nbsp;</span><span class="string">&quot;&nbsp;select&nbsp;*&nbsp;from&nbsp;test_temp&nbsp;where&nbsp;ID&nbsp;&lt;&nbsp;1000&nbsp;order&nbsp;by&nbsp;id&nbsp;asc&nbsp;&quot;</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OracleCommand&nbsp;cmd&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;OracleCommand(</span><span class="string">&quot;PAGESPLIT_PKG.PAGESPLIT_SP&quot;</span><span>,db.Connection); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.CommandType&nbsp;=&nbsp;CommandType.StoredProcedure; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OracleParameter&nbsp;p1&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;OracleParameter(</span><span class="string">&quot;pagesize&quot;</span><span>,&nbsp;OracleDbType.Int32); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1.Direction&nbsp;=&nbsp;ParameterDirection.Input; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1.Value&nbsp;=&nbsp;20; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OracleParameter&nbsp;p2&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;OracleParameter(</span><span class="string">&quot;pageindex&quot;</span><span>,&nbsp;OracleDbType.Int32); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.Direction&nbsp;=&nbsp;ParameterDirection.Input; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2.Value&nbsp;=&nbsp;2; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OracleParameter&nbsp;p3&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;OracleParameter(</span><span class="string">&quot;sqltext&quot;</span><span>,&nbsp;OracleDbType.Varchar2); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3.Direction&nbsp;=&nbsp;ParameterDirection.Input; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p3.Value&nbsp;=&nbsp;sql; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OracleParameter&nbsp;p4&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;OracleParameter(</span><span class="string">&quot;Records_out&quot;</span><span>,&nbsp;OracleDbType.Int32,DBNull.Value,ParameterDirection.Output);&nbsp;</span><span class="comment">//就算是空值也要写，否则是会出错的 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OracleParameter&nbsp;p5&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;OracleParameter(</span><span class="string">&quot;table_out&quot;</span><span>,&nbsp;OracleDbType.RefCursor,DBNull.Value,&nbsp;ParameterDirection.Output); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Parameters.Add(p1); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Parameters.Add(p2); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Parameters.Add(p3); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Parameters.Add(p4); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cmd.Parameters.Add(p5); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OracleDataAdapter&nbsp;da&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;OracleDataAdapter(cmd); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSet&nbsp;ds&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;DataSet(); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;da.Fill(ds); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(ds.Tables.Count); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(ds.Tables[0].TableName); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(ds.Tables[0].Rows.Count); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(</span><span class="string">&quot;结果:&quot;</span><span>&nbsp;+&nbsp;cmd.Parameters[</span><span class="string">&quot;Records_out&quot;</span><span>].Value.ToString()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">foreach</span><span>(DataRow&nbsp;&nbsp;row&nbsp;</span><span class="keyword">in</span><span>&nbsp;ds.Tables[0].Rows) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(row[1]); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
</ol>
</div><p>Oracle里的包内容：</p>
<div class="codeText">
<div class="codeHead">SQL代码</div>
<ol class="dp-sql">
    <li class="alt"><span><span class="keyword">create</span><span>&nbsp;</span><span class="op">or</span><span>&nbsp;</span><span class="func">replace</span><span>&nbsp;package&nbsp;PageSplit_PKG&nbsp;</span><span class="keyword">as</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span class="comment">----------------------------------------------------------------------- </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">--&nbsp;分页模块PageSplitPackage4Oracle&nbsp;V0.01 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">--&nbsp;Author&nbsp;:&nbsp;zhouyu&nbsp;&nbsp;Eamil:atwind@cszi.com </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">--&nbsp;2009-11-4 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">-----------------------------------------------------------------------/ </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;type&nbsp;DataTable&nbsp;</span><span class="keyword">is</span><span>&nbsp;REF&nbsp;</span><span class="keyword">CURSOR</span><span>;&nbsp;&nbsp;</span><span class="comment">--游标类型定义，用于返回数据集 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">procedure</span><span>&nbsp;PageSplit_SP(PageSize&nbsp;</span><span class="keyword">int</span><span>,PageIndex&nbsp;</span><span class="keyword">int</span><span>,SqlText&nbsp;string,Records_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;</span><span class="keyword">int</span><span>,Table_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;DataTable);&nbsp;</span><span class="comment">--申明包里的SP1 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">procedure</span><span>&nbsp;PageSplit_SP(PageSize&nbsp;</span><span class="keyword">int</span><span>,PageIndex&nbsp;</span><span class="keyword">int</span><span>,SqlText&nbsp;string,Records_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;</span><span class="keyword">int</span><span>,Pages_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;</span><span class="keyword">int</span><span>,Table_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;DataTable);&nbsp;</span><span class="comment">--申明包里的SP2 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">procedure</span><span>&nbsp;PageSplit_SP(PageSize&nbsp;</span><span class="keyword">int</span><span>,PageIndex&nbsp;</span><span class="keyword">int</span><span>,SqlText&nbsp;string,SqlTextCount&nbsp;string,Records_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;</span><span class="keyword">int</span><span>,Table_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;DataTable);&nbsp;</span><span class="comment">--申明包里的SP3 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">procedure</span><span>&nbsp;PageSplit_SP(PageSize&nbsp;</span><span class="keyword">int</span><span>,PageIndex&nbsp;</span><span class="keyword">int</span><span>,SqlText&nbsp;string,Table_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;DataTable);&nbsp;</span><span class="comment">--申明包里的SP3 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">end</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">create</span><span>&nbsp;</span><span class="op">or</span><span>&nbsp;</span><span class="func">replace</span><span>&nbsp;package&nbsp;body&nbsp;PageSplit_PKG&nbsp;</span><span class="keyword">as</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">--&nbsp;以下方法来自于网络修改 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">-------------------------------------------------------------------------------------------- </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">--功能描述:&nbsp;大数据量分页通用存储过程,超过100W数据的表，尽量加上索引上的条件 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">--创建时间:&nbsp;2009-11-4 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">--------------------------------------------------------------------------------------------/ </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">procedure</span><span>&nbsp;PageSplit_SP &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageSize&nbsp;</span><span class="keyword">int</span><span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--每页记录数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageIndex&nbsp;</span><span class="keyword">int</span><span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--当前页码,从&nbsp;1&nbsp;开始 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlText&nbsp;string,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--查询语句,含排序部分 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Records_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;</span><span class="keyword">int</span><span>,</span><span class="comment">--返回总记录数 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;DataTable&nbsp;&nbsp;</span><span class="comment">----返回当前页数据记录 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;</span><span class="keyword">as</span><span>&nbsp;&nbsp;</span><span class="comment">--对包中定义的SP1的实现 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;v_sql&nbsp;varchar2(8000);&nbsp;&nbsp;</span><span class="comment">--&nbsp;不要超过32767个字符,不可以使用nvarchar2型,下面用的是to_char() </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;v_count&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;v_maxRownum&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;v_minRownum&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">begin</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--取记录总数 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_sql&nbsp;:=&nbsp;</span><span class="string">'select&nbsp;count(*)&nbsp;from&nbsp;('</span><span>&nbsp;||&nbsp;SqlText&nbsp;||&nbsp;</span><span class="string">')'</span><span>;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--拼接统计Sql </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">execute</span><span>&nbsp;immediate&nbsp;v_sql&nbsp;</span><span class="keyword">into</span><span>&nbsp;v_count;&nbsp;</span><span class="comment">--执行统计 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Records_out&nbsp;:=&nbsp;v_count; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--行位置判断 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_maxRownum&nbsp;:=&nbsp;PageIndex&nbsp;*&nbsp;PageSize; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_minRownum&nbsp;:=&nbsp;v_maxRownum&nbsp;-&nbsp;PageSize&nbsp;+&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--拼接查询语句 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_sql&nbsp;:=&nbsp;</span><span class="string">'SELECT&nbsp;* </span>&nbsp;</li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;( </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;A.*,&nbsp;rownum&nbsp;rn </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;('</span><span>||&nbsp;SqlText&nbsp;||</span><span class="string">')&nbsp;A </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;rownum&nbsp;&lt;=&nbsp;'</span><span>||&nbsp;to_char(v_maxRownum)&nbsp;||&nbsp;</span><span class="string">' </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;B </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;rn&nbsp;&gt;=&nbsp;'</span><span>&nbsp;||&nbsp;to_char(v_minRownum)&nbsp;; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">open</span><span>&nbsp;Table_out&nbsp;</span><span class="keyword">for</span><span>&nbsp;&nbsp;v_sql; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">end</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>/***************************************************************** &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;*功能描述:&nbsp;大数据量分页通用存储过程(重载1,直接返回分页数量) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;*创建时间:&nbsp;2009-11-3 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;*****************************************************************/ &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">procedure</span><span>&nbsp;PageSplit_SP &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageSize&nbsp;</span><span class="keyword">int</span><span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--每页记录数 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageIndex&nbsp;</span><span class="keyword">int</span><span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--当前页码,从&nbsp;1&nbsp;开始 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlText&nbsp;string,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--查询语句,含排序部分 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Records_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;</span><span class="keyword">int</span><span>,</span><span class="comment">--返回总记录数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Pages_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;</span><span class="keyword">int</span><span>,&nbsp;&nbsp;</span><span class="comment">--返回分出的页数 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;DataTable&nbsp;&nbsp;</span><span class="comment">----返回当前页数据记录 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">as</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_sql&nbsp;varchar2(8000); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_count&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_maxRownum&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_minRownum&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">begin</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">----取记录总数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_sql&nbsp;:=&nbsp;</span><span class="string">'select&nbsp;count(*)&nbsp;from&nbsp;('</span><span>&nbsp;||&nbsp;SqlText&nbsp;||&nbsp;</span><span class="string">')'</span><span>;&nbsp;&nbsp;</span><span class="comment">--生成统计字符串 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">execute</span><span>&nbsp;immediate&nbsp;v_sql&nbsp;</span><span class="keyword">into</span><span>&nbsp;v_count;&nbsp;</span><span class="comment">--执行统计 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Records_out&nbsp;:=&nbsp;v_count; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--行位置判断 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_maxRownum&nbsp;:=&nbsp;PageIndex&nbsp;*&nbsp;PageSize; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_minRownum&nbsp;:=&nbsp;v_maxRownum&nbsp;-&nbsp;PageSize&nbsp;+&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--拼接查询语句 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_sql&nbsp;:=&nbsp;</span><span class="string">'SELECT&nbsp;* </span>&nbsp;</li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;( </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;A.*,&nbsp;rownum&nbsp;rn </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;('</span><span>||&nbsp;SqlText&nbsp;||</span><span class="string">')&nbsp;A </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;rownum&nbsp;&lt;=&nbsp;'</span><span>||&nbsp;to_char(v_maxRownum)&nbsp;||&nbsp;</span><span class="string">' </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;B </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;rn&nbsp;&gt;=&nbsp;'</span><span>&nbsp;||&nbsp;to_char(v_minRownum)&nbsp;; &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">OPEN</span><span>&nbsp;Table_out&nbsp;</span><span class="keyword">FOR</span><span>&nbsp;&nbsp;v_sql; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">end</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>/***************************************************************** &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;*功能描述:&nbsp;大数据量分页通用存储过程(重载2，自定义统计查询，推荐使用) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;*创建时间:&nbsp;2009-11-3 &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;*****************************************************************/ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">procedure</span><span>&nbsp;PageSplit_SP &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageSize&nbsp;</span><span class="keyword">int</span><span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--每页记录数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageIndex&nbsp;</span><span class="keyword">int</span><span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--当前页码,从&nbsp;1&nbsp;开始 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlText&nbsp;string,&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--查询语句,含排序部分 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlTextCount&nbsp;string,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--获取记录总数的查询语句 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Records_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;</span><span class="keyword">int</span><span>,&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--返回总记录数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;DataTable) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">as</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_sql&nbsp;varchar2(8000); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_count&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_maxRownum&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_minRownum&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">begin</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">----取记录总数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">execute</span><span>&nbsp;immediate&nbsp;SqlTextCount&nbsp;</span><span class="keyword">into</span><span>&nbsp;v_count; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Records_out&nbsp;:=&nbsp;v_count; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">----执行分页查询 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_maxRownum&nbsp;:=&nbsp;PageIndex&nbsp;*&nbsp;PageSize; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_minRownum&nbsp;:=&nbsp;v_maxRownum&nbsp;-&nbsp;PageSize&nbsp;+&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_sql&nbsp;:=&nbsp;</span><span class="string">'SELECT&nbsp;* </span>&nbsp;</li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;( </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;A.*,&nbsp;rownum&nbsp;rn </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;('</span><span>||&nbsp;SqlText&nbsp;||</span><span class="string">')&nbsp;A </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;rownum&nbsp;&lt;=&nbsp;'</span><span>||&nbsp;to_char(v_maxRownum)&nbsp;||&nbsp;</span><span class="string">' </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;B </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;rn&nbsp;&gt;=&nbsp;'</span><span>&nbsp;||&nbsp;to_char(v_minRownum)&nbsp;; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">OPEN</span><span>&nbsp;Table_out&nbsp;</span><span class="keyword">FOR</span><span>&nbsp;&nbsp;v_sql; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">end</span><span>&nbsp;; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>/***************************************************************** &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;*功能描述:&nbsp;大数据量分页通用存储过程(重载3，不输出总记录数，适用于外部分页计算，内部直选记录集，DB计算压力最小) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;*创建时间:&nbsp;2009-11-3 &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;*****************************************************************/ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">procedure</span><span>&nbsp;PageSplit_SP &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;( &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageSize&nbsp;</span><span class="keyword">int</span><span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--每页记录数 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PageIndex&nbsp;</span><span class="keyword">int</span><span>,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--当前页码,从&nbsp;1&nbsp;开始 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlText&nbsp;string,&nbsp;&nbsp;</span><span class="comment">--查询语句,含排序部分 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Table_out&nbsp;</span><span class="keyword">out</span><span>&nbsp;DataTable &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">as</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_sql&nbsp;varchar2(8000); &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_maxRownum&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_minRownum&nbsp;</span><span class="keyword">int</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">begin</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">----执行分页查询 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_maxRownum&nbsp;:=&nbsp;PageIndex&nbsp;*&nbsp;PageSize; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_minRownum&nbsp;:=&nbsp;v_maxRownum&nbsp;-&nbsp;PageSize&nbsp;+&nbsp;1; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_sql&nbsp;:=&nbsp;</span><span class="string">'SELECT&nbsp;* </span>&nbsp;</li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;( </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;A.*,&nbsp;rownum&nbsp;rn </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;('</span><span>||&nbsp;SqlText&nbsp;||</span><span class="string">')&nbsp;A </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;rownum&nbsp;&lt;=&nbsp;'</span><span>||&nbsp;to_char(v_maxRownum)&nbsp;||&nbsp;</span><span class="string">' </span>&nbsp;</span></li>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)&nbsp;B </span>&nbsp;</span></li>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;rn&nbsp;&gt;=&nbsp;'</span><span>&nbsp;||&nbsp;to_char(v_minRownum)&nbsp;; &nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">OPEN</span><span>&nbsp;Table_out&nbsp;</span><span class="keyword">FOR</span><span>&nbsp;&nbsp;v_sql; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">end</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">end</span><span>;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>在Toad里编译能通过，PLSQL Developer里则有问题。不知啥原因，知道的高人回答一下。呵~~~</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=723</link>
      <title><![CDATA[时代的声音，收集网上的网友的各种言论]]></title>
      <author>一线风</author>
      <category>视角杂谈</category>
      <pubDate>2009-11-4 9:22:56</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=723</guid>
      <comments>
              /Blog/Blog.aspx?Id=723#commentbox
            </comments>
      <description><![CDATA[<p>一个谷歌挨骂，N个协会捞钱<br />
<br />
谷歌版权门这件事，100％跟垄断没关。<br />
<br />
有关的就是钱，关键是怎么从中捞钱。<br />
<br />
曾经有个牙防组，捞钱捞到万人唾骂，关键是不合法，结果OVER了。 后来捞钱的都学精了，一定要合法，一定要国际接轨，一定要官商一体化，钱一定要收的明白，分的糊涂。 典型榜样是音著协。 横行于KTV，连黑社会都怕的音著协，实在是令人羡慕，同时也惹人警惕。 所以， 高举正义之旗，站在同谷歌数字图书馆斗争第一线的&ldquo;文著协&rdquo;，自然被人质疑动机不纯。 文著协的全称是中国文字著作权协会，是被官方认定为合法代表中国著作权人利益的机构。 这个文著协， 2007年超星数字图书馆成为网络第一版权盗版大案的时候，躲猫猫。 2009年Google同美国司法机构达成60美元和解协议之后，突然，不打酱油，改见义勇为。 为什么？ 贫僧的答案是： 1. 肯定不是良心发现。 2. 肯定不是替中国国家数字图书馆呼吁中国作家免费捐赠版权，对抗谷歌。 3. 肯定不是帮方正4800元的电子书，炒作物超所值。 4. 肯定不是为新闻出版署厘清中国数字版权定价机制。 5. 肯定不是超星图书馆打击竞争对手的托儿。 So， 文著协，就是想借谷歌版权门免费多招收点儿作家会员。 互联网时代了嘛。 权咱已经有了，咱手里再有足够多的用户，自然要风得风，要钱来钱。 音著协一个一个查KTV多费劲啊，咱文著协盯住全世界电子书这股潮流，找谷歌，找百度，找搜狗，找亚马逊，找中国...</p><p>后面的都准备写在评论里了。这样方便。嗯！</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=722</link>
      <title><![CDATA[Oracle插入性能小测]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-11-3 15:53:17</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=722</guid>
      <comments>
              /Blog/Blog.aspx?Id=722#commentbox
            </comments>
      <description><![CDATA[<p>因为测试一些东东，需要一些数据，因此就写了个增加数据的东东。这个一来能满足写入的数据，二来能顺便测试一下Oracle的性能。</p>
<p>&nbsp;</p>
<div class="codeText">
<div class="codeHead">SQL代码</div>
<ol class="dp-sql">
    <li class="alt"><span><span>&nbsp;</span><span class="keyword">declare</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>maxrecords&nbsp;constant&nbsp;</span><span class="keyword">int</span><span>:=1000000; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>i&nbsp;</span><span class="keyword">int</span><span>&nbsp;:=1; &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">Begin</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">for</span><span>&nbsp;i&nbsp;</span><span class="op">in</span><span>&nbsp;1..maxrecords&nbsp;loop &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">Insert</span><span>&nbsp;</span><span class="keyword">into</span><span>&nbsp;TEST_TEMP(</span><span class="keyword">NAME</span><span>)&nbsp;</span><span class="keyword">values</span><span>&nbsp;(SYS_GUID()); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">end</span><span>&nbsp;loop; &nbsp;&nbsp;</span></li>
    <li class=""><span>dbms_output.put_line(</span><span class="string">'&nbsp;OK&nbsp;'</span><span>); &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">commit</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">end</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="comment">--100W&nbsp;325.969&nbsp;s</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<p><br />
服务器环境：</p>
<p>linux as 4 + oracle 10g 内存1G，Xeon3.0G 处于Windows平台下的虚拟机。</p><p>差不多每秒种3000多条数据，第二次执行的时候是318秒多一点。</p>
<p>select count(0) from test_temp 时约0.2秒大右，加上ID&gt; 300000的条件，为0.02秒左右。</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=721</link>
      <title><![CDATA[Oracle 新增记录并返回新增加的ID]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-11-2 17:21:52</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=721</guid>
      <comments>
              /Blog/Blog.aspx?Id=721#commentbox
            </comments>
      <description><![CDATA[<div>Oracle 新增记录并返回新增加的ID</div>
<div>&nbsp;</div>
<div>&nbsp;
<div class="codeText">
<div class="codeHead">PL/SQL代码</div>
<ol class="dp-sql">
    <li class="alt"><span><span class="keyword">CREATE</span><span>&nbsp;</span><span class="op">OR</span><span>&nbsp;</span><span class="func">REPLACE</span><span>&nbsp;</span><span class="keyword">PROCEDURE</span><span>&nbsp;TEST_TEMP_INSERT_SP&nbsp;( &nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;V_NAME&nbsp;string, &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;V_ID&nbsp;</span><span class="keyword">out</span><span>&nbsp;</span><span class="keyword">int</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">AS</span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">BEGIN</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">INSERT</span><span>&nbsp;</span><span class="keyword">INTO</span><span>&nbsp;TEST_TEMP( &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;</span><span class="keyword">NAME</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;)</span><span class="keyword">VALUES</span><span>( &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;V_NAME &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;) &nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;returning&nbsp;ID&nbsp;</span><span class="keyword">into</span><span>&nbsp;V_ID&nbsp;&nbsp;; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;</span><span class="keyword">COMMIT</span><span>; &nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">END</span><span>;&nbsp;&nbsp;</span></li>
</ol>
</div>
</div>
<p>&nbsp;</p>
<p>ID是用序列和触发器来生成的。</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=720</link>
      <title><![CDATA[莫伸手，伸手必被捉]]></title>
      <author>一线风</author>
      <category>视角杂谈</category>
      <pubDate>2009-11-1 18:59:57</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=720</guid>
      <comments>
              /Blog/Blog.aspx?Id=720#commentbox
            </comments>
      <description><![CDATA[<p style="text-indent: 2em;">今日，上海倒钩一案终于出了初步的结果，政府网站东方网的标题是：上海:坚决依法整治非法营运 坚决禁止不正当取证行为。</p>
<p style="text-indent: 2em;">我们不仅仅要学会做除法，还要学会解读政府的官话。</p>
<p style="text-indent: 2em;">虽然官话里有百分之九十九是废话，但还有百分之一的屁话，这百分之一决定了政府经过考虑以后的方向，里面往往蕴含了很多的讯息。无论从商从政都要有良好的解读能力。</p>
<p style="text-indent: 2em;">从顺序上来说，政府是不甘心的，因为政府强调了要坚决依法整治非法运营，表明了他们咽不下这口气，但是这次的确是栽了，后面那一句坚决禁止不正当取证行为是表示，老子暂时认栽。</p><p style="text-indent: 2em;">但是，政府会两次栽到同一条河里吗？很遗憾，答案是会的。因为正常人都不大会。但是政府经常同样一条河里要掉好多次，只是在不同的地方以不同的姿势掉进去。当然，永远淹不死那就是他的本事了。</p>
<p style="text-indent: 2em;">我认为，这次的事件中，闵行是占了便宜的，因为舆论的导向最后都指向了浦东新区。说不定闵行出事那会儿，浦东正笑闵行呢，哪知古有孙中山断发明志，今有孙 中界断指明智。上海倒钩茂盛的地方时闵行和南汇，这次南汇并入了浦东，所以浦东也算是继承发扬了原南汇的光荣传统。文章写到这里，提醒大家，无论是从倒钩 数量和次数来说，闵行很可能是老大，勿忘闵行。</p>
<p style="text-indent: 2em;">&nbsp;<wbr></wbr></p>
<p style="text-indent: 2em;">但是这样影响恶劣的事情，为什么市政府的态度从一开始就比较纵容呢，为什么要让这样的事情一再破坏政府的公信力呢？原因之一是一看自己，靠，原来本来就没 什么公信力了，也就算了。原因之二，那就是钱。据报道，在闵行倒钩见报以后，闵行区马上刊登了一个来自运管局的工作报告，报告称，在过去两年里，通过这样 的方法，罚款了5000多万元，超额完成了上级的指标。</p>
<p style="text-indent: 2em;">按照我们的理解，这是很白痴的一件事情，千夫所指的时候还要留人把柄，顶风作案，好比你已经杀了一个人，突然你跳出来说，这两年我其实杀了二十个。但是官 员是很蠢的，他们之所以这么写，是在提醒他们的上级，我有功啊。从黑社会的角度来理解就比较容易，就是大哥说，教训一下这帮人，小弟一出马，弄死一帮，出 事了。小弟立马说，爷，你要保我啊，是你让我干的啊，你看，我都超额完成了，你让我教训一下，我不光教训了，还弄死了二十个。</p>
<p style="text-indent: 2em;">老大一挠头，说，你这个白痴，让你教训一下就好，你弄死人家干嘛呢？</p>
<p style="text-indent: 2em;">小弟说，爷，这不弄死，怎么扬你的威风呢？</p>
<p style="text-indent: 2em;">老大说，事情弄这么大，我暂时也保不住你，你出去避避风头吧。</p>
<p style="text-indent: 2em;">小弟说，爷，你一定得帮我啊，我还帮你多收了5000多万呢。</p>
<p style="text-indent: 2em;">老大，算了算了别说了&hellip;&hellip;</p>
<p style="text-indent: 2em;">&nbsp;<wbr></wbr></p>
<p style="text-indent: 2em;">这样大家就好理解各种关系了，是的，那5000多万赃款是让闵行运管洋洋得意政绩，在这件事情上，我认为不是简单的老大出面说一句我的小弟这次没做好这么 简单的事情，因为这个不是犯错，这是犯罪。还有专家为倒钩辩护说，美国警察也警察倒钩，他们假装吸毒的去倒钩毒贩子。我们且不说这个比喻有多么愚蠢，但我 们做的事情也不是这样的啊，我们干的就是假装吸毒的去倒钩普通人，一看不是就往他手里塞一包毒品，然后立马把人家当贩毒的抓起来。</p>
<p style="text-indent: 2em;">倒钩事件里，政府部门涉嫌到非常多的犯罪行为，包括抢劫罪，诈骗罪，诬陷罪，非法拘禁罪，故意伤害罪和组织黑社会罪，而不是执法不当的行为，我认为上海市 政府的这个处理态度是在转变事情的性质，引导舆论和公众这只是一起执法不当而已。另外，我提醒一下广大的真正的黑车司机，你们最近要小心了，大家都是在这 个生存起来很艰难的城市里混口饭吃，但是按照政府的一贯手腕，倒钩一案过去以后，将进行集中的黑车整治活动，将有更加严密的取证手段和处罚，再加上出租车 刚刚涨价，你们可能要不幸，所以要做好准备。</p>
<p style="text-indent: 2em;">这件事情的合理处理方式，我认为应该是这样的才合理：</p>
<p style="text-indent: 2em;">1，&nbsp;<wbr></wbr> 政府改变出租行业的管理方法，降低入行门槛，减免对出租车司机的压迫。</p>
<p style="text-indent: 2em;">2，&nbsp;<wbr></wbr> 让广大黑车司机成为正规出租车司机。</p>
<p style="text-indent: 2em;">3，&nbsp;<wbr></wbr> 对运管局进行全面的停业整顿。</p>
<p style="text-indent: 2em;">4，&nbsp;<wbr></wbr> 追查5000万抢劫款的用处（虽然这钱对于政府来讲很不起眼）将5000万的抢劫款全部退还到个人，哪怕里面有4000万是真正的黑车处罚，一个健全的美好的城市其实是不存在非法运营这四个字的。</p>
<p style="text-indent: 2em;">5，&nbsp;<wbr></wbr> 对于第一次非法运营的人不做处罚，只做记录，到第二次才实行处罚，这样就可以大大降低甄别失误，如果是好人，就等于告诉他，以后别让人搭车了。</p>
<p style="text-indent: 2em;">6，&nbsp;<wbr></wbr> 对闵行区政府主要领导进行处罚和撤职。对相关人员论罪处罚。</p>
<p style="text-indent: 2em;">7，&nbsp;<wbr></wbr> 副市长（包括）以上级别相关领导引咎辞职。</p>
<p style="text-indent: 2em;">&nbsp;<wbr></wbr></p>
<p style="text-indent: 2em;">以上七条其实是在任何一个法制国家里最常见的处理方法，你可以经常看见其他国家地区的领导因为屁大的事情就引咎辞职，但我国的领导哪怕出了天大的事情都还 巍然不动，最多就道歉一下完事，原因其实很简单，你忍心法办经常和你一张桌子上吃饭的朋友吗？你忍心法办和你在一张床上嫖娼的兄弟吗？</p>
<p style="text-indent: 2em;">所以，解决问题的根本中的根本就是，严禁公务员在一张桌子上吃饭。</p>
<p style="text-indent: 2em;">&nbsp;<wbr></wbr></p>
<p style="text-indent: 2em;">此事如果没有彻底解决的方法，我建议全上海的驾驶员在世博会期间在车上贴上中文英文日文法文大标语告示国外友人：莫伸手，伸手必被捉。</p>
<p style="text-indent: 2em;">这是个什么样的世界啊，写下这句话的原上海市市长陈毅肯定也想不明白一个世纪后的上海，明明是你伸的手，为什么被捉的却是我呢？</p>
<p style="text-indent: 2em;">&nbsp;<wbr></wbr></p>
<p style="text-indent: 2em;">&nbsp;<wbr></wbr></p>
<p style="text-indent: 2em;">最后，随文免费附送陈毅的作品</p>
<p style="text-indent: 2em;">《七古&middot;手莫伸》： 陈毅<br />
手莫伸，伸手必被捉。党和人民在监督，万目睽睽难逃脱。汝言惧捉手不伸，他道不伸能自觉，其实想伸不敢伸，人民咫尺手自缩。岂不爱权位，权位高高耸山岳。 岂不爱粉黛，爱河饮尽犹饥渴。岂不爱推戴，颂歌盈耳神仙乐。第一想到不忘本，来自人民莫作恶。第二想到党培养，无党岂能有所作？第三想到衣食住，若无人民 岂能活？第四想到虽有功，岂无过失应惭怍。吁嗟乎，九牛一毫莫自夸，骄傲自满必翻车。历览古今多少事，成由谦逊败由奢。<br />
<br />
<br />
http://blog.sina.com.cn/s/blog_4701280b0100fk2m.html</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=718</link>
      <title><![CDATA[decimal(numeric )、float 和 real 数据类型的区别]]></title>
      <author>一线风</author>
      <category>工作相关</category>
      <pubDate>2009-10-29 13:40:04</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=718</guid>
      <comments>
              /Blog/Blog.aspx?Id=718#commentbox
            </comments>
      <description><![CDATA[<p><strong>float你不能规定它精度。&nbsp; decimal可以。</strong></p>
<p>decimal(numeric )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同义，用于精确存储数值</p>
<p>float 和 real&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不能精确存储数值</p>
<p><br />
decimal数据类型最多可存储 38 个数字，所有数字都能够放到小数点的右边。decimal数据类型存储了一个准确（精确）的数字表达法；不存储值的近似值。</p>
<p>定义decimal的列、变量和参数的两种特性如下：</p>
<p>p&nbsp;&nbsp; 小数点左边和右边数字之和，不包括小数点。如 123.45,则 p=5，s=2。<br />
指定精度或对象能够控制的数字个数。</p>
<p>s<br />
指定可放到小数点右边的小数位数或数字个数。</p>
<p>p 和 s 必须遵守以下规则：0 &lt;=s&lt;=p&lt;= 38。</p>
<p>numeric和decimal数据类型的默认最大精度值是 38。在 Transact-SQL 中，numeric与decimal数据类型在功能上等效。</p>
<p>当数据值一定要按照指定精确存储时，可以用带有小数的decimal数据类型来存储数字。</p>
<p>float 和 real 数据<br />
float和real数据类型被称为近似的数据类型。在近似数字数据类型方面，float和real数据的使用遵循 IEEE 754 标准。</p>
<p>&nbsp;</p><p>近似数字数据类型并不存储为多数数字指定的精确值，它们只储存这些值的最近似值。在很多应用程序中，指定值与存储值之间的微小差异并不明显。但有时这些差异也值得引起注意。由于float和real数据类型的这种近似性，当要求精确的数字状态时，比如在财务应用程序中，在那些需要舍入的操作中，或在等值核对的操作中，就不使用这些数据类型。这时就要用integer、decimal、money或smallmone数据类型。</p>
<p>在 WHERE 子句搜索条件中（特别是 = 和 &lt;&gt; 运算符），应避免使用float或real列。最好限制使用float和real列做&gt; 或 &lt; 的比较。</p>
<p>IEEE 754 规格提供了四种舍入模式：舍入到最接近的值、上舍入、下舍入和舍入到零。Microsoft&reg; SQL Server&trade; 使用上舍入。所有的数值必须精确到确定的精度，但会产生细小的浮点值变化。因为浮点数字的二进制表示法可以采用很多合法舍入规则中的任意一条，因此我们不可能可靠地量化一个浮点值。</p>
<p>转换 decimal 和 numeric 数据<br />
对于decimal和numeric数据类型，Microsoft&reg; SQL Server&trade; 将精度和小数位数的每个特定组合看作是不同的数据类型。例如，decimal(5,5) 和decimal(5,0) 被当作不同的数据类型。</p>
<p>在 Transact-SQL 语句中，带有小数点的常量自动转换为numeric数据值，且必然使用最小的精度和小数位数。例如，常量 12.345 被转换为numeric值，其精度为 5，小数位为 3。</p>
<p>从decimal或numeric向float或real转换会导致精度损失。从int、smallint、tinyint、float、real、money或smallmoney向decimal或numeric转换会导致溢出。</p>
<p>默认情况下，在将数字转换为较低精度和小数位数的decimal或numeric值时，SQL Server 使用舍入法。然而，如果 SET ARITHABORT 选项为 ON，当发生溢出时，SQL Server 会出现错误。若仅损失精度和小数位数，则不会产生错误。</p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=717</link>
      <title><![CDATA[明基（BenQ）24英寸宽屏液晶显示器 G2411HD （黑色）小测]]></title>
      <author>一线风</author>
      <category>生活杂谈</category>
      <pubDate>2009-10-28 19:45:52</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=717</guid>
      <comments>
              /Blog/Blog.aspx?Id=717#commentbox
            </comments>
      <description><![CDATA[<p><font color="#808080"><strong>友情提示：JD上的东东不一定是最便宜的，有条件还是要去电脑城看看。</strong></font></p>
<p>上周周4在京东上订的。</p>
<p>结果硬是到周二才给送到。比以前慢了太多。这个折腾就不说了。</p>
<p>&nbsp;</p>
<p><dt><font color="#ff0000">优点：<br />
&nbsp;&nbsp;&nbsp; 1. 屏幕大，看电影不错，前提片源是16：9的;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 2. 价格合适 <br />
&nbsp;&nbsp;&nbsp; 3. 接口比较全</font><dl><dt><font color="#339966">不足：<br />
&nbsp;&nbsp;&nbsp; 1. 做工一般 <br />
&nbsp;&nbsp;&nbsp; 2. 说明书没有，配件一般，真像山寨货 <br />
&nbsp;&nbsp;&nbsp; 3. 开关设计不知是乍想的？ 哎~~~` 基本上每次挪显示器都会误开关</font></dt><dt></dt><dt></dt><dt><font color="#800080">总结：<br />
&nbsp;&nbsp;&nbsp; 没有想像中的好。差很多，比我三年前的170X6差好远。不过看到这个价格我也不说啥了。屏幕正中间上方一个大暗点，左侧还有点色透光。问JD，JD说找Benq的厂家。我也懒得再去折腾了。手里有银子或是对色彩要求比较高的朋友还是买DELL的IPS的那个得了。没银子又想看着大的又对色彩要求不高的就买这个也不错。</font></dt></dl>
<p><img alt="对比1" border="0" src="/Upload/2009_10/28_194431_3954326_thumb.jpg" /><br />
<br />
<br />
在以后的使用中发现问题时会随时增加感受。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</dt></p><p>工厂模式下的信息：</p>
<p><img alt="" src="/Upload/2009_10/28_194444_5987608_thumb.jpg" /></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=716</link>
      <title><![CDATA[用System.Net.Mail给Gmail发信时出现 服务器要求安全连接或客户端未通过身份验证 的解决办法]]></title>
      <author>一线风</author>
      <category>工作相关</category>
      <pubDate>2009-10-28 14:48:45</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=716</guid>
      <comments>
              /Blog/Blog.aspx?Id=716#commentbox
            </comments>
      <description><![CDATA[<p>上午建了一个测试的新账号：<a href="mailto:demo@xxx.com">demo@xxx.com</a>用来测试邮件发送的，可是测试的时候一直提示：</p>
<p>用System.Net.Mail给Gmail发信时：<font color="#ff0000"><strong>System.Net.Mail.SmtpException: SMTP 服务器要求安全连接或客户端未通过身份验证。 服务器响应为: 5.5.1 Authentication Required. Learn more at</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</font></p>
<p>&nbsp;</p>
<p><font color="#ff0000"><font color="#000000">网上查的时候也没有找到。后来在邮件账号的POP设置里<strong>对从现在起所收到的邮件启用 POP</strong> 启用一下就OK了。</font></font></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=715</link>
      <title><![CDATA[每一场傻子之间的战争背后，都蹲着聪明人]]></title>
      <author>一线风</author>
      <category>视角杂谈</category>
      <pubDate>2009-10-24 20:18:08</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=715</guid>
      <comments>
              /Blog/Blog.aspx?Id=715#commentbox
            </comments>
      <description><![CDATA[<p>我想到过google图书馆在中国会引来纠纷，但没想到纠纷的关键词会是&ldquo;60美元&rdquo;和&ldquo;截止日期&rdquo;。<strong>在这两个明显用来渲染和误导的概念背后，真正值得争鸣的议题反而被遗忘了</strong>。大家的眼球集中到&ldquo;买路钱&rdquo;的多少和支付方式上。<br />
文著协和作家们这次走到了一起。<strong>身处地球上版权保护最不利的国家之一，作家们表现得和音著协毫无芥蒂，矛头一致瞄准google，这其实是个小小的奇观。 </strong>在此之前，他们的书在中国被随意盗版复制和发行，从没如此同仇敌忾过；上至央视，下至都市报纸的媒体，也从来没有如此热肠地为他们鼓与呼过。现在，仅仅因为google和图书馆合作，将他们的书扫描为数字版本，他们就愤怒了。</p>
<p>尽管这些扫描后的数字版本从未向公众发行，无损他们分毫的经济利益；尽管google愿意为&ldquo;擅自扫描&rdquo;而向他们支付不少于60美元的支票；尽管google愿意将这些数字图书今后可能产生的发行收益的63％都交给作家（众所周知，在中国，<strong>传统的图书出版行业，作家只能拿到4-10％的版税，而绝大多数情况下他们连这点版税都拿不到，只能拿一笔固定稿酬</strong>），他们还是像被烟头烫了屁股那样跳了起来。</p><p>确实，有人拿烟头烫了他们的屁股，只不过不是google。每一场傻子之间的战争背后，都蹲着聪明人。<br />
<br />
说作家傻，因为他们被当枪头使了还自以为义正词严，他们被文字游戏愚弄了还义愤填膺；说google傻，因为他们花钱都没花对地方。假设，他们把这60美元和63％的发行收入打包给文著协，全权委托后者处理，那不管作家们实际拿到手多少，google数字图书馆项目在中国的推进都会比其他任何国家都顺利。<br />
<br />
有傻子就有聪明人。美国有聪明人，所以美国出版商协会和美国作家协会才会迅速地选择与google和解。在这个豢养了海量律师的国度，如果所谓的&ldquo;擅自扫描&rdquo;真的与现行著作权法和公序良俗相抵触，出版商协会和作家协会是不会放弃向google这个大号金主敲竹杠的机会的。中国也有聪明人，拿烟头烫作家屁股的那些就是。<br />
<br />
最后多说一句：傻子是很可怜的，但某些可怜到极致的人，也脱不了可恨之处。比如王小峰，又一次在不明所以的时候开炮，还洋洋洒洒写了一大篇。读完他的那篇blog我才知道，丫根本连google图书馆是干嘛的都不知道，而所谓&ldquo;股沟&rdquo;对他著作的侵犯也都来自于自虐狂似的臆想。不独他，某律师，某专家，某记者，某作家&hellip;&hellip;一堆人这两天都忙活来忙活去的发言，在基本事实都不清楚的前提下就长篇大论。之所以点王小峰的名，是因为他今年七月份刚写过两篇博客来阐述他关于著作权保护方面的理论，里头的观点跟他现在的观点就不是一回事儿。反正理都在他这边。知道一，能说出十，总能有理，总能概括推演类比&hellip;&hellip;这种人我们在生活中倒也不少见&mdash;&mdash;比如在bbs上的愤青版面，或者京B牌照小汽车的驾驶座上。<br />
<br />
<strong>查看：</strong><a href="http://chezou.blog.sohu.com/134632087.html" target="_blank">原文地址</a><br />
<br />
<strong>欢迎各位访客积极来稿或发言，说出您的意见。</strong><strong>如为转载，烦请注明原文地址，不胜感激。<br />
评论仅代表评论者个人意见，不代表cnBeta观点。</strong></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=714</link>
      <title><![CDATA[可伸缩性最佳实践：来自eBay的经验]]></title>
      <author>一线风</author>
      <category>项目文档</category>
      <pubDate>2009-10-23 12:00:07</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=714</guid>
      <comments>
              /Blog/Blog.aspx?Id=714#commentbox
            </comments>
      <description><![CDATA[<p>转自：<a href="http://www.infoq.com/cn/articles/ebay-scalability-best-practices">http://www.infoq.com/cn/articles/ebay-scalability-best-practices</a></p>
<p>在eBay，可伸缩性是我们每天奋力抵抗的一大架构压力。我们所做的每一项架构及设计决策，身前身后都能看到它的踪影。当我们面对的是全世界数以亿计的用户，每天的页面浏览量超过10亿，系统中的数据量要用皮字节（10<sup>15</sup>或2<sup>50</sup>）来计算&mdash;&mdash;可伸缩性是生死交关的问题。</p>
<div class="vendor-content-box-float">在一个可伸缩的架构中，资源的消耗应该随负载线性（或更佳）上升，负载可由用户流量、数据量等测量。如果说性能衡量的是每一工作单元所需的资源消 耗，可伸缩性则是衡量当工作单元的数量或尺寸增加时，资源消耗的变化情况。换句话说，可伸缩性是整个价格-性能曲线的形状，而不是曲线上某一点的取值。</div>
<p>可伸缩性有很多侧面&mdash;&mdash;事务的方面、运营的方面、还有开发的方面。我们在改善一个Web系统的事务吞吐量的过程中学到了很多经验，本文总结了其中若 干关键的最佳实践。可能很多最佳实践你会觉得似曾相识，也可能有素未谋面的。这些都是开发和运营eBay网站的众人的集体经验结晶。</p><h3>最佳实践 #1：按功能分割</h3>
<p>相关的功能部分应该合在一起，不相关的功能部分应该分割开来&mdash;&mdash;不管你把它叫做SOA、功能分解还是工程秘诀。而且，不相关的功能之间耦合程度越松散，就越能灵活地独立伸缩其中的一部分。</p>
<p>在编码层次，我们无时不刻都在运用这条原则。JAR文件、包、Bundle等等，都是用来隔离和抽象功能的机制。</p>
<p>在应用层次，eBay将不同的功能划分成几个应用程序池。<font color="#ff0000">销售功能由一组应用服务器运行，投标功能由另一组负责，搜索又是另外一组服务器</font>。我们把总 共约16,000台应用服务器分成220个池。这样就可以根据某项功能的资源消耗，单独地伸缩其中一个池。我们也因此得以进一步隔离及合理化资源依赖关系 &mdash;&mdash;比如销售池只需要访问后台资源的一个相对较小的子集。</p>
<p>在数据库层次，我们也采取同样的做法。eBay没有无所不包的单一数据库，相反我们有<font color="#ff0000">一组数据库主机存放用户数据、一组存放商品数据、一组存放购买数据</font>&hellip;&hellip;总共1000个逻辑数据库分布在400台物理主机上。同样，这种做法让我们得以单独为某一类数据伸缩其数据库设施。</p>
<h3>最佳实践 #2：水平切分</h3>
<p>按功能分割对我们的帮助很大，但单凭它还不足以得到完全可伸缩的架构。即使将功能一一解耦，单项功能的资源需求随着时间增长，仍然有可能超出单一系 统的能力。我们常常提醒自己，&ldquo;没有分割就没有伸缩&rdquo;。在单项功能内部，我们需要能把工作负载分解成许多我们有能力驾驭的小单元，让每个单元都能维持良好 的性能价格比。这就是水平分割出场的时候了。</p>
<p>在应用层次，由于eBay将各种交互都设计成无状态的，所以水平分割是轻而易举之事。用标准的负载均衡服务器来路由进入的流量。所有应用服务器都是 均等的，而且任何服务器都不会维持事务性的状态，因此<font color="#ff0000">负载均衡可以任意选择应用服务器</font>。如果需要更多处理能力，只需要简单地增加新的应用服务器。</p>
<p>数据库层次的问题比较有挑战性，原因是数据天生就是有状态的。我们会按照主要的访问路径对数据作水平分割（或称为&ldquo;sharding&rdquo;）。例如用户 数据目前被分割到20台主机上，每台主机存放1/20的用户。随着用户数量的增长，以及每个用户的数据量增长，我们会增加更多的主机，将用户分散到更多的 机器上去。商品数据、购买数据、帐户数据等等也都用同样的方式处理。用例不同，我们分割数据的方案也不同：有些是对<font color="#0000ff">主键简单取模</font>（ID尾数为1的放到第一 台主机，尾数为二的放到下一台，以此类推），有些是按照<font color="#ff0000">ID的区间分割</font>（1-1M、1-2M等等），有些<font color="#ff0000">用一个查找表</font>，还有些是综合以上的策略。不过具体 的分割方案如何，总的思想是支持数据分割及重分割的基础设施在可伸缩性上远比不支持的优越。</p>
<h3>最佳实践 #3：避免分布式事务</h3>
<p>看到这里，你可能在疑惑按功能划分数据和水平划分数据的实践如何满足事务要求。毕竟，几乎任何有意义的操作都要更新一个以上的实体&mdash;&mdash;立即就可以举 出用户和商品的例子。正统的广为人知的答案是：建立跨资源的分布式事务，用两段式提交来保证要么所有资源全都更新，要么全都不更新。很不幸，这种悲观方案 的成本很可观。伸缩、性能和响应延迟都受到协调成本的反面影响，随着依赖的资源数量和客户数量的上升，这些指标都会以几何级数恶化。可用性亦受到限制，因 为所有依赖的资源都必须就位。实用主义的答案是，对于不相关的系统，放宽对它们的跨系统事务的保证。</p>
<p>左右逢源是办不到的。保证跨多个系统或分区之间的即时的一致性，通常既无必要，也不现实。Inktomi的Eric Brewer十年前提出的CAP公理是这样说的：分布式系统的三项重要指标&mdash;&mdash;<strong><font color="#800000">一致性（Consistency）、可用性（Availability）和 分区耐受性（Partition-tolerance）&mdash;&mdash;在任意时刻，只有两项能同时成立</font></strong>。对于高流量的网站来说，我们必须选择分区耐受性，因为它是实 现可伸缩的根本。对于24x7运行的网站，选择可用性也是理所当然的。于是只好放弃即时一致性（immediate consistency）。</p>
<p>在eBay，我们绝对不允许任何形式的客户端或者分布式事务&mdash;&mdash;因此绝不需要两段式提交。在某些经过仔细定义的情形下，我们会将作用于同一个数据库 的若干语句捆绑成单个事务性的操作。而对于绝大部分操作，单条语句是自动提交的。虽然我们故意放宽正统的ACID属性，以致不能在所有地方保证即时一致 性，但现实的结果是大部分系统在绝大部分时间都是可用的。当然我们也<font color="#0000ff">采用了一些技术来帮助系统达到最终的一致性</font>（eventual consistency）：周密调整数据库操作的次序、异步恢复事件，以及数据核对（reconciliation）或者集中决算（settlement batches）。具体选择哪种技术要根据特定用例对一致性的需求来决定。</p>
<p>对于架构师和系统的设计者来说，关键是要明白一致性并非&ldquo;有&rdquo;和&ldquo;没有&rdquo;的单选题。现实中大多数的用例都不要求即时一致性。正如我们经常根据成本和其他压力因素来权衡可用性的高低，一致性也同样可以量体裁衣，根据特定操作的需要而保证适当程度的一致性。&nbsp;</p>
<h3>最佳实践 #4：用异步策略解耦程序</h3>
<p>提高可伸缩性的另一项关键措施是积极地采取异步策略。如果组件A同步调用组件B，那么A和B就是紧密耦合的，而紧耦合的系统其可伸缩性特征是各部分 必须共同进退&mdash;&mdash;要伸缩A必须同时伸缩B。同步调用的组件在可用性方面也面临着同样的问题。我们回到最基本的逻辑：如果A推出B，那么非B推出非A。也就 是说，若B不可用，则A也不可用。如果反过来A和B的联系是异步的，不管是通过队列、多播消息、批处理还是什么其他手段，它们就可以分别地伸缩。而且，此 时A和B的可用性特征是相互独立的&mdash;&mdash;即使B受困或者死掉，A仍然能够继续前进。</p>
<p>整个基础设施从上到下都应该贯彻这项原则。即使在单个组件内部也可通过SEDA（<font color="#0000ff">分阶段的事件驱动架构</font>，Staged Event-Driven Architecture）等技术实现异步性，同时保持一个易于理解的编程模型。组件之间也遵守同样的原则&mdash;&mdash;<font color="#0000ff">尽可能避免同步带来的耦合</font>。在多数情况下， 两个组件在任何事件中都不会有直接的业务联系。<font color="#800000"><strong>在所有的层次，把过程分解为阶段（stages or phases），然后将它们异步地连接起来，这是伸缩的关键。</strong></font></p>
<h3>最佳实践 #5：将过程转变为异步的流</h3>
<p>用异步的原则解耦程序，尽可能将过程变为异步的。对于要求快速响应的系统，这样做可以从根本上减少请求者所经历的响应延迟。对于网站或者交易系统， 牺牲数据或执行的延迟时间（完成全部工作的实践）来换取用户的延迟时间（用户得到响应的时间）是值得的。活动跟踪、单据开付、决算和报表等处理过程显然都 应该属于后台活动。主要用例过程中常常有很多步骤可以进一部分解成异步运行。<font color="#0000ff">任何可以晚点再做的事情都应该晚点再做。</font></p>
<p>还有一个同等重要的方面认识到的人不多：<font color="#3366ff">异步性可以从根本上降低基础设施的成本</font>。同步地执行操作迫使你必须按照负载的峰值来配备基础设施&mdash;&mdash;即使在 任务最重的那一天里任务最重的那一秒，设施也必须有能力立即完成处理。而将昂贵的处理过程转变为异步的流，基础设施就不需要按照峰值来配备，只需要满足平 均负载。而且也不需要立即处理所有的请求，异步队列可以将处理任务分摊到较长的时间里，因而起到削峰的作用。系统的负载变化越大，曲线越多尖峰，就越能从 异步处理中得益。</p>
<h3>最佳实践 #6：虚拟化所有层次</h3>
<p>虚拟化和抽象化无所不在，计算机科学里有一句老话：<font color="#3366ff">所有问题都可以通过增加一个间接层次来解决</font>。操作系统是对硬件的抽象，而许多现代语言所用的虚拟 机又是对操作系统的抽象。对象-关系映射层抽象了数据库。负载均衡器和虚拟IP抽象了网络终端。当我们通过分割数据和程序来提高基础设施的可伸缩性，为各 种分割增加额外的虚拟层次就成为重中之重。</p>
<p>在eBay，我们<font color="#ff0000">虚拟化了数据库</font>。<font color="#ff0000">应用与逻辑数据库交互，逻辑数据库再按照配置映射到某个特定的物理机器和数据库实例</font>。应用也抽象于执行数据分割的 路由逻辑，路由逻辑会把特定的记录（如用户XYZ）分配到指定的分区。这两类抽象都是在我们自己开发的O/R层上实现的。这样虚拟化之后，我们的运营团队 可以按需要在物理主机群上重新分配逻辑主机&mdash;&mdash;分离、合并、移动&mdash;&mdash;而完全不需要接触应用程序代码。</p>
<p>搜索引擎同样是虚拟化的。为了得到搜索结果，<font color="#3366ff">一个聚合器组件会在多个分区上执行并行的查询</font>，但这个高度分割的搜索网格在客户看来只是单一的逻辑索引。</p>
<p>以上种种措施并不只是为了程序员的方便，运营上的灵活性也是一大动机。硬件和软件系统都会故障，请求需要重新路由。组件、机器、分区都会不时增减、 移动。<font color="#3366ff">明智地运用虚拟化，可使高层的设施对以上变化难得糊涂，你也就有了腾挪的余地</font>。虚拟化使基础设施的伸缩成为可能，因为它使伸缩变成可管理的。</p>
<h3>最佳实践 #7：适当地使用缓存</h3>
<p>最后要适当地使用缓存。这里给出的建议不一定普遍适用，因为缓存是否高效极大地依赖于用例的细节。说到底，要在存储约束、对可用性的需求、对陈旧数 据的容忍程度等条件下最大化缓存的命中率，这才是一个高效的缓存系统的最终目标。经验证明，要平衡众多因素是极其困难的，即使暂时达到目标，情况也极可能 随着时间而改变。</p>
<p><font color="#0000ff"><strong>最适合缓存的是很少改变、以读为主的数据&mdash;&mdash;比如元数据、配置信息和静态数据</strong></font>。在eBay，我们积极地缓存这种类型的数据，并且结合使用&ldquo;推&rdquo;和&ldquo; 拉&rdquo;两种方法保持系统在一定程度上的更新同步。减少对相同数据的重复请求能达到非常显著的效果。频繁变更、读写兼有的数据很难有效地缓存。在eBay，我 们大多有意识地回避这样的难题。我们一直不对请求间短暂存在的会话数据作任何缓存。也不在应用层缓存共享的业务对象，比如商品和用户数据。我们有意地牺牲 缓存这些数据的潜在利益，换取可用性和正确性。在此必须指出，其他网站采取了不同的途径，作了不同的取舍，也同样取得了成功。</p>
<p>好东西也会过犹不及。为缓存分配的内存越多，能用来服务单个请求的内存就越少。应用层常常有内存不足的压力，因此这是非常现实的权衡。更重要的一 点，<font color="#0000ff">当你开始依赖于缓存，那么主要系统就只需要满足缓存未命中时的处理要求</font>，自然而然你就会想到可以削减主要系统。但当你这样做之后，系统就完全离不开缓 存了。现在主要系统没办法直接应付全部流量，也就是说网站的可用性取决于缓存能否100%正常运行&mdash;&mdash;潜在的危局。哪怕是例行的操作，比如重新配置缓存资 源、把缓存移动到别的机器、冷启动缓存服务器，都有可能引发严重的问题。</p>
<p>做得好，缓存系统能让可伸缩性的曲线向下弯曲，也就是比线性增长还要好&mdash;&mdash;后续请求从缓存中取数据比从主存储取数据成本低廉。反过来，缓存做得不好 会引入相当多额外的经常耗费，也会妨碍到可用性。我还没见过哪个系统没机会让缓存大展拳脚的，关键是要根据具体情况找到适当缓存策略。</p>
<h3>总结</h3>
<p>可伸缩性有时候被叫做&ldquo;非功能性需求&rdquo;，言下之意是它与功能无关，也就比较不重要。这么说简直错到了极点。我的观点是，可伸缩性是功能的先决条件&mdash;&mdash;优先级为0的需求，比一切需求的优先级都高。</p>
<p>希望以上最佳实践能对你有用，希望能帮助你从新的角度审视你的系统，无论其规模如何。</p>
<h3>参考</h3>
<ul>
    <li><a href="http://www.eos1.dk/qcon/sf2007/slides/public/RandyShoup_eBayArchPrinciples.pdf" target="_blank"><font color="#0b59b2">eBay's Architectural Principles</font></a> (<a href="http://www.infoq.com/presentations/shoup-ebay-architectural-principles" target="_blank"><font color="#0b59b2">video</font></a>)</li>
    <li><a href="http://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html" target="_blank"><font color="#0b59b2">Werner <span class="SpellE">Vogels on scalability</span></font></a></li>
    <li><a href="http://www.addsimplicity.com/downloads/ScalingVectors.pdf" target="_blank"><font color="#0b59b2">Dan Pritchett on You Scaled Your What?</font></a></li>
    <li><a href="http://highscalability.com/unorthodox-approach-database-design-coming-shard" target="_blank"><font color="#0b59b2">The Coming of the Shard</font></a></li>
    <li><a href="http://www.infoq.com/news/2008/03/ebaybase" target="_blank"><font color="#0b59b2">Trading Consistency for Availability in Distributed Architectures</font></a></li>
    <li><a href="http://www.ccs.neu.edu/groups/IEEE/ind-acad/brewer/sld001.htm" target="_blank"><font color="#0b59b2">Eric Brewer on the CAP Theorem</font></a></li>
    <li><a href="http://www.eecs.harvard.edu/%7Emdw/papers/seda-sosp01.pdf" target="_blank"><font color="#0b59b2">SEDA: An Architecture for Well-Conditioned, Scalable Internet Services</font></a></li>
</ul>
<h3>关于作者</h3>
<p>Randy Shoup是eBay的杰出架构师。从2004年起担任eBay搜索基础设施的主要架构师。在加入eBay之前，他是Tumbleweed Communications公司的总架构师，也曾在Oracle和Informatica担任多个软件开发和架构的职位。</p>
<p>他经常在业界的会议上讲授可伸缩性和架构模式。</p>
<p><strong>阅读英文原文：</strong><a href="http://www.infoq.com/articles/ebay-scalability-best-practices" target="_blank"><font color="#0b59b2">Scalability Best Practices: Lessons from eBay</font></a></p>]]></description>
    </item>
    <item>
      <link>http://max.cszi.com/Blog/Blog.aspx?Id=713</link>
      <title><![CDATA[oracle中触发器中:new和:old 的使用方法]]></title>
      <author>一线风</author>
      <category>学习参考</category>
      <pubDate>2009-10-22 11:11:25</pubDate>
      <guid>http://max.cszi.com/Blog/Blog.aspx?Id=713</guid>
      <comments>
              /Blog/Blog.aspx?Id=713#commentbox
            </comments>
      <description><![CDATA[<div class="codeText">
<div class="codeHead">SQL代码</div>
<ol class="dp-sql">
    <li class="alt"><span><span class="keyword">create</span><span>&nbsp;</span><span class="op">or</span><span>&nbsp;</span><span class="func">replace</span><span>&nbsp;</span><span class="keyword">trigger</span><span>&nbsp;TRI_PrintTest &nbsp;&nbsp;</span></span></li>
    <li class=""><span>before&nbsp;</span><span class="keyword">delete</span><span>&nbsp;</span><span class="op">or</span><span>&nbsp;</span><span class="keyword">insert</span><span>&nbsp;</span><span class="op">or</span><span>&nbsp;</span><span class="keyword">update</span><span>&nbsp;</span><span class="keyword">on</span><span>&nbsp;TEST_EXAM　　</span><span class="comment">--触发事件 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">for</span><span>&nbsp;each&nbsp;row　　　　　　　　　　　　　　　　　　</span><span class="comment">--&nbsp;每修改一行都需要调用此过程 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span class="keyword">begin</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(:new.IDNEW);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--IDNEW字段更新后的值 </span><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(:old.IDNEW);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">--IDNEW字段更新前的值 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">end</span><span>;&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<p>原IDNEW字段是1时，</p>
<p>使用</p>
<p>update TEST_EXAM set IDNEW=5 where SN='5454';</p>
<p>&nbsp;</p>
<p>则打印结果为：</p>
<p>5<br />
1</p>
<p>&nbsp;</p>]]></description>
    </item>
  </channel>
</rss>