<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[非寒日志]]></title>
<link>http://blog.feelhum.com/</link>
<description><![CDATA[c#程序员的私生活...]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright www.5iaspx.com]]></copyright>
<webMaster><![CDATA[hjh127@163.com(非寒)]]></webMaster>
<generator>www.5iaspx.com</generator> 
<image>
	<title>非寒日志</title> 
	<url>http://blog.feelhum.com/images/logos.gif</url> 
	<link>http://blog.feelhum.com/</link> 
	<description>非寒日志</description> 
</image>

			<item>
			<link>http://blog.feelhum.com/default.asp?id=414</link>
			<title><![CDATA[简单工厂模式的简单示例代码]]></title>
			<author>hjh127@163.com(彼岸非寒)</author>
			<category><![CDATA[分享┊分享收获]]></category>
			<pubDate>Sat,15 Sep 2007 22:39:00 +0800</pubDate>
			<guid>http://blog.feelhum.com/default.asp?id=414</guid>	
		<description><![CDATA[<strong>从<a href="http://www.baidu.com" target="_blank">百度</a>知道编程栏目来的一个同行问我简单工厂模式是什么，我跟他说了一大堆他也没明白，没办法，我只好做了一个简单的示例试图让他知道简单工厂模式是干什么的...<br/>看来我真的不适合做老师，很庆幸当初没有选择做老师，不然真是要误人子弟啊...</strong><br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.feelhum.com/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">先在网上偷一点关于简单工厂模式的理论知识吧:<br/>简单工厂模式是类的创建模式，又叫做静态工厂方法模式。就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。一般涉及到三种角色（如下图）： <br/> <br/>    工厂类：担任这个角色的是工厂方法模式的核心，含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象，它往往由一个具体的类实现。 <br/>    抽象产品角色：担任这个角色的类是由工厂方法模式所创建的对象的父类，或她们共同拥有的接口。一般由接口或抽象类实现。 <br/>    具体产品角色：工厂方法模式所创建的任何对 <br/>象都是这个角色的实例，由具体类实现。 <br/><br/>简单工厂模式优缺点： <br/>    模式的核心是工厂类，这个类负责产品的创建，而客户端可以免去产品创建的责任，这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑的，如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码。 </div></div><br/><br/>我们以 在 B/S 中常见的 用户(user)操作为例：<br/>user 用户接口 ----提取不同用户角色的共性成分<br/>commonUser 普通用户类<br/>adminUser 管理员用户类<br/>userFactory 用户选择器类<br/><br/>当客户端要以不同用户角色登录的时候通过调用userFactory来选择通过什么类型角色来登录<br/>User.cs<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.feelhum.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><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;<br/><br/>/// &lt;summary&gt;<br/>/// User 的摘要说明<br/>/// &lt;/summary&gt;<br/><br/><br/>    public interface User<br/>&nbsp;{<br/>&nbsp;&nbsp;//注册<br/>        void reg();<br/>        //登录<br/>        void login();<br/>        //退出<br/>        void logout();<br/>&nbsp;}<br/><br/></div></div><br/><br/>adminUser.cs<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.feelhum.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><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;<br/><br/>/// &lt;summary&gt;<br/>/// adminUser 的摘要说明<br/>/// &lt;/summary&gt;<br/>public class adminUser:User<br/>{<br/>&nbsp;public adminUser()<br/>&nbsp;{<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// TODO: 在此处添加构造函数逻辑<br/>&nbsp;&nbsp;//<br/>&nbsp;}<br/>    #region User 成员<br/>    public void reg()<br/>    {<br/>        //adminUser reg....<br/>    }<br/>    public void login()<br/>    {<br/>        //adminUser login...<br/>    }<br/>    public void logout()<br/>    {<br/>        //adminUser logout...<br/>    }<br/>    #endregion<br/>}<br/><br/></div></div><br/><br/>commonUser.cs<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.feelhum.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><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;<br/><br/><br/>/// &lt;summary&gt;<br/>/// commonUser 的摘要说明<br/>/// &lt;/summary&gt;<br/>public class commonUser:User<br/>{<br/>&nbsp;public commonUser()<br/>&nbsp;{<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// TODO: 在此处添加构造函数逻辑<br/>&nbsp;&nbsp;//<br/>    }<br/>    #region User 成员<br/>    public void reg()<br/>    {<br/>        //commonUser reg....<br/>    }<br/>    public void login()<br/>    {<br/>        //commonUser login...<br/>    }<br/>    public void logout()<br/>    {<br/>        //commonUser logout...<br/>    }<br/>    #endregion<br/>}<br/><br/></div></div><br/><br/>userFactory.cs<br/><br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.feelhum.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><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;<br/><br/>/// &lt;summary&gt;<br/>/// userFactory 的摘要说明<br/>/// &lt;/summary&gt;<br/>public class userFactory<br/>{<br/>&nbsp;public userFactory()<br/>&nbsp;{<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// TODO: 在此处添加构造函数逻辑<br/>&nbsp;&nbsp;//<br/>&nbsp;}<br/><br/>    //静态工厂方法<br/>    public static User factory(string which)<br/>    {<br/>        if (which.Equals(&#34;adminUser&#34;))<br/>        {<br/>            return new adminUser();<br/>        }<br/>        else if (which.Equals(&#34;commonUser&#34;))<br/>        {<br/>            return new commonUser();<br/>        }<br/>        else<br/>        {<br/>            return null;<br/>        }<br/>    }<br/><br/>}<br/><br/></div></div><br/><br/>admin.aspx.cs<br/><div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.feelhum.com/images/code.gif" style="margin:0px 2px -3px 0px" alt="程序代码"/> 程序代码</div><div class="UBBContent"><br/>using System;<br/>using System.Data;<br/>using System.Configuration;<br/>using System.Collections;<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;<br/><br/>public partial class admin : System.Web.UI.Page<br/>{<br/>    protected void Page_Load(object sender, EventArgs e)<br/>    {<br/>        User aUser = userFactory.factory(&#34;adminuser&#34;);<br/>        <br/>        //你能调用所有user的内容<br/>        aUser.reg();<br/>        aUser.login();<br/>        aUser.logout();<br/>        <br/>    }<br/>}<br/><br/></div></div><br/>]]></description>
		</item>
		
			<item>
			<link>http://blog.feelhum.com/default.asp?id=413</link>
			<title><![CDATA[通过你的个人博客赚钱]]></title>
			<author>hjh127@163.com(彼岸非寒)</author>
			<category><![CDATA[分享┊分享收获]]></category>
			<pubDate>Mon,27 Aug 2007 00:21:00 +0800</pubDate>
			<guid>http://blog.feelhum.com/default.asp?id=413</guid>	
		<description><![CDATA[<p>到
<script type="text/javascript"><!--
google_ad_client = "pub-9843094007814635";
google_ad_width = 468;
google_ad_height = 60;
google_ad_format = "468x60_as_rimg";
google_cpa_choice = "CAAQ6YOvjAIaCOmOhG5QgnH1KIvN93M";
google_ad_channel = "";
//-->
</script>
<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script>
注册。如果以前注册过Google AdWords（Google广告词&mdash;&mdash;对关键字进行右侧付费推广）那么就能使用您的Google AdWords密码登录，开通Google AdSense了。</p>
<p>Google提示不支持中文，注册时填写拼音</p>
<p>需要填写</p>
<p>您输入的帐户信息如下：（XX代表隐藏站长的信息）<br />--------------------------------------------------------------------------------</p>
<p>收款人：你的姓名（这个信息一定不能错，一旦提交永远不得更改。姓、名顺序可以按中文习惯，也可以按英语习惯颠倒过来）<br />地址：Room 102, Building 3<br />地址（延续）：Hua Xi Cun 2#<br />城市：你所在的城市<br />州、省或地区：Jiangsu<br />邮政编码：210000<br />国家/地区：中国<br />电话：+86-25-85412654（注意：国家代码和区号前不要加0）<br />产品：AdSense for content（针对内容的AdSense）和AdSense for search（针对搜索的AdSense）<br />网站：<a href="http://www.yoursite.com">www.yoursite.com</a><br />网站语言：中文（简体）</p>
<p>大家在填写网站地址的时候，就提交http://。。。。<br />--------------------------------------------------------------------------------</p>
<p>请在继续前确认所有信息都是正确的。<br />在此之后不能更改付款人姓名或国家/地区名称。</p>
<p>二、等待Google来信</p>
<p>等了两天，Google来信如下：</p>
<p><br />--------------------------------------------------------------------------------</p>
<p>标题：欢迎光临_Google_AdSense<br />祝贺您！</p>
<p>您的 Google AdSense 申请已得到批准。现在，您可以启用帐户，几分钟后就会开始向您的网站投放 Google 广告和提供 AdSense for search （针对搜索的<br />AdSense）。</p>
<p>第 1 步：启用帐户。<br />请访问 <a href="https://www.google.com/adsense?hl=zh_CN">https://www.google.com/adsense?hl=zh_CN</a>，然后使用申请中所提交的电子邮件地址和密码登录到自己的帐户，并选择同意 AdSense 条款。</p>
<p>第 2 步：将 AdSense 代码粘贴到您的网页。<br />只需按照&ldquo;广告布局代码&rdquo;页和&ldquo;搜索代码&rdquo;页中的说明进行*作，即可将 Google 代码复制并粘贴到您的网站中。几分钟后就会开始向您的网站投放 Google 广告和提<br />供 AdSense for search。</p>
<p>第 3 步：查看结果。<br />广告开始投放后，您就可以通过自己帐户中的在线报告随时查看收入情况。请注意，如果您的网站中包含以下任一内容，都有可能无法从 AdSense 中获得最大收<br />入：<br />* robots.txt<br />* 框架<br />* 表单与动态内容<br />* 过多的图像<br />* 要求登录和输入密码</p>
<p>有关针对此计划优化网站的更多技术指南与建议，请访问：<br /><a href="https://www.google.com/adsense/faq-tech?hl=zh_CN">https://www.google.com/adsense/faq-tech?hl=zh_CN</a></p>
<p>重要注意事项：<br />* 如果 Google 尚未抓取您的网站，则可能需要数小时才能看到有针对性的广告。<br />您在此期间可能会看到公益广告（这些广告无法为您带来任何收入）。</p>
<p>* 如果您的网页还未列入 Google 搜索的索引中，Google 将不能返回SiteSearch 结果。请注意将 SiteSearch 添加至任何网页，都不会使此网页进入我们漫游器的等待抓取队列。如果您希望采用手动方式将贵网站的主要网址添加到我们的抓取索引，则可以通过<a href="http://www.google.com/intl/zh-CN/addurl.html">http://www.google.com/intl/zh-CN/addurl.html</a><br />进行这一*作。采用这一方式提交贵网站不能确保网站一定会被加入到 Google 索引中。</p>
<p>* 网站发布商或由发布商征召的第三方不得采用人为方式或通过漫游器产生欺诈性<br />点击（恶意点击）。点击自己网站上的广告有违此政策，所以请不要因任何原因点<br />击这些广告。我们会监控所有的 AdSense 活动，并且会停用违反此政策的任何发<br />布商的帐户。详细信息，请参阅 Google AdSense 条款，地址是：<br /><a href="https://www.google.com/adsense/localized-terms?hl=zh_CN">https://www.google.com/adsense/localized-terms?hl=zh_CN</a></p>
<p>有什么问题？<br />请随时与我们联系，我们的电子邮件地址是 <a href="http://blog.feelhum.com/mailto:adsense-zhs@google.com">adsense-zhs@google.com</a>。</p>
<p>欢迎光临 Google AdSense。我们热切期盼能够帮助您全面发挥贵网站的创收潜力。</p>
<p>Google 小组敬上</p>
<p><br />为了让大家登录方便，首页放了个Google AdSense登录的地址，可以直接点击。</p>
<p>由于Google的中文意思表达不明确，并且Google对于很多细节都避而不谈，所以dan迷茫了两天。通过几天的试验和询问朋友，终于明白很多东西。</p>
<p>Google AdSense分为AdSense广告和AdSense搜索。AdSense广告就是放google的广告条；AdSense搜索就是提供个性化颜色的Google搜索，上面有时会出现广告条。也就是说，只有点击广告条才能赚钱，否则显示得再多也是徒劳！</p>
<p>进入&ldquo;广告设置&rdquo;栏目。可以设置&ldquo;广告颜色&rdquo;等细节，最后生成一段代码，比如</p>
<p>&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--<br />google_ad_client = &quot;ID&quot;;<br />google_ad_width = 468;<br />google_ad_height = 60;<br />google_ad_format = &quot;468x60_as&quot;;<br />google_ad_channel =&quot;&quot;;<br />//--&gt;&lt;/script&gt;......</p>
<p>然后你就粘贴到你的网页上就可以了。</p>
<p>在&ldquo;搜索设置&rdquo;栏目中，设置后又能得到一段代码</p>
<p>&lt;!-- Search Google --&gt;<br />.....<br />&lt;!-- Search Google --&gt;</p>
<p>同样，粘贴即可。</p>
<p>上传网页</p>
<p>上传后，并不能马上显示广告，有的可能要过段时间才行。有的则显示没有任何收入的公益广告！根据Google的流程来看是这样的：</p>
<p>网页执行JavaScript程序，Google服务器来抓当前的网页，然后Google服务器分析网页内容，在你的网页上显示相关的广告。看来Google AdSense的确很聪明。</p>
<p>查询收入</p>
<p>Google AdSense是每4个小时更新一次点击记录。加上美国时间比中国时间晚12小时，所以再查询时不要疑惑。前天有3个点击，前两个赚了0.44美元，第3个外国广告的点击居然有6美元！不过，昨天看了一下统计，居然变成了每个点击0.04美元。不知道Google的浮动算法是什么，Google对于AdSense的很多东西都是保密的。</p>
<p>Google AdSense支付</p>
<p>当你的广告费满100美元时，Google会寄支票给你。带上支票和身份证。另外带点钱（100元就够了），去中国银行(好象只有中行可以办托收)办理光票托收手续（这种支票并不是那种凭身份证就能去银行取钱的那种，所以叫&ldquo;光票&rdquo;）。</p>
<p>首先，支票背面的指定位置需要你的签名，签名要和正面收款人的一致（别担心，银行工作人员都会告诉你的啦~~）；</p>
<p>其次，您需要向银行交纳一定的手续费和支票的邮寄费（支票要寄到国外银行）,所收费用根据各地情况而不同。邮寄费一般为10&mdash;&mdash;12元人民币不等，手续费一般为支票金额的0.1%（不足10元按10元交纳）；</p>
<p>再次，留下您的联系电话，将收据收好，大约1个月之后(准确的说是45天)，银行会电话通知您款已到帐。</p>
<p>嗯，确实太长了，大致从你开始放广告，到收到第一笔钱，需要4个月左右。</p>
<p>最后，拿着您的收据和身份证再到外币柜台，这时您就可以见到您的美元了！（注：如果直接把美圆存到银行，要比把美圆取出，然后再存的利率要高一些~~）</p>
<p>注意：有的公司的支票是有有效期的，所以要尽快办理托收手续！比如，票面上标注&ldquo;VOID AFTER 90 DAYS&rdquo;表示支票在90天内有效。</p>
<p>七、疑问</p>
<p>Q: Google同意将代码放到多个网站上吗？<br />A: 虽然申请时填了一个网址，但是Google给了你一段代码，里面有你的 ID号，所以可以放在多个网站上。</p>
<p>Q: 如何避免Goolge的公益广告？<br />A: 公益广告是不可避免的，Google允许你在应该显示公益广告时换成你自己的广告，具体查看替换参数</p>
<p>Q：如果到了时间没有收到支票怎么办？会不会寄丢了？<br />A：如果你看到支付后，两月到三月没有收到，你就可以给这儿写封邮件去了 <a href="http://blog.feelhum.com/mailto:adsense-zhs@google.com">adsense-zhs@google.com</a> ，可以用中文，你只需要告诉他你的支票的支付信息就行了。他们会用中文答复你把原来的支票止付，再给你邮寄，新的支票，并附上新寄的英文地址。</p>
<p>Q:为什么我的收入很少<br />A：如果你的访问量没有达到每日5-10万IP，PV一天15万以上的话，我估计你一个月也难收到一次支票(即不超过100美金)。另外还得看你的会员对你的支持了。当然个别的人点太多，是不会有效果的。也许还会扣钱。<br />如果你已经了解，那么你可以通过点击上面的地址去注册啦，有什么不懂的加我QQ吧：593307267，我帮你完全搞定咯<br /></p>
<iframe name="google_ads_frame" marginw]]></description>
		</item>
		
			<item>
			<link>http://blog.feelhum.com/default.asp?id=410</link>
			<title><![CDATA[google代码搜索 程序员的福音]]></title>
			<author>hjh127@163.com(彼岸非寒)</author>
			<category><![CDATA[分享┊分享收获]]></category>
			<pubDate>Fri,27 Jul 2007 13:27:00 +0800</pubDate>
			<guid>http://blog.feelhum.com/default.asp?id=410</guid>	
		<description><![CDATA[<div align="center"><img src="http://blog.feelhum.com/attachments/month_0707/i2007727132521.jpg" border="0" alt=""/></div><br/>Google 代码搜索为您提供了一个搜索互联网上可公开访问的源代码的场所，从而帮助您找到功能定义和代码示例。利用 Google 代码搜索，您可以： <br/><br/>使用正则表达式进行更为精确的搜索 <br/>按语言、许可或文件名限制搜索 <br/>查看源文件（包含指向其所在的整个包及网页的链接） <br/><br/> 常见问题解答 <br/><br/>1. 你们抓取哪些类型的代码？<br/><br/>我们抓取能够找到的所有可公开访问的源代码，包括存档（.tar.gz、.tar.bz2、.tar 与 .zip）、CVS 知识库以及 Subversion 知识库。<br/><br/>2. 代码搜索支持哪些 regexp 语法？<br/><br/>Google 代码搜索支持除后向引用、归并元素以及归并类之外的 POSIX 扩展正则表达式语法。要搜索空格字符，请使用反斜杠将其转义，例如 hello,\ world。您可以用引号括住文字串 (literal string) 来进行搜索，例如 &#34;hello, world&#34;。<br/><br/>我们还支持以下 Perl 扩展名：<br/><br/>\w 匹配字词字符。（字母数字字符加揰） <br/>\W 匹配非字词字符。 <br/>\s 匹配空格字符。 <br/>\S 匹配非空格字符。 <br/>\d 匹配数字字符。 <br/>\D 匹配非数字字符。 <br/><br/>3. 你们支持哪些编程语言？<br/><br/>高级代码搜索页列出了我们能够检测的编程语言。不过，即使您所选择的语言没有在列，您仍可以搜索以该语言编写的代码。我们会尽可能让您能够搜索到更多的代码，包括以我们还不能检测的语言所编写的代码。在能够检测文件的编程语言时，我们会在搜索结果中指明，而您也可以限制搜索，只搜索以该语言编写的代码。 <br/><br/>如果我们不能检测您选择的语言，则您可以使用 file: 操作符，因为它可以搜索具有特定扩展名的文件。例如，您可以利用类似以下形式的查询将搜索限制为具有 .x 或 .abc 扩展名的文件：myquery file:\.(x|abc)$。如果我们不能检测您认为非常重要的语言，请务必告诉我们。<br/><br/>4. 如何按语言、许可或文件名限制搜索？<br/><br/>您可以使用高级代码搜索页，也可以使用我们的操作符。操作符包括： <br/><br/>lang: 操作符，按编程语言进行限制（例如 lang:&#34;c++&#34;、-lang:java 或 lang:^(c|<a href="http://www.feelhum.com" target="_blank">c#</a>|c\+\+)$） <br/>license: 操作符，按软件许可进行限制（例如 license:apache、-license:gpl 或 license:bsd|mit） <br/>package: 操作符，按包网址进行限制（例如 package:&#34;www.kernel.org&#34; 或 package:\.tgz$） <br/>file: 操作符，按文件名进行限制（例如 file:include/linux/$ 或 -file:\.cc$） <br/>上述各个操作符的参数可以是用引号括住的的文字串，也可以是正则表达式。正如上面一些例子中所示，各个操作符都可在前面添加减号（ -），从而用作否定操作符。 <br/><br/>5. 可以将 Google 代码搜索结果添加到我的网站、IDE 或应用程序吗？<br/><br/>可以。可通过 GData/XML 馈送获得代码搜索结果，我们鼓励您帮助制作 IDE 插件，并将 Google 代码搜索添加到您的网站。<br/><br/>6. 你们如何确定针对某一段代码列出的软件许可？<br/><br/>我们竭尽所能在注释或单独的许可文件（例如 LICENSE、LICENCE、COPYRIGHT、COPYING）中查找许可，来确定代码包的软件许可。如果我们找不到许可，就会指出许可未知摂。请注意，我们的许可检测手段尚不完善，我们尽力列出代码作者指明的许可，但有可能会出现错误，而且有时作者指明的许可也可能是错误的。另外，代码搜索结果也无法告知您某段软件代码所涉及的专利。我们尽可能告知您关于可能的许可条款的信息，但理解对重新使用某段代码的法律要求则是您的责任。<br/><br/>7. 如何将我的代码加入 Google 代码搜索结果？<br/><br/>您可以使用我们的在线表单提交代码。请注意，我们无法将提交的所有代码都添加到索引中，对于何时以及是否显示这些代码也不能作出任何预测或保证。<br/><br/>8. 如何阻止你们抓取我的代码？<br/><br/>Google 代码搜索会考虑 robots.txt，因此，有两种方法可以阻止抓取您的代码： <br/><br/>如果您可以访问您的网络服务器的漫游器文件，则可以将您的代码路径添加到 Disallow: 行。了解详情。 <br/>另外，也可只将漫游器文件放入您的代码包的根目录。这对存档及 CVS、Subversion 等源代码控制知识库均会发生作用。.例如，要指出您不希望我们抓取您的任何代码，可以使用下列代码在根目录中加入一个称为 robots.txt 的文件：<br/>     User-agent:*<br/>     Disallow:/ <br/>请注意，代码搜索可能会花费一些时间才能更新索引并删除您的代码。如果您有紧急请求，请发送电子邮件至以下地址告知我们：codesearch-issues+cn@<a href="http://www.google.com" target="_blank">google</a>.com。 <br/><br/>9. 我有产品改进建议。如何告诉你们？<br/><br/>要与我们分享您的想法，请将其张贴到支持论坛上。Google 代码搜索是 Google 实验室的一部分，因此仍处于前期开发阶段。您的反馈非常重要，能够帮助我们改进该产品。<br/><br/>10. 如果我发现了认为应该删除的代码搜索结果，如何告诉你们？<br/><br/>Google 代码搜索仍属于 Google 实验室，因此搜索结果可能尚不完善。如果您发现搜索结果存在重大问题，请发送电子邮件至以下地址告知我们：codesearch-issues+cn@<a href="http://www.google.com" target="_blank">google</a>.com。如果您是版权所有者，并认为发现了侵犯到您的版权的结果，请遵循我们的 DMCA 过程申请将其删除。<br/><br/>11. 有哪些使用条款？<br/><br/>请参阅 Google 代码服务条款.]]></description>
		</item>
		
			<item>
			<link>http://blog.feelhum.com/default.asp?id=407</link>
			<title><![CDATA[通用高效分页存储过程]]></title>
			<author>hjh127@163.com(彼岸非寒)</author>
			<category><![CDATA[文档┊技术文档]]></category>
			<pubDate>Tue,15 May 2007 10:07:00 +0800</pubDate>
			<guid>http://blog.feelhum.com/default.asp?id=407</guid>	
		<description><![CDATA[通用高效分页存储过程<br/>使用存储过程分也确实比Recordset高效得多，看以下示例：<br/>-- 获取指定页的数据 <br/>Cr&#101;ate PROCEDURE dbo.pagination<br/>@tblName varchar(255), -- 表名 <br/>@strGetFields varchar(1000) = &#39;*&#39;, -- 需要返回的列 <br/>@fldName varchar(255)=&#39;&#39;, -- 排序的字段名 <br/>@PageSize int = 10, -- 页尺寸 <br/>@PageIndex int = 1, -- 页码 <br/>@doCount bit = 0, -- 返回记录总数, 非 0 值则返回 <br/>@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序 <br/>@strWh&#101;re varchar(1500) = &#39;&#39; -- 查询条件 (注意: 不要加 wh&#101;re) <br/>AS <br/>declare @strSQL varchar(5000) -- 主语句 <br/>declare @strTmp varchar(110) -- 临时变量 <br/>declare @strOrder varchar(400) -- 排序类型 <br/>if @doCount != 0 <br/>begin <br/>if @strWh&#101;re !=&#39;&#39; <br/>set @strSQL = &#39;sel&#101;ct count(*) as Total from [&#39; + @tblName + &#39;] wh&#101;re &#39;+@strWh&#101;re <br/>else <br/>set @strSQL = &#39;sel&#101;ct count(*) as Total from [&#39; + @tblName + &#39;]&#39; <br/>end <br/>--以上代码的意思是如果@doCount传递过来的不是0，就执行总数统计。以下的所有代码都是@doCount为0的情况 <br/><br/>else <br/>begin <br/>if @OrderType != 0 <br/>begin <br/>set @strTmp = &#39;&lt;(sel&#101;ct min&#39; <br/>set @strOrder = &#39; o&#114;der by [&#39; + @fldName +&#39;] desc&#39; <br/>--如果@OrderType不是0，就执行降序，这句很重要！ <br/>end <br/><br/>else <br/>begin <br/>set @strTmp = &#39;&gt;(sel&#101;ct max&#39; <br/>set @strOrder = &#39; o&#114;der by [&#39; + @fldName +&#39;] asc&#39; <br/>end <br/>if @PageIndex = 1 <br/>begin <br/>if @strWh&#101;re != &#39;&#39; <br/>set @strSQL = &#39;sel&#101;ct top &#39; + str(@PageSize) +&#39; &#39;+@strGetFields+ &#39; from [&#39; + @tblName + &#39;] wh&#101;re &#39; + @strWh&#101;re + &#39; &#39; + @strOrder <br/>else <br/>set @strSQL = &#39;sel&#101;ct top &#39; + str(@PageSize) +&#39; &#39;+@strGetFields+ &#39; from [&#39;+ @tblName + &#39;] &#39;+ @strOrder <br/>--如果是第一页就执行以上代码，这样会加快执行速度 <br/>end <br/><br/>else <br/>begin <br/>--以下代码赋予了@strSQL以真正执行的SQL代码 <br/>set @strSQL = &#39;sel&#101;ct top &#39; + str(@PageSize) +&#39; &#39;+@strGetFields+ &#39; from [&#39; <br/>+ @tblName + &#39;] wh&#101;re [&#39; + @fldName + &#39;]&#39; + @strTmp + &#39;([&#39;+ @fldName + &#39;]) from (sel&#101;ct top &#39; + str((@PageIndex-1)*@PageSize) + &#39; [&#39;+ @fldName + &#39;] from [&#39; + @tblName + &#39;]&#39; + @strOrder + &#39;) as tblTmp)&#39;+ @strOrder <br/>if @strWh&#101;re != &#39;&#39; <br/>set @strSQL = &#39;sel&#101;ct top &#39; + str(@PageSize) +&#39; &#39;+@strGetFields+ &#39; from [&#39; <br/>+ @tblName + &#39;] wh&#101;re [&#39; + @fldName + &#39;]&#39; + @strTmp + &#39;([&#39; <br/>+ @fldName + &#39;]) from (sel&#101;ct top &#39; + str((@PageIndex-1)*@PageSize) + &#39; [&#39; <br/>+ @fldName + &#39;] from [&#39; + @tblName + &#39;] wh&#101;re &#39; + @strWh&#101;re + &#39; &#39; <br/>+ @strOrder + &#39;) as tblTmp) and &#39; + @strWh&#101;re + &#39; &#39; + @strOrder <br/>end <br/>end <br/>exec (@strSQL)<br/>GO<br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://blog.feelhum.com/default.asp?id=403</link>
			<title><![CDATA[非寒教你部署最基本三层架构]]></title>
			<author>hjh127@163.com(彼岸非寒)</author>
			<category><![CDATA[文档┊技术文档]]></category>
			<pubDate>Thu,12 Apr 2007 16:55:00 +0800</pubDate>
			<guid>http://blog.feelhum.com/default.asp?id=403</guid>	
		<description><![CDATA[PS：后来发现这个其实是有问题的...下次发个比较好点的例子,其实当真正明白三层的时候，我已经彻底失望，因为所谓的层，是为了都是为了减少后期维护负担.我的结论是:只要你的团队做的顺手，什么样的层都行<br/>现在翻看以前写的东西```发现虽然那个时候自己不知道所谓的三层架构，但是已经用到了这个思想。<br/>有人说三层架构能减少服务器负担，能减少客户端负担，能提高程序运行效率，我不赞同，我觉得三层架构的主要目的是为了减少后期维护负担，可以让程序逻辑更加清晰而已```<br/>下面我们来以留言本做为实际例子部署最简单的三层结构：<br/>首先：文件----新建-----网站<br/><img src="http://blog.feelhum.com/attachments/month_0704/82007412164434.gif" border="0" alt=""/><br/><br/><img src="http://blog.feelhum.com/attachments/month_0704/w2007412164549.gif" border="0" alt=""/><br/><br/>下面我们在右边 解决方案资源管理 中点右键-----添加----新建项目<br/><img src="http://blog.feelhum.com/attachments/month_0704/q2007412164720.gif" border="0" alt=""/><br/><br/>把他的名字命名为DataLayer<br/><img src="http://blog.feelhum.com/attachments/month_0704/62007412164859.gif" border="0" alt=""/><br/><br/><br/>重复上述过程 建立BuessniessLayer层<br/><br/><img src="http://blog.feelhum.com/attachments/month_0704/92007412165112.gif" border="0" alt=""/><br/>最后目录结构为：<br/><br/><img src="http://blog.feelhum.com/attachments/month_0704/r2007412165154.gif" border="0" alt=""/><br/><br/><br/>然后添加引用<br/><br/>BuessniessLayer引用 DataLayer和System.Web(由于业务层会用到web方面的控件)<br/><br/>由于BuessniessLayer已经引用过DataLayer<br/><br/>所以 web项目只需要引用BuessniessLayer<br/><br/>通过上述步骤，就已经成功部署了<a href="http://www.feelhum.com" target="_blank">ASP.NET</a>的三层架构。在guestbook这一层我们放置应用显示的ASP页面，在BusinessLayer层，我们把所有的业务逻辑代码在该层实现。DataLayer层主要处理数据库的操作，供BusinessLayer层调用。<br/>]]></description>
		</item>
		
			<item>
			<link>http://blog.feelhum.com/default.asp?id=402</link>
			<title><![CDATA[精妙SQL语句，基础，提升，技巧]]></title>
			<author>hjh127@163.com(彼岸非寒)</author>
			<category><![CDATA[文档┊技术文档]]></category>
			<pubDate>Mon,19 Mar 2007 18:49:00 +0800</pubDate>
			<guid>http://blog.feelhum.com/default.asp?id=402</guid>	
		<description><![CDATA[一、基础<br/><br/>1、说明：创建数据库<br/>Cr&#101;ate DATABASE database-name<br/>2、说明：删除数据库<br/>dro&#112; database dbname<br/>3、说明：备份sql server<br/>--- 创建 备份数据的 device<br/>USE master<br/>EXEC sp_addumpdevice &#39;disk&#39;, &#39;testBack&#39;, &#39;c:\mssql7backup\MyNwind_1.dat&#39;<br/>--- 开始 备份<br/>BACKUP DATABASE pubs TO testBack<br/>4、说明：创建新表<br/>cr&#101;ate table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)<br/>根据已有的表创建新表：<br/>A：cr&#101;ate table tab_new like tab_old (使用旧表创建新表)<br/>B：cr&#101;ate table tab_new as sel&#101;ct col1,col2… from tab_old definition only<br/>5、说明：删除新表<br/>dro&#112; table tabname<br/>6、说明：增加一个列<br/>Alt&#101;r table tabname add column col type<br/>注：列增加后将不能删除。DB2中列加上后数据类型也不能改变，唯一能改变的是增加varchar类型的长度。<br/>7、说明：添加主键： Alt&#101;r table tabname add primary key(col)<br/>说明：删除主键： Alt&#101;r table tabname dro&#112; primary key(col)<br/>8、说明：创建索引：cr&#101;ate [unique] index idxname on tabname(col….)<br/>删除索引：dro&#112; index idxname<br/>注：索引是不可更改的，想更改必须删除重新建。<br/>9、说明：创建视图：cr&#101;ate view viewname as sel&#101;ct statement<br/>删除视图：dro&#112; view viewname<br/>10、说明：几个简单的基本的sql语句<br/>选择：sel&#101;ct * from table1 wh&#101;re 范围<br/>插入：ins&#101;rt into table1(field1,field2) values(value1,value2)<br/>删除：del&#101;te from table1 wh&#101;re 范围<br/>更新：up&#100;ate table1 set field1=value1 wh&#101;re 范围<br/>查找：sel&#101;ct * from table1 wh&#101;re field1 like ’%value1%’ ---like的语法很精妙，查资料!<br/>排序：sel&#101;ct * from table1 o&#114;der by field1,field2 [desc]<br/>总数：sel&#101;ct count as totalcount from table1<br/>求和：sel&#101;ct sum(field1) as sumvalue from table1<br/>平均：sel&#101;ct avg(field1) as avgvalue from table1<br/>最大：sel&#101;ct max(field1) as maxvalue from table1<br/>最小：sel&#101;ct min(field1) as minvalue from table1<br/>11、说明：几个高级查询运算词<br/>A： UNION 运算符<br/>UNION 运算符通过组合其他两个结果表（例如 TABLE1 和 TABLE2）并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时（即 UNION ALL），不消除重复行。两种情况下，派生表的每一行不是来自 TABLE1 就是来自 TABLE2。<br/>B： EXCEPT 运算符<br/>EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL)，不消除重复行。<br/>C： INTERSECT 运算符<br/>INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL)，不消除重复行。<br/>注：使用运算词的几个查询结果行必须是一致的。<br/>12、说明：使用外连接<br/>A、left outer join：<br/>左外连接（左连接）：结果集几包括连接表的匹配行，也包括左连接表的所有行。<br/>SQL: sel&#101;ct a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c<br/>B：right outer join:<br/>右外连接(右连接)：结果集既包括连接表的匹配连接行，也包括右连接表的所有行。<br/>C：full outer join：<br/>全外连接：不仅包括符号连接表的匹配行，还包括两个连接表中的所有记录。<br/><br/>二、提升<br/><br/>1、说明：复制表(只复制结构,源表名：a 新表名：b) (Access可用)<br/>法一：sel&#101;ct * into b from a wh&#101;re 1&lt;&gt;1<br/>法二：sel&#101;ct top 0 * into b from a<br/><br/>2、说明：拷贝表(拷贝数据,源表名：a 目标表名：b) (Access可用)<br/>ins&#101;rt into b(a, b, c) sel&#101;ct d,e,f from b;<br/><br/>3、说明：跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)<br/>ins&#101;rt into b(a, b, c) sel&#101;ct d,e,f from b in ‘具体数据库’ wh&#101;re 条件<br/>例子：..from b in &#39;&#34;&amp;Server.MapPath(&#34;.&#34;)&amp;&#34;\data.mdb&#34; &amp;&#34;&#39; wh&#101;re..<br/><br/>4、说明：子查询(表名1：a 表名2：b)<br/>sel&#101;ct a,b,c from a wh&#101;re a IN (sel&#101;ct d from b ) 或者: sel&#101;ct a,b,c from a wh&#101;re a IN (1,2,3)<br/><br/>5、说明：显示文章、提交人和最后回复时间<br/>sel&#101;ct a.title,a.username,b.adddate from table a,(sel&#101;ct max(adddate) adddate from table wh&#101;re table.title=a.title) b<br/><br/>6、说明：外连接查询(表名1：a 表名2：b)<br/>sel&#101;ct a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c<br/><br/>7、说明：在线视图查询(表名1：a )<br/>sel&#101;ct * from (Sel&#101;ct a,b,c FROM a) T wh&#101;re t.a &gt; 1;<br/><br/>8、说明：between的用法,between限制查询数据范围时包括了边界值,not between不包括<br/>sel&#101;ct * from table1 wh&#101;re time between time1 and time2<br/>sel&#101;ct a,b,c, from table1 wh&#101;re a not between 数值1 and 数值2<br/><br/>9、说明：in 的使用方法<br/>sel&#101;ct * from table1 wh&#101;re a [not] in (‘值1’,’值2’,’值4’,’值6’)<br/><br/>10、说明：两张关联表，删除主表中已经在副表中没有的信息<br/>del&#101;te from table1 wh&#101;re not exists ( sel&#101;ct * from table2 wh&#101;re table1.field1=table2.field1 )<br/><br/>11、说明：四表联查问题：<br/>sel&#101;ct * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d wh&#101;re .....<br/><br/>12、说明：日程安排提前五分钟提醒<br/>SQL: sel&#101;ct * from 日程安排 wh&#101;re datediff(&#39;minute&#39;,f开始时间,getdate())&gt;5<br/><br/>13、说明：一条sql 语句搞定数据库分页<br/>sel&#101;ct top 10 b.* from (sel&#101;ct top 20 主键字段,排序字段 from 表名 o&#114;der by 排序字段 desc) a,表名 b wh&#101;re b.主键字段 = a.主键字段 o&#114;der by a.排序字段<br/><br/>14、说明：前10条记录<br/>sel&#101;ct top 10 * form table1 wh&#101;re 范围<br/><br/>15、说明：选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)<br/>sel&#101;ct a,b,c from tablename ta wh&#101;re a=(sel&#101;ct max(a) from tablename tb wh&#101;re tb.b=ta.b)<br/><br/>16、说明：包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表<br/>(sel&#101;ct a from tableA ) except (sel&#101;ct a from tableB) except (sel&#101;ct a from tableC)<br/><br/>17、说明：随机取出10条数据<br/>sel&#101;ct top 10 * from tablename o&#114;der by newid()<br/><br/>18、说明：随机选择记录<br/>sel&#101;ct newid()<br/><br/>19、说明：删除重复记录<br/>Del&#101;te from tablename wh&#101;re id not in (sel&#101;ct max(id) from tablename group by col1,col2,...)<br/><br/>20、说明：列出数据库里所有的表名<br/>sel&#101;ct name from sysobjects wh&#101;re type=&#39;U&#39;<br/><br/>21、说明：列出表里的所有的<br/>sel&#101;ct name from syscolumns wh&#101;re id=object_id(&#39;TableName&#39;)<br/><br/>22、说明：列示type、vender、pcs字段，以type字段排列，case可以方便地实现多重选择，类似sel&#101;ct 中的case。<br/>sel&#101;ct type,sum(case vender when &#39;A&#39; then pcs else 0 end),sum(case vender when &#39;C&#39; then pcs else 0 end),sum(case vender when &#39;B&#39; then pcs else 0 end) FROM tablename group by type<br/>显示结果：<br/>type vender pcs<br/>电脑 A 1<br/>电脑 A 1<br/>光盘 B 2<br/>光盘 A 2<br/>手机 B 3<br/>手机 C 3<br/><br/>23、说明：初始化表table1<br/><br/>TRUNCATE TABLE table1<br/><br/>24、说明：选择从10到15的记录<br/>sel&#101;ct top 5 * from (sel&#101;ct top 15 * from table o&#114;der by id asc) table_别名 o&#114;der by id desc<br/><br/>三、技巧<br/><br/>1、1=1，1=2的使用，在SQL语句组合时用的较多<br/><br/>“wh&#101;re 1=1” 是表示选择全部 “wh&#101;re 1=2”全部不选，<br/>如：<br/>if @strWh&#101;re !=&#39;&#39;<br/>begin<br/>set @strSQL = &#39;sel&#101;ct count(*) as Total from [&#39; + @tblName + &#39;] wh&#101;re &#39; + @strWh&#101;re<br/>end<br/>else<br/>begin<br/>set @strSQL = &#39;sel&#101;ct count(*) as Total from [&#39; + @tblName + &#39;]&#39;<br/>end<br/><br/>我们可以直接写成<br/>set @strSQL = &#39;sel&#101;ct count(*) as Total from [&#39; + @tblName + &#39;] wh&#101;re 1=1 安定 &#39;+ @strWh&#101;re<br/><br/>2、收缩数据库<br/>--重建索引<br/>DBCC REINDEX<br/>DBCC INDEXDEFRAG<br/>--收缩数据和日志<br/>DBCC SHRINKDB<br/>DBCC SHRINKFILE<br/><br/>3、压缩数据库<br/>dbcc shrinkdatabase(dbname)<br/><br/>4、转移数据库给新用户以已存在用户权限<br/>exec sp_change_users_login &#39;up&#100;ate_one&#39;,&#39;newname&#39;,&#39;oldname&#39;<br/>go<br/><br/>5、检查备份集<br/>RESTORE VERIFYONLY from disk=&#39;E:\dvbbs.bak&#39;<br/><br/>6、修复数据库<br/>Alt&#101;r DATABASE [dvbbs] SET SINGLE_USER<br/>GO<br/>DBCC CHECKDB(&#39;dvbbs&#39;,repair_allow_data_loss) WITH TABLOCK<br/>GO<br/>Alt&#101;r DATABASE [dvbbs] SET MULTI_USER<br/>GO<br/><br/>7、日志清除<br/>SET NOCOUNT ON<br/>DECLARE @LogicalFileName sysname,<br/>@MaxMinutes INT,<br/>@NewSize INT<br/><br/><br/>USE tablename -- 要操作的数据库名<br/>Sel&#101;ct @LogicalFileName = &#39;tablename_log&#39;, -- 日志文件名<br/>@MaxMinutes = 10, ]]></description>
		</item>
		
			<item>
			<link>http://blog.feelhum.com/default.asp?id=388</link>
			<title><![CDATA[网易部落的rss弱智错误]]></title>
			<author>hjh127@163.com(彼岸非寒)</author>
			<category><![CDATA[说话┊说点什么]]></category>
			<pubDate>Sun,11 Feb 2007 15:27:00 +0800</pubDate>
			<guid>http://blog.feelhum.com/default.asp?id=388</guid>	
		<description><![CDATA[<img align="left" src="http://blog.feelhum.com/attachments/month_0610/i20061011151956.gif" border="0" alt=""/>一直在做一个类似聚合的东西，就是能多rss 1.0 ,rss 2.0的feed进行读取,当测试网易部落的时候，一个地址：<a href="http://www7.blog.163.com/rss/-0uAy.xml" target="_blank">http://www7.blog.163.com/rss/-0uAy.xml</a>怎么也读取不了，DateTime.Parse(Common.DateConvert(LogPubDate))语句,系统错误提示是：不能识别星期几,当时很郁闷，根本不会考虑到时间上会有错误，后来把这个xml地址进行分离，发现时间有错误：Tue, 9 Oct 2006 23:49:00 GMT 中2006 ，Oct 9根本不是Tue!!!我狂汗...大家可以对下面的xml文件进行分析，有几个时间都错误，造成这个的原因我也不清楚，我初步分析是由于发表blog是把时间分三部分写入数据库，例如在12：00时候写入了月和日，写入星期的时候到了12：01那就是过了一天，星期就多了```` <br/>宋映墨 逍遥苑<br/>网易公司版权所有　　(c)1997-2006<br/><a href="http://www7.blog.163.com/-0uAy.html" target="_blank">http://www7.blog.163.com/-0uAy.html</a><br/> zh-cn BLOG.163.COM <br/>11 Oct 2006 07:01:53 GMT<br/> 5 （原）过气老婆VS热恋情人<br/><a href="http://www7.blog.163.com/article/-0uAy05clKpF.html" target="_blank">http://www7.blog.163.com/article/-0uAy05clKpF.html</a><br/>我的几个朋友，瞒着老婆在外面都走私着小情人，并且走私得理直气壮，满嘴道理洋洋洒洒的，若是写成帖子贴到网上，说不定就能和逃票逃交警之类的缺德攻略有得一拼。我不是什么正人君子，听他们说起情人的好处，也绿过眼睛流过口水，想找个情人的念头就好比春天山上野草，蠢蠢地要欲动出萌芽了—— 只是这萌芽从来不能郁葱出一片绿，爱人眼睛仿佛有着霜冻功能，会在瞬间将它扼杀得声息全无，还原成一片荒凉寂寞。朋友们笑我色心猛于虎，色胆却小的受惊的兔子似的草木皆兵…… 我说你们看人低的本事简直就和狗眼有得一拼，昨天咱就跟着一个<br/> <br/>宋映墨@-0uAy<br/> <br/><span style="color:Red">Tue, 9 Oct 2006 23:49:00 GMT</span><br/> （原）学校里的土匪，仰仗了谁猖狂？<br/> <br/><a href="http://www7.blog.163.com/article/-0uAy04k31YH.html" target="_blank">http://www7.blog.163.com/article/-0uAy04k31YH.html</a><br/> <br/>爱人的哥哥，算是一个成功人士，脾气却暴躁，就仿佛过春节燃放的二踢脚，点着了就“砰啪”乱跳，前几天，他过来家里，说起这几天正在给女儿转学，我问他为什么转学，孩子在那里不是很好？他叹出来一口气，过去蒸汽火车到站也无非是这动静，我吓一跳，我的印象里，他不是轻易服输的人，对困难的睥睨让我刮目，今天是怎么了？竟有些疲惫，无奈的表情让我有了许多不好的猜测。据他说，女儿自从升上初中，就不停地向他要补课费用，女儿过去学习成绩很好，从来没劳动过老师课外辅导，有老师曾经就对他说过：我教的学生要都象你家的XX就好了…<br/> <br/>宋映墨@-0uAy<br/> <br/>Fri, 28 Sep 2006 23:32:00 GMT<br/> （原）唤醒她的自尊，应该吗？<br/> <br/><a href="http://www7.blog.163.com/article/-0uAy04f7ZCw.html" target="_blank">http://www7.blog.163.com/article/-0uAy04f7ZCw.html</a><br/> <br/>一个哥们开酒店，邀请我们去捧场，一人发一个小姐，说今天是开张大吉，要我们平常同甘共苦的几个哥们乐和乐和。酒过三巡，菜过五味，先还文明规矩的几对经酒气一蒸，就仿佛惊蛰节气的动物，开始蠢蠢欲动出丑态来了，渐渐就放肆得群魔乱舞的；眼前景象要让人产生错觉：是不是回到了商纣时期的酒池肉林？一对对陆续地相互搂抱着离开了，去干什么了只要是成年人，脚丫子也想象得出来，屋子里只剩下我们俩人，空气里蠕动着情欲的信息，撩拨得我要犯错误了——我并非正人君子，从小所受的教育也和柳下惠鲁男子无关，但想到她身上可能残留的其<br/> <br/>宋映墨@-0uAy<br/> <br/>Thu, 28 Sep 2006 00:34:00 GMT<br/> （原）雾里看花<br/> <br/><a href="http://www7.blog.163.com/article/-0uAy04_wLJf.html" target="_blank">http://www7.blog.163.com/article/-0uAy04_wLJf.html</a><br/> <br/>回老家，大街上遇见几年没见面的朋友，几句寒暄之后，非请我酒店里面潇洒去，推辞理由在他执着的努力下都前赴后继地牺牲了，没办法，只好脸上装潢了热情洋溢的笑，随他酒店里去也。看得出来，他混得很熟，上至年过半百风韵犹存的老板娘，下至娇笑发嗲一抖落就一地风骚的妙龄服务员，他都烂熟得仿佛高压锅里蒸过—— 有的说：“死鬼，你很长时间没来了。” 有的说：“你这几天哪里去了？都想死人家了啦。” …… 动作亲昵得要让关系不透风，声音里饱饱的糖度腻得肥肉一样，让人直打寒颤，我险得要叫打扫卫生的过来，打扫打扫这一地的鸡皮<br/> <br/>宋映墨@-0uAy<br/> <br/>Wed, 27 Sep 2006 00:22:00 GMT<br/> （原）网络一夜情，谁来埋单？<br/> <br/><a href="http://www7.blog.163.com/article/-0uAy04S576_.html" target="_blank">http://www7.blog.163.com/article/-0uAy04S576_.html</a><br/> <br/>“一夜情”这个名词，现在被翻来覆去地炒得有些泛滥了，各个方面都被人不厌其烦地解剖论说；我不是推崇者，但也并不假模假式一副卫道士的面孔振臂高呼反对，存在就是合理的，就好比当官的贪污受贿，有人痛心疾首骂娘骂祖宗，其实仔细想想也是合理的——没监督没约束的权利不腐败那才是怪事呢。我今天写一夜情，是源于一个网友的遭遇，她倾心于网络上一个男子，去见他了，结果就发生了电影上所表现的关门闭灯一幕，她说她是情愿的——后来的事情却让她的情愿实实在在地受了打击——她打电话找他，里面的声音过去热辣辣的，都能在沙漠里点<br/> <br/>宋映墨@-0uAy<br/> <br/>Mon, 25 Sep 2006 07:10:00 GMT<br/> （原）你就别委屈了<br/> <br/><a href="http://www7.blog.163.com/article/-0uAy04B25Jt.html" target="_blank">http://www7.blog.163.com/article/-0uAy04B25Jt.html</a><br/> <br/>出去玩一天回来，感觉身体仿佛偷工减料的豆腐渣工程，一碰就散架，累得四顾了问自己：腿呢？哪儿去了？她打电话过来，不满的口气火焰喷射器似的，差点就将我的耳朵红烧了，问我这一天哪儿去了？电话总不在服务区，我说我外面爬山呢，不知道是不是因为山高沟深…… 她不听我解释，不客气地将我的话拦腰截断，不容置疑的口气日本鬼子宪兵似的，不给商量余地，说她现在正在我们家对过餐厅呢，让我立即过去。我心里立即就不平出坎坷来了，心说我欠你钱还是欠你情了？每回找我都警察提审犯人似的，连句好话都舍不得说，我招谁惹谁了？咱遵纪<br/> <br/>宋映墨@-0uAy<br/> <br/>Fri, 21 Sep 2006 23:42:00 GMT<br/> （原）写给小贤校长生日的胡话<br/> <br/><a href="http://www7.blog.163.com/article/-0uAy03OAgxe.html" target="_blank">http://www7.blog.163.com/article/-0uAy03OAgxe.html</a><br/> <br/>明天是真情下午茶校长秋风中小贤的生日。刚认识小贤的时候，部落昌盛得欣欣向荣的，小贤开玩笑地叫我叔叔，搞得我辈分在部落大涨，好象插在开水里的温度计，噌噌的我险些要和兵马俑拜把子了，看见考古的我都吓得低头躲着走，生怕他们把我当出土文物研究了。后来我才知道，这些我都沾了小贤的光，她在部落里热心是出了名的，那热心还不假得虚伪，是可以开发票信用卡承诺三包的，谁有什么事，只要找到她，她就侠女一样地该出手时就出手，咱们男人形容起义气来，说什么两肋插刀，但都虚得好象当官的大会上做的报告，或者爱情里的海誓山盟了<br/> <br/>宋映墨@-0uAy<br/> <br/>Tue, 12 Sep 2006 02:39:00 GMT<br/> （原）结婚了，就试着改变自己<br/> <br/><a href="http://www7.blog.163.com/article/-0uAy02tbN-Z.html" target="_blank">http://www7.blog.163.com/article/-0uAy02tbN-Z.html</a><br/> <br/>今天，是我和爱人结婚纪念日，纪念日是每年都过的——找个浪漫点的地方吃点饭，手机关了，承诺即使有天大的事情也不出去——嘿嘿，这个承诺其实是在讨便宜，就好比“海枯石烂”的誓言一样不切实际——似咱们这等草根人物，有天大的事谁找咱呀？即便是天塌下来，比咱个高的有的是。今年的纪念日我却想写个帖子了，倒不是觉得结婚纪念日有什么大不了的，只是离开网络两月余了，现在要回去，总不能腆着个脸两手空空，总得拿点东西，找个由头，就好比当官的要贪污，找不到好理由，搭建个豪华厕所什么的也算是马马乎乎吧？前几天和几个朋友聊<br/> <br/>宋映墨@-0uAy<br/> <br/>Wed, 5 Sep 2006 23:32:00 GMT<br/> （原）贺真情下午茶周岁生日<br/> <br/><a href="http://www7.blog.163.com/article/-0uAy01HVJt6.html" target="_blank">http://www7.blog.163.com/article/-0uAy01HVJt6.html</a><br/> <br/>这一段时间，事情多得把我当通缉犯了，围追堵截的；上网成了奢侈，偶尔上一回，高兴得就好象过去穷人过年吃饺子。今天上来，见到真情下午茶创始人秋风中小贤的纸条，说真情下午茶成立一周年，并且也看见她征文的广告，就想写篇帖子祝贺一下，谁知道多日不写，手竟生疏起来，拳离了手曲离了口的恶果让我实在地尝到了哑巴吃黄连的滋味。没办法，还是要写的，没了天鹅，咱送根羽毛也不算空着手吧？我加入真情下午茶，是去年的事情，具体日子记不清了，只记得是朋友捕快高手的邀请，当时的部落，要加入圈子，还要买路钱的，我扒拉半天钱不够<br/> <br/>宋映墨@-0uAy<br/> <br/>Thu, 16 Aug 2006 23:00:00 GMT<br/> （原）声明<br/> <br/><a href="http://www7.blog.163.com/article/-0uAy00y95qK.html" target="_blank">http://www7.blog.163.com/article/-0uAy00y95qK.html</a><br/> <br/>最近一段时间里，时间有些局促，自顾还要祷告上帝多给一支手，对圈子的一些事物，就更无暇顾及了。所以，我决定退出部落所有圈子的管理职务。对圈子的创始人们，我是有一份抱歉的，但没有办法，人生本就没有长久的宴席，我们都是俗人，自是不能免俗，在这里，我希望所有圈子兴旺发达。也祝愿所有朋友快乐，康健。退出来之后，闲暇时间自然还要写帖子，自然还要与圈子的朋友交道，所以不算告别，只算一声明而已。 <br/>宋映墨@-0uAy<br/> <br/>Sun, 13 Aug 2006 00:11:00 GMT<br/>]]></description>
		</item>
		
			<item>
			<link>http://blog.feelhum.com/default.asp?id=384</link>
			<title><![CDATA[为什么XML文件的分析结果出现乱码?]]></title>
			<author>hjh127@163.com(彼岸非寒)</author>
			<category><![CDATA[文档┊技术文档]]></category>
			<pubDate>Thu,08 Feb 2007 09:48:00 +0800</pubDate>
			<guid>http://blog.feelhum.com/default.asp?id=384</guid>	
		<description><![CDATA[<div class="UBBPanel"><div class="UBBTitle"><img src="http://blog.feelhum.com/images/quote.gif" style="margin:0px 2px -3px 0px" alt="引用内容"/> 引用内容</div><div class="UBBContent">http://shap.5d.cn/team/user/showCircle.aspx?user=mingxing<br/>这个圈子在写了一段测试报告:<br/>[标题:]记录圈子的几个问题<br/>[内容:]sina，bokee，blogcn，blogbus没有聚合进来，163，oblog分别是gbk和gb2312编码，聚合进来是乱码。如果一开始把一个人分类设错，再重新设置后，原来的文章没法移动过来。</div></div><br/><br/>       这是由编码问题引起的。XML标准规定，XML分析器必须支持“UTF-8”和“UTF-16”编码，而且必须能够自动区分这两种编码的文件，对于其他编码（包括常用的中文编码“GB2312”或“BIG5”）并不要求支持。如果XML文件中包含编码声明，分析器则按照声明的编码进行处理，否则就按照识别结果进行处理（识别的结果总是“UTF-8”和“UTF-16”中的一种）。因此，如果XML文件的编码在这两种之外，你必须在XML文件前加上编码声明，如：&lt;?xml version=”1.0″ encoding=”gb2312″?&gt;就表示XML文件的编码是“gb2312”。<br/><br/><br/><br/>　　现有的XML分析器大多不支持中文编码“GB2312”或“BIG5”，因此无法读取包含中文的XML文件。你可以使用支持中文编码的分析器，如MSXML，IBMJAVA4C，IBMJAVA4J等进行XML分析。你也可以用内码转换工具，将编码转换为“UTF-8”或“UTF-16”后进行解析，然后将解析结果转换回原来的编码。本站的软件园地中的ccnv(Code Converter)就是这样的工具。当然，你也可以自己写一个内码转换程序。 <br/><br/><br/><br/>　　关于“UTF-8”和“UTF-16”编码的详细信息，请查看本站标准荟萃中的UTF-16和UTF-8标准。 <br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://blog.feelhum.com/default.asp?id=398</link>
			<title><![CDATA[Atlas学习手记系列文章收集]]></title>
			<author>hjh127@163.com(彼岸非寒)</author>
			<category><![CDATA[文档┊技术文档]]></category>
			<pubDate>Thu,19 Oct 2006 09:29:00 +0800</pubDate>
			<guid>http://blog.feelhum.com/default.asp?id=398</guid>	
		<description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">Atlas</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">作为<span lang="EN-US">.NET</span>平台下的一种<span lang="EN-US">Ajax</span>框架，从出现发展到现在，其间经历了很多个<span lang="EN-US">CTP</span>版本，虽然直到现在还没有发布正式版本，却已经成为了<span lang="EN-US">.NET</span>下的最强大的<span lang="EN-US">Ajax</span>框架。本学习手记系列将作为我个人学习<span lang="EN-US">Atlas</span>的总结，同时也记录了学习的过程，本文会不断更新。<a href="http://www.yaosansi.com/blog/article.asp?id=845">http://www.yaosansi.com/blog/article.asp?id=845</a></span><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"></span></p>
<p>&nbsp;</p>
<span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><strong>第Ⅰ部分：<span lang="EN-US">Atlas</span>入门<span lang="EN-US"></span></strong></span></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">1</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span class="MsoHyperlink"><span lang="EN-US"><a href="http://terrylee.cnblogs.com/archive/2006/07/25/459518.html">Atlas<span lang="EN-US"><span lang="EN-US">学习手记（1</span></span><span lang="EN-US"><span lang="EN-US">）：Hello</span></span><span lang="EN-US"><span lang="EN-US">，Atlas</span></span></a></span></span><span lang="EN-US" style="COLOR: #3366ff"> </span></span></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><strong>第Ⅱ部分：<span lang="EN-US">Atlas</span>服务器端控件<span lang="EN-US"> </span></strong></span></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">1</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span class="MsoHyperlink"><span lang="EN-US"><a href="http://terrylee.cnblogs.com/archive/2006/07/26/Atlas_ScriptManager.html">Atlas<span lang="EN-US"><span lang="EN-US">学习手记（2</span></span><span lang="EN-US"><span lang="EN-US">）：全面了解ScriptManager</span></span></a></span></span><span lang="EN-US" style="COLOR: #3366ff"> </span></span></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">2</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span class="MsoHyperlink"><span lang="EN-US"><a href="http://terrylee.cnblogs.com/archive/2006/07/27/Atlas_UpdatePanel.html">Atlas<span lang="EN-US"><span lang="EN-US">学习手记（3</span></span><span lang="EN-US"><span lang="EN-US">）：由UpdatePanel</span></span><span lang="EN-US"><span lang="EN-US">开始</span></span></a></span></span><span lang="EN-US" style="COLOR: #3366ff"> </span></span></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">3</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span class="MsoHyperlink"><span lang="EN-US"><a href="http://terrylee.cnblogs.com/archive/2006/07/27/Atlas_AutoCompleteExtender.html">Atlas<span lang="EN-US"><span lang="EN-US">学习手记（4</span></span><span lang="EN-US"><span lang="EN-US">）：使用AutoComplete Extender</span></span><span lang="EN-US"><span lang="EN-US">实现自动完成功能</span></span></a></span></span><span lang="EN-US" style="COLOR: #3366ff"> </span></span></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">4</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span class="MsoHyperlink"><span lang="EN-US"><a href="http://terrylee.cnblogs.com/archive/2006/07/28/Atlas_TimerControl.html">Atlas<span lang="EN-US"><span lang="EN-US">学习手记（5</span></span><span lang="EN-US"><span lang="EN-US">）：<span lang="EN-US">使用服务端定时<span lang="EN-US">控件TimerControl</span></span></span></span></a></span></span><span lang="EN-US" style="COLOR: #3366ff"> </span></span></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">5</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span class="MsoHyperlink"><span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/07/29/Atlas_UpdateProgress.html">Atlas<span lang="EN-US"><span lang="EN-US">学习手记（6</span></span><span lang="EN-US"><span lang="EN-US">）：使用Atlas UpdateProgress</span></span><span lang="EN-US"><span lang="EN-US">控件</span></span></a></span></span><span lang="EN-US" style="COLOR: #3366ff"> </span></span></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">6</span><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体">．<span class="MsoHyperlink"><span lang="EN-US"><a href="http://www.cnblogs.com/Terrylee/archive/2006/07/30/Atlas_DragOverlayExtender.html">Atlas<span lang="EN-US"><span lang="EN-US">学<span lang="EN-US">习手记（7</span></span></span><span lang="EN-US"><span lang="EN-US">）：使用DragOverlay Extender</span></span><span lang="EN-US"><span lang="EN-US">实现拖放功能</span></span></a></span></span><span lang="EN-US" style="COLOR: #3366ff"> </span></span></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 200%"><span style="FONT-SIZE: 10pt; LINE-HEIGHT: 200%; FONT-FAMILY: 宋体"><strong>第Ⅲ部分： <span lang="EN-US">Atlas</span>调用<span lang="EN-US">Web Service </span></strong></span></p>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; LINE-HEIGHT: 200%; mso-para-margin-left: 1.0gd"><span lang="EN-US" style="FONT-SIZ]]></description>
		</item>
		
			<item>
			<link>http://blog.feelhum.com/default.asp?id=397</link>
			<title><![CDATA[ASP.NET 2.0客户端回调的实现分析]]></title>
			<author>hjh127@163.com(彼岸非寒)</author>
			<category><![CDATA[文档┊技术文档]]></category>
			<pubDate>Thu,19 Oct 2006 09:21:00 +0800</pubDate>
			<guid>http://blog.feelhum.com/default.asp?id=397</guid>	
		<description><![CDATA[作者：轩辕南宫
<p><span class="span"></span>　　开发人员使用JavaScript的一个主要原因就是可以避免回发过程中带来的页面刷新。例如我们可以根据用户的需要使用Treeview控件来展开和折叠相应的数据节点。当你展开一个节点时，该Treeview控件将会利用JavaScript读取服务器上的子节点信息，然后平滑无刷新地插入这些新节点。如果没有使用JavaScript的话，Treeview控件将会因为页面的回发而重新构建。不但用户会发现因页面刷新而带来的延迟，而且页面极有可能回复到原来的状态，即丢失前面所展开的那些子节点信息。对于服务器端来说，因为每次回发的过程中都要处理大量的视图状态(View State)信息，这也会严重影响程序的整体执行性能。 </p>
<p>　　以前我们使用的JavaScript示例几乎都是自包含的，即它们通常是为了完成一些特殊的显示效果(例如弹出一个新的页面窗口)，而没有和服务器端代码进行信息的交互。如果你也想构建一个类似的无刷新页面的话，你首先必须调用服务器端的一个特定的方法，等待服务器响应后就会将请求的信息传递到客户端，从而避免了回发这个过程。为了实现这个方案，你首先需要对如何将客户端脚本和服务器端代码进行通讯有个大致的了解。尽管有许多中方法可以实现这两者间的交互(例如调用Web服务)，但是由于受到特定的浏览器和平台的限制，它们的实现是还是有一定的难度的。而在ASP.NET 2.0中，引入了一个称为&quot;客户端回调&quot;的功能，利用这个内建的解决方案我们可以轻松实现客户端脚本和服务器端代码间的交互，从而避免了页面因回发带来的频繁刷新。 </p>
<p>　　客户端回调本质上就是指通过前端的客户端脚本向服务器端传递相应的数据参数，服务器端再以接受到的参数进行查询和处理，最后将结果回传到客户端进行显示。虽然这样的过程不是一种创举，但是对于许多开发者来说这在某种思维上还是无法理解的，因为JavaScript的内存管理和.NET CLR的内存管理是不同的进程，而且管理的空间上也截然不同，所以彼此间无法直接参照也没有直接进行交互的方式，而客户端回调却是实现客户端和服务器端进行沟通的方法之一，又因为它是在客户端触发的，所以这就应该是&quot;客户端回调&quot;命名的由来吧！<br /><br />　　<b>创建一个简单的客户端回调</b><br /><br />　　为了在ASP.NET中展示一个客户端回调的实例，首先我们将概述客户端回调间的交互过程是如何实现的。下面是基本的步骤：<br /><br />　　1． 在某时刻激活一个JavaScript事件，从而触发客户端回调。<br /><br />　　2． 触发客户端回调发生后，服务器端的一个方法将被执行。该方法有一个固定的模式――它接受的是一个字符串参数，并且返回的也是一个字符串参数。<br /><br />　　3． 一旦页面接受到来自服务器端方法的响应结果后，它就可以利用JavaScript修改一些和用户界面有关的信息（例如显示在页面上显示返回的结果）<br /><br />　　对于开发人员来说，底层的交互过程是非常复杂的，ASP.NET则将交互的处理过程进行了抽象化，这样使得开发人员可以直接建立表层的客户端回调，而无需考虑底层的操作是如何实现的。<br /><br />　　下面的实例中，页面中放置了一个文本框，一个提交按钮和一个标签。文本框是用来接受用户的输入信息，在单击提交按钮后将把文本框中输入的信息在标签上进行实时的显示。注意，在输入信息后单击提交按钮时，并没有像以前传统的提交方式那样重新对页面进行构建和刷新。图1-1为该实例的效果图。<br /><br />
<table width="90%" align="center" border="0">
    <tbody>
        <tr>
            <td>
            <div align="center"><img alt="ASP.NET2.0客户端回调的实现分析" src="http://image2.sina.com.cn/IT/cr/2006/0420/1429884143.jpg" border="1" /><br /><br />实例的效果图<br /><br /><img alt="ASP.NET2.0客户端回调的实现分析" src="http://image2.sina.com.cn/IT/cr/2006/0420/2451578498.jpg" border="1" /><br /><br />实例的效果图</div>
            </td>
        </tr>
    </tbody>
</table>
<br />　　<b>创建基本的页面</b><br /><br />　　按照上图的布局在工具栏的&quot;标准&quot;标签中拖拽出一个TextBox控件，一个Label控件到主窗体上。然后在&quot;HTML&quot;标签中拖拽出一个InputButton的HTML按钮，注意，该按钮不是我们经常使用的服务器端控件，而是一个HTML元素。在按钮中添加一个onclick事件，点击该按钮这将向服务器端发出回调请求，这个onclick事件的具体实现细节将在以后的过程中加以说明。得到的初始页面代码如下： <br /><br />
<table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1">
    <tbody>
        <tr>
            <td>＜%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeFile=&quot;CallBackExample.aspx.cs&quot; Inherits=&quot;CallBackExample&quot; %＞<br />＜html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;＞<br />＜head runat=&quot;server&quot;＞<br />＜title＞客户端回调＜/title＞<br />＜/head＞<br />＜body＞<br />＜form id=&quot;form1&quot; runat=&quot;server&quot;＞<br />＜div＞<br />请输入信息：＜asp:TextBox ID=&quot;txtEnter&quot; runat=&quot;server&quot;＞＜/asp:TextBox＞<br />＜input id=&quot;btnSubmit&quot; type=&quot;button&quot; value=&quot;提交&quot; onclick=&quot;CallServer(txtEnter,lblShow)&quot;/＞<br />＜br /＞<br />＜asp:Label ID=&quot;lblShow&quot; runat=&quot;server&quot;＞＜/asp:Label＞<br />＜/div＞<br />＜/form＞<br />＜/body＞<br />＜/html＞</td>
        </tr>
    </tbody>
</table>
<br />　　<b>执行回调</b><br /><br />　　为了实现客户端回调，你的页面逻辑代码中必须实现一个ICallbackEventHandler接口。代码如下：<br /><br />
<table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1">
    <tbody>
        <tr>
            <td>public partial class CallBackExample : System.Web.UI.Page,<br />System.Web.UI.ICallbackEventHandler<br />{&hellip; &hellip;}</td>
        </tr>
    </tbody>
</table>
<br />　　ICallbackEventHandler接口定义了两个方法，RaiseCallbackEvent()从浏览器接受一个字符串作为事件参数，即该方法接受客户端JavaScript使传递的参数，注意它是首先触发的。接下来触发的就是GetCallbackResult()方法，它将所得到的结果传回给客户端的JavaScript，JavaScript再将结果更新到页面。<br /><br />　　本例中的RaiseCallbackEvent()中的参数为我们在文本框的输入信息。为了表明它是从服务器返回的，我们加了一些说明性的文字。然后用GetCallbackResult()方法中将结果传回到客户端。完整的页面逻辑代码如下：<br /><br />
<table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1">
    <tbody>
        <tr>
            <td>using System;<br />using System.Data;<br />using System.Configuration;<br />using System.Collections;<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;<br /><br />public partial class CallBackExample : System.Web.UI.Page,<br />System.Web.UI.ICallbackEventHandler<br />{<br />　//定义一个字符串，回调的结果信息将保存在该字符串中<br />　private string result;<br /><br />　//引发回调事件处理<br />　public void RaiseCallbackEvent(string eventArgument)<br />　{<br />　　//&quot;eventArgument&quot;为从客户端的JavaScript传递过来的参数<br />　　result = &quot;从服务器端返回的内容：&quot; + eventArgument;<br />　}<br /><br />　//回传回调结果<br />　public string GetCallbackResult()<br />　{<br />　　return result;<br />　}<br />}</td>
        </tr>
    </tbody>
</table>
</p>
<p>&nbsp;</p>
<p><strong>编写客户端脚本<br /><br /></strong>　　客户端脚本主要是用来在服务器端和客户端之间进行信息的交互，就拿本例来说，我们在前面的页面逻辑代码中使用了一个名为eventArgument参数，这是怎么实现参数的传递的呢？我们将在后面的章节进行讨论，现在在页面中添加如下的JavaScript函数代码<br /><br />
<table bordercolor="#cccccc" width="90%" align="center" bgcolor="#e3e3e3" border="1">
    <tbody>
        <tr>
            <td>function CallServer(inputcontrol,context)<br />{<br />　//回调还没有处理完全时其预先加载的显示值<br />　context.innerHTML = &quot;加载中......&quot;;<br />　//为你在文本框中输入的信息，并且arg在这里就是将其值传递到<br />　//RaiseCallbackEvent(String eventArgument)方法对应的eventArgument中<br />　arg = inputcontrol.value;<br />　//获取一个对客户端函数的引用；调用该函数时，将启动一个对服务器端事件的客户端回调。<br />　＜%= ClientS]]></description>
		</item>
		
</channel>
</rss>