<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_活雷锋</title><subtitle type="text">.NET程序员进化史</subtitle><id>http://feed.cnblogs.com/blog/u/49050/rss</id><updated>2012-04-18T01:50:37Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/49050/rss"/><entry><id>http://www.cnblogs.com/mmmjiang13/archive/2012/04/18/2454658.html</id><title type="text">让我当一天dudu，我会这样操刀博客园</title><summary type="text">好吧~我承认，以下内容来自刚才在床上躺了十分钟之后的想法。8点边吃饭边看一个求职节目，主持人叫来宾点评各个企业，那个姐们点评的有点不太靠谱，这时候，脑袋一闪，如果丫叫我点评博客园，我会怎么说，毕竟是天天被我上的网站，好吧，躺在床上想了十分钟左右，觉得该写下来，大家看个乐吧。我猜想的博客园收入现状 这是我瞎扯，但是从目前来看，博客园的收入就来自于网络广告和一些厂商定投的广告。至于卖T恤，那真挣不了啥钱。如果说是培养出博客园一种文化和一个品牌形象的维护，还是比较靠谱的。我觉得太不靠谱之前看到过和沪江英语的合作，大家觉着吧，有一部分程序员想着锻炼英语，那么直接来沪江吧。可是很大一部分直接走线下了，.</summary><published>2012-04-17T16:35:00Z</published><updated>2012-04-17T16:35:00Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mmmjiang13/archive/2012/04/18/2454658.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/archive/2012/04/18/2454658.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;好吧~我承认，以下内容来自刚才在床上躺了十分钟之后的想法。8点边吃饭边看一个求职节目，主持人叫来宾点评各个企业，那个姐们点评的有点不太靠谱，这时候，脑袋一闪，如果丫&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;叫我点评博客园，我会怎么说，毕竟是天天被我上的网站，好吧，躺在床上想了十分钟左右，觉得该写下来，大家看个乐吧。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;我猜想的博客园收入现状&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;span style="font-size: 16px;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;这是我瞎扯，但是从目前来看，博客园的收入就来自于网络广告和一些厂商定投的广告。至于卖T恤，那真挣不了啥钱。如果说是培养出博客园一种文化和一个品牌形象的维护，还是比较靠&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;谱的。我觉得太不靠谱之前看到过和沪江英语的合作，大家觉着吧，有一部分程序员想着锻炼英语，那么直接来沪江吧。可是很大一部分直接走线下了，这种转换率想着就知道是何等的&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;低。总之，dudu现在是个小老板，带着一帮员工，过着平平淡淡有憧憬的日子。请知道内情的人扒一扒&amp;hellip; 下面正文开始&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;分析下用户和用户的需求&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;来博客园的用户，除了搜索引擎过来的，相对固定用户我姑且分为ABC三类：&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;A们来这里看看博客，偶尔提提问，写写博客记录下自己的工作，生活.&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;B们能力参差不齐，发的博客数量，质量高于A。AB们数量是最多的。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;C们和一些B们经常发一些技术上深入的文章和新技术探索的文章以及.这些C和B的高质量的分享是吸引固定流量的来源。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;针对三类用户，博客园针对都做了相应的策略，从技术分类，专题等各方面做了切分满足各类用户。在个人成就感上做了排名，粉丝。在内容推荐上做了关注，精华。博客园本质就是技术社&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;区，大家来这里的原始诉求就是获取知识，分享知识的过程中自己的提高以及参与社区所带来的成就感。可是，够了吗？除了这些还有吗？不够，还有&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 16px;"&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;提高博客园的附加值和增加对用户人性深入挖掘&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;什么是附加值，简单的说AB两家酒店，硬件啥的都差不多，那么哪家小姐多，质量好，我们便会偏好去那家。什么是对用户人性的挖掘，比如说：大家都想着赚钱，那现在大多数人想多赚钱无非是高级打工仔或&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;自己创业，博客园对大家说：yes，you can！我给你看A现在在这个位置是怎么做的，B是怎么通过一个Idea赚到钱的。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;在我看来，博客园园硬件很好，剩下的工作就是提高附加值和挖掘大家的内心想法。下面说说我的做法：&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一.博客园添加商业模式和行业知识（频道|标签）&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;看看国内外的科技博客，报道如Instagram,DrawSomthing,Pinterest,dropbox,talkbox等产品，闪购，私下购买，弹出式商店，失足妇女SNS等很多好玩的有创意的东西博客园基本&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;没看到，很少程序员了解。而这些模式通常能促动大家的某根神经，扩展大家思路，幻想着，yes，maybe i can。而且，通过对这些成功或者很有创意的想法了解，对自己所做业务，所在&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;公司，能扩展出各种好玩的东西出来.&amp;nbsp; 看看博客园里面几个老是分享什么50个好看的页面，100个JS插件，看看他们的浏览量，博客园，你还在等什么呢？当然，不止限于IT领域,程序员不&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;是只能干IT，写程序都写的好，脑子不会笨的，也许哪天开个创意杀猪场也不一定（让喜欢血腥的朋友能拿电锯啥的付费杀猪&amp;hellip;哈哈 玩笑）。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;行业知识频道：我始终觉得，做技术值钱是在行业经验，对于行业的研究和积累对以后求职或者创业是非常重要的，这是苦逼外包公司的员工没办法深入的。甚至做行业产品的一般码农也没&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;有啥行业积累.很多人想了解，但是现实工作中只不过分一个模块他，完成功能是他的天职，他也没办法。客户的原始诉求分析和挖掘以及扩展貌似天生就是项目经理和客户经理的事？&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;WTF！博客园，拯救我们吧。具体怎么做呢，编辑不是每天要人工审核文章吗？打上我们自己的标签，ERP，电子商务，工厂效率等，让用户可以关注标签（很奇怪，问问能关注标签，文章&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;咋不能关注你们定义的标签呢？）打上我们自己的标签，一切皆有可能！&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二.提高园豆价值&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;园豆就是排名的吗？不是吧？那些大佬够风光的拉。偶尔一次的抢拍？不是吧！博客园首页那几个广告块，大家想打广告或者放点好玩的东西在上面用园豆抢拍嘛。程序你们有现成的。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;如果这样，会有多少好玩的事会发生啊。好吧，其实我想说的是，园豆价值化，想着是能充值园豆，有相应的问题能公开招标回答。有点猪八戒的模式，博客园收手续费。那么会&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;不会变成这样呢，问简单问题去CSDN吧，那里不要钱，找专家帮你来博客园吧，这里你通过付费问答能得到专业前辈的专业指导。什么，你的通用权限系统在淘宝卖？你的通用类库有偿下&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;载？亲,博客园园豆就能直接兑换成钱打到你支付宝的&amp;hellip;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三.做一个协同工作平台或者发布任务的平台&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;　&lt;span style="font-size: 16px;"&gt;　&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;博客园人多啊，能力好愿意挣外块得也多啊，去和这些外包平台试试谈谈，园子负责找人，控制项目进度，具体工作找园子里的人完成。或者，专门做项目质量检查和项目设计指导。大&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;家分成。你想啊，有专业的人帮忙掌控项目，多么让人放心的一个事。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;不行了，写了快3个小时，眼睛疼，头晕，思路跟不上了，晚安各位！这篇文章如开头所说，纯属一顿饭功夫冒出的想法，大家不要深究，如能抛砖引玉或者被园子采纳半点，不甚荣幸。&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;最后祝博客园越办越好！&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;---------2012-04-18 9:19--------追加-------&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="font-size: 13px;"&gt;&lt;strong&gt;&lt;span style="font-size: 16px;"&gt;&lt;span style="font-size: 14pt;"&gt;醒醒吧，各位认为商业化，污染博客园气氛的朋友们。扪心自问，你愿意你一辈子的事业是带着一帮人维护这个网站,饿不着，吃不饱？！幼稚，仿佛谈钱是个不耻的事...团队赚钱了，大家happy拉，产品有钱投入进去,能做的更好。况且钱和知识冲突吗?谈钱就商业化了吗？而且我从来觉得只有良好商业模式的产品才能健康的发展和有旺盛的生命力。&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://www.cnblogs.com/mmmjiang13/aggbug/2454658.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2012/04/18/2454658.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mmmjiang13/archive/2011/12/12/2285416.html</id><title type="text">阿西里斯与龟</title><summary type="text">很久没看到这样一部让我感触颇多的电影.年少的仓持真知寿生活在一个富有的家庭，这个漂亮的小孩痴迷于画画，电影前段画面中的仓持永远脖子上挂着一个画板画着。这孩子行为近乎古怪，上课画画，为了画火车，站在铁轨上等着火车直到火车被迫停下…要是这孩子出生在普通人家，早打的丫半死了。在中国也是一样，大家总会对有钱有势的家庭的子女莫名的好,所以就算他逼停火车，司机知道他是某某家的孩子，也只是对他说：小朋友，请你走开了…也有可能天才就是这种性格拉.这也是他一辈子最让我感动和厌恶的地方…某天，父亲公司破产自缢和后面母亲的自杀，小正太变成了孤儿，被寄养在小伯家里，小伯和婶婶是电视剧里专业的后妈形象，后面因为受不了他</summary><published>2011-12-12T15:23:00Z</published><updated>2011-12-12T15:23:00Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mmmjiang13/archive/2011/12/12/2285416.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/archive/2011/12/12/2285416.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #444444; font-size: 15px; font-family: 幼圆;"&gt;很久没看到这样一部让我感触颇多的电影.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;年少的仓持真知寿生活在一个富有的家庭，这个漂亮的小孩痴迷于画画，电影前段画面中的仓持永远脖子上挂着一个画板画着。这孩子行为近乎古怪，上课画画，为了画火车，站在铁轨上等着火车直到火车被迫停下&amp;hellip;要是这孩子出生在普通人家，早打的丫半死了。在中国也是一样，大家总会对有钱有势的家庭的子女莫名的好,所以就算他逼停火车，司机知道他是某某家的孩子，也只是对他说：小朋友，请你走开了&amp;hellip;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;也有可能天才就是这种性格拉.这也是他一辈子最让我感动和厌恶的地方&amp;hellip;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;某天，父亲公司破产自缢和后面母亲的自杀，小正太变成了孤儿，被寄养在小伯家里，小伯和婶婶是电视剧里专业的后妈形象，后面因为受不了他的怪异举动把他送到了孤儿院&amp;hellip;之后成年，遇到了喜欢艺术的老婆，一个懂他，一辈子赚钱养家，陪他一起完成一幅一幅的画作.生活窘困，女儿受不了别人异样的眼光，离家出走，卖淫，吸毒而死&amp;hellip;.balabala&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;感触:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;1.父亲帮助过的大师对真知寿的肯定和送帽子这一桥段，在我看来影响了真知寿的一生，让我想到红发香克斯把自己的草帽送给路飞，表示对小孩子的希望和肯定，2个小孩对帽子都视如生命，戴一辈子.一个为了艺术追求终身，一个为做海贼王满世界跑&amp;hellip;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;2.真知寿在离开家里，去小伯家的车上的时候，想到过世的父亲，佣人，艺妓，大师这些对自己好的人，伤心的哭泣.这是影片中他唯一的情感流露，到后面的母亲，女儿过世，丫都没任何表情.也许是这些巨大的变故对小正太打击太大，从这这后，丫就永远一个表情。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;3.母亲过世的时候，真知寿画下了母亲的遗容在床边。看到这里我被触动了，年少的他用这种方式来纪念母亲，让母亲永远在自己身边。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;4.年轻的真知寿还是痴迷于绘画，并且尝试卖给画商自己的作品。从这以后就是悲剧的开始，真知寿开始活在画商的挑剔和某个灵光一闪的点子里。在模仿，为了艺术而艺术，为了创新而创新的一年又一年里，他老了，没有卖出过一张画&amp;hellip;他被认可的作品只有2幅，1是挂在画商的走廊里他小时候画的比目鱼，另一张是他去找妓女女儿要钱买颜料的那个咖啡店的墙上那幅刚工作时候画的画，都是他没有接触正规的艺术教育和画商的BIBI之前.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;5.得知女儿死后，他来到停尸房，用太太的口红涂满女儿的脸，用画布抹出图案。我丝毫没看到父亲在用什么方式表达对女儿的爱，只看到丫完全疯了.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;6.老了，一天顿悟自己就像追逐乌龟的阿基里斯，陷入了一个可怕处境：不停的为了追逐别人心目中的艺术而穷尽一生，付出所有，其实自己永远也追不上，并且失去了自我。艺术都是骗局，有钱人的把戏。顾客才能体现出艺术家的价值!&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;羡慕真知寿取到这么好一个老婆，一辈子认可他，理解他的艺术。结尾真知寿摆摊卖一个捡来的易拉罐,标价20万日元，她老婆一看就知道是他..互相搀扶走回家&amp;hellip;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 15px; font-family: 幼圆;"&gt;7.不要过分追求技术，技术是为人服务的，别人认可的东西才能体现技术的价值！&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://www.cnblogs.com/mmmjiang13/aggbug/2285416.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2011/12/12/2285416.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mmmjiang13/archive/2011/10/09/2203831.html</id><title type="text">IIS7 设置 UrlRewrite</title><summary type="text">IIS7配置.Net程序接管IIS请求 和IIS6有太大的差别 我按照以下配置成功~！Making URL rewriting on IIS 7 work like IIS 6Written on December 11, 2006 by Mark S. Rasmussen inSysadmin: Windows,Sysadmin: IISTweetUpgrading to IIS 7 should be rather transparent, unfortunately that is not the case when it comes to URL rewriting as we kne</summary><published>2011-10-09T08:16:00Z</published><updated>2011-10-09T08:16:00Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mmmjiang13/archive/2011/10/09/2203831.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/archive/2011/10/09/2203831.html"/><content type="html">&lt;p&gt;&lt;/p&gt;&lt;h1 style="margin-top: 0px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; font: normal normal normal 1.9em/normal Tahoma, sans-serif; color: #555533; padding: 0px;"&gt;IIS7配置.Net程序接管IIS请求 和IIS6有太大的差别 我按照以下配置成功~！&lt;/strong&gt;&lt;/p&gt;&lt;h1 style="margin-top: 0px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; font: normal normal normal 1.9em/normal Tahoma, sans-serif; color: #555533; padding: 0px;"&gt;&lt;a href="http://improve.dk/archive/2006/12/11/making-url-rewriting-on-iis7-work-like-iis6.aspx"&gt;Making URL rewriting on IIS 7 work like IIS 6&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="descr" style="margin-top: 0px; margin-right: 0px; margin-bottom: 6px; margin-left: 0px; color: #666644; font-size: 0.9em; padding: 0px;"&gt;&lt;div style="line-height: 20px; padding: 0px; margin: 0px;"&gt;Written on December 11, 2006 by Mark S. Rasmussen in&amp;nbsp;&lt;a id="ctl11_Categories_CatList_ctl01_Link" title="" href="http://improve.dk/category/56.aspx" style="color: #666644; text-decoration: none; padding: 0px; margin: 0px;"&gt;Sysadmin: Windows&lt;/a&gt;,&amp;nbsp;&lt;a id="ctl11_Categories_CatList_ctl03_Link" title="" href="http://improve.dk/category/57.aspx" style="color: #666644; text-decoration: none; padding: 0px; margin: 0px;"&gt;Sysadmin: IIS&lt;/a&gt;&amp;nbsp;&lt;br style="padding: 0px; margin: 0px;" /&gt;&lt;g:plusone size="medium" href="http://improve.dk/archive/2006/12/11/making-url-rewriting-on-iis7-work-like-iis6.aspx" style="padding: 0px; margin: 0px;"&gt;&lt;/g:plusone&gt;&lt;a href="http://twitter.com/share" class="twitter-share-button" data-url="http://improve.dk/archive/2006/12/11/making-url-rewriting-on-iis7-work-like-iis6.aspx" data-text="Making URL rewriting on IIS 7 work like IIS 6" data-count="horizontal" data-via="improvedk" style="color: #666644; text-decoration: none; padding: 0px; margin: 0px;"&gt;Tweet&lt;/a&gt;&amp;nbsp;&lt;iframe src="http://www.facebook.com/plugins/like.php?app_id=177885168944251&amp;amp;href=http%3a%2f%2fimprove.dk%2farchive%2f2006%2f12%2f11%2fmaking-url-rewriting-on-iis7-work-like-iis6.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=100&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font&amp;amp;height=21" scrolling="no" frameborder="0" allowtransparency="true" style="border-width: initial; border-color: initial; overflow-x: hidden; overflow-y: hidden; width: 100px; height: 21px; border-style: none; padding: 0px; margin: 0px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Upgrading to IIS 7 should be rather transparent, unfortunately that is not the case when it comes to URL rewriting as we knew it from IIS 6. In IIS 6 all we had to do was to add a wildcard mapping making sure that all requests went through the ASPNET ISAPI process. After this was done, one could create a global.asax file that would either pass requests directly through or rewrite the URL based on an internal algorithm.&lt;/p&gt;&lt;p&gt;&lt;b style="padding: 0px; margin: 0px;"&gt;UPDATE: Please see my&amp;nbsp;&lt;a href="http://improve.dk/archive/2009/10/14/how-to-do-url-rewriting-on-iis-7-properly.aspx" style="color: #004488; padding: 0px; margin: 0px;"&gt;updated post&lt;/a&gt;&amp;nbsp;on how to do proper URL rewriting using IIS 7.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;I didn't really expect this to be a problem when I first requested http://localhost for the first time after setting up my site on IIS 7 (all default settings).&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur1_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur1" border="0" alt="iis7ur1" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur1_thumb.jpg" width="624" height="522" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Unfortunately this was what I was presented with. Anyone having worked with wildcard mappings from IIS 6 will recognize this, this is the result you'll get after adding a wildcard mapping without having created your URL rewriting functionality. After adding a wildcard map the IIS will not automatically find a default file (by design).&lt;/p&gt;&lt;p&gt;This however, is not the problem cause here. I already have my URL rewriting functionality written in my global.asax BeginRequest method and I'd really like to just reuse my current code. Although the new IIS has a whole new bunch of features - one of them being a new "more correct" way of doing URL rewriting -, I really just wan't to get my website up and running again so I can continue my work.&lt;/p&gt;&lt;p&gt;What I present below is a quick'n'dirty hack that will get my old URL rewriting code to work again. It may not be the IIS 7 way of doing it, and it may not work in your case, it depends on the type of URL mapping you're doing in your project. In short,&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Your_mileage_may_vary" style="color: #004488; padding: 0px; margin: 0px;"&gt;YMMV&lt;/a&gt;.&lt;/p&gt;&lt;h2 style="margin-top: 0px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal bold 1.5em/normal sans-serif; color: #555533;"&gt;My scenario&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;For this website, improve.dk, all URL's except static files are requested as though they were folders. That means you will not see any pages ending in anything but a /. Any static files are requested as usual. That means I can be sure that a regular expression like *.* will catch all static files, while * will catch all pages - as well as the static files!&lt;/p&gt;&lt;h2 style="margin-top: 0px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal bold 1.5em/normal sans-serif; color: #555533;"&gt;How I got URL rewriting to work like IIS 6&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Start by opening the IIS Manager and selecting your website.&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur2_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur2" border="0" alt="iis7ur2" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur2_thumb.jpg" width="624" height="349" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Now enter the "Handler Mappings" section:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur3_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur3" border="0" alt="iis7ur3" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur3_thumb.jpg" width="624" height="349" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Notice the "StaticFile" handler. Currently it's set to match * and catch both File and Directory requests. If you look back at the first image, you'll notice that the error message details that the handler causing the 404 error is the StaticFile handler. As I know that all my static files will have a file extension (also I don't care for directory browsing), I'll simply change my StaticFile handler so it only matches *.* - and only files.&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur4_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur4" border="0" alt="iis7ur4" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur4_thumb.jpg" width="465" height="376" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur5_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur5" border="0" alt="iis7ur5" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur5_thumb.jpg" width="465" height="376" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Your StaticFile handler should now look like this:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur6_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur6" border="0" alt="iis7ur6" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur6_thumb.jpg" width="624" height="55" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Now, if you go back and make a request to http://localhost you'll still get the 404 error, but this time the request is not handled by the StaticFile handler, actually it doesn't get handled by any handler at all:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur7_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur7" border="0" alt="iis7ur7" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur7_thumb.jpg" width="206" height="69" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;What needs to be done now is that we need to map any and all requests to the aspnet_isapi.dll isapi file - just like we would usually do in IIS 6.&lt;/p&gt;&lt;p&gt;Add a new Script Map to the list of Handler Mappings and set it up like this:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur8_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur8" border="0" alt="iis7ur8" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur8_thumb.jpg" width="465" height="376" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur9_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur9" border="0" alt="iis7ur9" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur9_thumb.jpg" width="465" height="376" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Click OK and click&amp;nbsp;&lt;i style="padding: 0px; margin: 0px;"&gt;Yes&lt;/i&gt;&amp;nbsp;at the confirmation dialog:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur10_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur10" border="0" alt="iis7ur10" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur10_thumb.jpg" width="484" height="176" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Now if you make a request to either http://localhost or any other file you'll get the following error:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur11_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur11" border="0" alt="iis7ur11" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur11_thumb.jpg" width="624" height="246" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Looking throug the Event log reveals the cause of the error:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur12_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur12" border="0" alt="iis7ur12" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur12_thumb.jpg" width="624" height="432" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The aspnet_isapi.dll file cannot be used as a Handler for websites running in the new IIS 7 Integrated Mode, thus we will need to make our website run in classic .NET mode. Right click your website node in the IIS Manager and select Advanced Settings. Select the "Classic .NET AppPool" and close the dialog boxes:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur13_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur13" border="0" alt="iis7ur13" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur13_thumb.jpg" width="332" height="226" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Now you should be able to make a request to http://localhost and see it work. Your URL rewriting should work as a charm aswell:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur14_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur14" border="0" alt="iis7ur14" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur14_thumb.jpg" width="624" height="468" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;But obviously somethings wrong. Making a request to any static file will reveal the problem:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur15_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur15" border="0" alt="iis7ur15" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur15_thumb.jpg" width="624" height="468" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;"Failed to Execute URL", what a great descriptive error. Fortunately you won't have to spend hours ripping out hair... As I have already done that - at least I'll save a trip or two to the barber.&lt;/p&gt;&lt;p&gt;The problem is that the static files are being processed by the aspnet_isapi.dll file instead of simply sending the request along to the StaticFile handler. If you click the "View Ordered List..." link in the IIS Manager from the Handler Mappings view, you'll see the order in which the handlers are being executed for each request:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur16_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur16" border="0" alt="iis7ur16" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur16_thumb.jpg" width="624" height="564" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;When you add a new Script Map it'll automatically get placed at the very top of the line taking precedence over any other handlers, including the StaticFile one.&lt;/p&gt;&lt;p&gt;What we have to do is to move our Wildcard handler to the very bottom, below the StaticFile handler. By letting the StaticFile handler have precedence over our Wildcard handler we ensure that any static files (matching *.*) gets processed correctly while any other URL's gets passed along to our own Wildcard handler that'll do the URL rewriting and make business work as usual:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur17_2.jpg" style="color: #004488; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur17" border="0" alt="iis7ur17" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur17_thumb.jpg" width="624" height="541" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;After doing so, both static files as well as your custom URL's should execute as they would under IIS 6:&lt;/p&gt;&lt;p&gt;&lt;a href="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur18_2.jpg" style="color: #0066cc; padding: 0px; margin: 0px;"&gt;&lt;img title="iis7ur18" border="0" alt="iis7ur18" src="http://improve.dk/images/improve_dk/Windows-Live-Writer/Making-URL-rewriting-on-IIS-7-work-like-_27AC/iis7ur18_thumb.jpg" width="624" height="431" class="quimby_search_image" style="background-image: none; display: inline; border-width: 0px; border-color: initial; border-style: initial; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;a class="quimby_tempore_link" href="http://www.google.com/searchbyimage?sbisrc=cr_1_0_0&amp;amp;image_url=http%3A%2F%2Fimprove.dk%2Fimages%2Fimprove_dk%2FWindows-Live-Writer%2FMaking-URL-rewriting-on-IIS-7-work-like-_27AC%2Fiis7ur18_thumb.jpg" target="_blank" style="color: #004488; width: 0px; height: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-width: initial; border-color: initial; border-style: none; padding: 0px; margin: 0px;"&gt;&lt;img class="quimby_search quimby_search_image" src="chrome-extension://dajedkncpodkggklbegccjpmnglmnflm/empty.png" style="background-image: url(data:; base64,ivborw0kggoaaaansuheugaaabiaaaapcayaaadphp8saaaabhncsvqicagifahkiaaaaalwsflzaaaonaaadpwbb5rt3qaaabz0rvh0q3jlyxrpb24gvgltzqawmi8yns8xmapavmwaaaacdevydfnvznr3yxjlaefkb2jliezpcmv3b3jrcybduzvxtem2aaabjkleqvq4jzwtwwotursgv5lmp1omxuiuxisccbw06dantguh7umbchaeoobszbmen92lxxthohvtoashoyukjqkaxwrjki7abjpt9v6uesbptgp/ohdpvf/5zjmla0nico0zwmoda2bzvqztekg1rdwholaxmkqtbjkwjo1jopn0iek8eqqenxvxlp8jqs7pnixpe+1v9+yw058ft19yoqhkjb+9xikcocdcyadvj4mki+p68q1/f5hz4s1qgwsabnuwszmod+7nws75thk5wshw0dzhbem3x/3zjg/ciwdbttu6r63kuz2f5nnmd8li4lk2tyofhq7mefnm56xjmldale5t2+osrgaaqwr4sdwlxjpo9wecbvi5ewsoqwsymkwvyqrdgog5/z57rn0jfiwo8emy4ffhbpncm/vkgq/nk1s/k3olvn4/ym31jk8f38fzbqah4fpxu3be/8oegscxfbhehu16j+16l6txxkenffwq+u3/caepxplbwdsk3zk0g/tr14ltstusin8bumr8td343bwaaaaasuvork5cyii=) !important; background-attachment: scroll !important; background-origin: initial !important; background-clip: initial !important; background-color: transparent; left: 891px; top: 8063px; z-index: 2.14748e+009; width: 29px; height: 27px; position: absolute !important; border-width: initial; border-color: initial; background-position: 5px 5px !important; background-repeat: no-repeat no-repeat !important; border-style: none; padding: 0px; margin: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;h2 style="margin-top: 0px; margin-right: 0px; margin-bottom: 4px; margin-left: 0px; padding-top: 10px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font: normal normal bold 1.5em/normal sans-serif; color: #555533;"&gt;Disclaimer&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Please notice that this is a hack. This is not the way URL rewriting is supposed to be done under IIS 7. But instead of spending hours upon hours investigating how to do it the right way, this is quick fix to make things work like they did before.&lt;/p&gt;&lt;p&gt;Also please note that this solution is intended to work for my specific situation. Your needs for URL rewriting may not necessarily match mine, so you may have to modify certain settings to suit your specific needs.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mmmjiang13/aggbug/2203831.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2011/10/09/2203831.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mmmjiang13/archive/2011/08/09/2131637.html</id><title type="text">浏览器请求阻塞到底是怎么回事?我们为什么要把静态资源分服务器放置?</title><summary type="text">这篇文章的起因 由于在 Session 有没有必要使用它 这篇文章里面对Session对并发访问的影响这个列子中的提出自己的看法，我认为是开玩笑的说了一句两毛钱关系，跟一位叫ice6的朋友发生不愉快的争吵并且我出口伤人…在此对你再一次道歉.由于以前知道浏览器会延迟加载请求，但是并不太清楚原因，所以在当天晚上就好好学习了资料，这几天太忙，今天晚上花时间记录在此，也给不清楚的朋友提供一个信息.浏览器为什么会延迟加载请求 这是一个历史问题：在浏览器刚刚流行的时候，大部分用户是通过拨号来上网，由于受当时的带宽条件的限制，无法使得用户的同时多个请求被处理。同时，当时的服务器的配置也比现在差很多，所以现在</summary><published>2011-08-08T16:56:00Z</published><updated>2011-08-08T16:56:00Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mmmjiang13/archive/2011/08/09/2131637.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/archive/2011/08/09/2131637.html"/><content type="html">&lt;p&gt;&lt;strong&gt;这篇文章的起因&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: 幼圆; font-size: 16px;"&gt;由于在 &lt;a href="http://www.cnblogs.com/fish-li/archive/2011/07/31/2123191.html" target="_blank"&gt;Session 有没有必要使用它&lt;/a&gt; 这篇文章里面对Session对并发访问的影响这个列子中的提出自己的看法，我认为是开玩笑的说了一句两毛钱关系，跟一位叫&lt;a href="http://home.cnblogs.com/u/ice6/" target="_blank"&gt;ice6&lt;/a&gt;的朋友发生不愉快的争吵并且我出口伤人&amp;hellip;在此对你再一次道歉.由于以前知道浏览器会延迟加载请求，但是并不太清楚原因，所以在当天晚上就好好学习了资料，这几天太忙，今天晚上花时间记录在此，也给不清楚的朋友提供一个信息&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;浏览器为什么会延迟加载请求&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;这是一个历史问题：在浏览器刚刚流行的时候，大部分用户是通过拨号来上网，由于受当时的带宽条件的限制，无法使得用户的同时多个请求被处理。同时，当时的服务器的配置也比现在差很多，所以现在每个浏览器的连接数的大小也是有必要的。浏览器默认对同一域下的资源，只保持一定的连接数，阻塞过多的连接,以提高访问速度和解决阻塞问题。不同浏览器的默认值不一样，对于不同的HTTP协议其值也不一样,参看下表:&lt;/span&gt;&lt;/p&gt;&lt;table border="2" cellspacing="0" cellpadding="2" style="width: 600px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;浏览器&lt;/td&gt;&lt;td valign="top" width="200"&gt;HTTP 1.1&lt;/td&gt;&lt;td valign="top" width="200"&gt;HTTP 1.0&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;IE 6,7&lt;/td&gt;&lt;td valign="top" width="200"&gt;2&lt;/td&gt;&lt;td valign="top" width="200"&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;IE 8&lt;/td&gt;&lt;td valign="top" width="200"&gt;6&lt;/td&gt;&lt;td valign="top" width="200"&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Firefox 2&lt;/td&gt;&lt;td valign="top" width="200"&gt;2&lt;/td&gt;&lt;td valign="top" width="200"&gt;8&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Firefox 3&lt;/td&gt;&lt;td valign="top" width="200"&gt;6&lt;/td&gt;&lt;td valign="top" width="200"&gt;6&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Safari 3, 4&lt;/td&gt;&lt;td valign="top" width="200"&gt;4&lt;/td&gt;&lt;td valign="top" width="200"&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Chrome 1,2&lt;/td&gt;&lt;td valign="top" width="200"&gt;6&lt;/td&gt;&lt;td valign="top" width="200"&gt;?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Chrome 3&lt;/td&gt;&lt;td valign="top" width="200"&gt;4&lt;/td&gt;&lt;td valign="top" width="200"&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="200"&gt;Opera 9.63,10.00alpha&lt;/td&gt;&lt;td valign="top" width="200"&gt;4&lt;/td&gt;&lt;td valign="top" width="200"&gt;4&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;strong&gt;如何查看我们自己的连接数设置和修改我们的连接数&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;strong&gt;Firefox&lt;/strong&gt;：地址栏敲入 about:config&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108090046156354.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="firefox链接" border="0" alt="firefox链接" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108090046232954.png" width="697" height="158" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;strong&gt;network.http.keep-alive&lt;/strong&gt;: 持久连接，HTTP1.1 中缺省就是支持 keepalive,Keepalive功能使客户端到服务器端的连接持续有效，能被多个请求重用，当出现对服务器的后继请求时，避免了建立或者重新建立连接,详细情况参见&lt;a href="http://www.byvoid.com/blog/http-keep-alive-header/" target="_blank"&gt;这里&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;strong&gt;network.http.keep-alive.timeout&lt;/strong&gt;:浏览器关闭连接的超时时间。其意义在于服务端可以选择不主动关闭连接而是等待客户端来关闭&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;strong&gt;network. http. max-connections&lt;/strong&gt;:设置Http同时连接的最大数量&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;strong&gt;network. http. max-connections-per-server&lt;/strong&gt;：设置对单个HOST的最大连接数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;strong&gt;* network.http.max-persistent-connections-per-proxy&lt;/strong&gt;: 设置使用代理的时候的持久连接（keep-alive connections ）的最大个数&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;strong&gt;* network.http.max-persistent-connections-per-server&lt;/strong&gt;：设置对每个服务器持久连接（keep-alive connections ）的最大个数，推荐10&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;请注意，由于我们现在的基本都使用http 1.1协议，而firefox默认设置的就是network.http.keep-alive:True,所以我们设置的时候就看打*号得2项。而我们一般不使用代理,Firefox的Wiki推荐的network.http.max-persistent-connections-per-server设置为：&amp;lt;=10&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;strong&gt;network.http.pipelining:Pipelining&lt;/strong&gt;技术的好处在于可以把多个Http请求打包成一个TCP/IP包，减少网络传输成本,详细的说明(优势和限制)可以看&lt;a href="http://www-archive.mozilla.org/projects/netlib/http/pipelining-faq.html" target="_blank"&gt;这里&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;strong&gt;network.http.pipelining.maxrequests&lt;/strong&gt;: 设置开启Pipelining的时候最大的请求个数,推荐设置8。它需要打包您设置的这个个数，所以设置值越高，第一个请求响应延迟响应时间越长，最后一个越快，所以设置一个平衡数吧.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;strong&gt;IE的设置请参考&lt;/strong&gt;:&lt;a href="http://support.microsoft.com/?kbid=282402"&gt;http://support.microsoft.com/?kbid=282402&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;知道这个对我们有什么帮助&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;1.由于我们知道了浏览器为什么会限制以及如何限制的当个HOST的请求数，那么我们就能知道为什么我们要分开多个HOST加载静态资源，比如淘宝，用了多台服务器处理图片，JS，css等的请求，并对JS，css文件做了&lt;code&gt;chunked编码来应对这些问题。当然GZIP之类的不说，跑题了。。&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;code&gt;2.帮助好像没有别的了&amp;hellip;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;还没完呢&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;&lt;code&gt;那么如果我放20个服务器放我的静态资源，那么一个网速一般的用户的请求能飞快的被处理吗？不是这样的，看看&lt;a href="http://yuiblog.com/blog/2007/04/11/performance-research-part-4/" target="_blank"&gt;这里&lt;/a&gt;，&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;In our experiment, we vary the number of aliases: 1, 2, 4, 5, and 10. This increases the number of parallel downloads to 2, 4, 8, 10, and 20 respectively. We fetch 20 smaller-sized images (36 x 36 px) and 20 medium-sized images (116 x 61 px). To our surprise, increasing the number of aliases for loading the medium-size images (116 x 61px) worsens the response times using four or more aliases. Increasing the number of aliases by more than two for smaller-sized images (36 x 36px) doesn&amp;rsquo;t make much of an impact on the overall response time. On average, using two aliases is best.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;网页优化的路长着呢，优化的文章也很多，希望水平和我差不多菜得朋友，大家能一起学习，一起进步&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;好吧 现在说那个例子的问题所在&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;我加了成了10个页面在这里展示，第一次，我调整了我设置成为这样：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108090046253105.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="bbbb" border="0" alt="bbbb" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108090046275872.png" width="646" height="88" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108090046422892.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="ccccc" border="0" alt="ccccc" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108090046503429.png" width="906" height="320" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 16px;"&gt;可以清楚的看到，当default.aspx页面加载之后，同时发出了3个请求,后面2个页面也是没有任何延迟的显示，当2,3号页面请求完成之后，马上又发出了2个请求，因为第一个请求被人为的延迟了，所以后面始终是2个请求2个请求的来&amp;hellip;这里跟session没有关系.假设我们的页面延迟5秒加载，那么可能是我们程序有问题了，如果真要证明Session对请求的阻塞的影响，接管Http请求之后针对相应文件请求进行延迟可能效果会更好一点.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px; font-family: 幼圆;"&gt;&lt;a href="http://www.cnblogs.com/fish-li/"&gt;ps:Fish Li&lt;/a&gt; 不是故意针对你，通过你的文章我学到不少知识，通过留言我又学到不少东西，非常感谢你. 希望你不要介意~~&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mmmjiang13/aggbug/2131637.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2011/08/09/2131637.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mmmjiang13/archive/2011/08/08/2131345.html</id><title type="text">自增列无法插入重复主键解决办法</title><summary type="text">遇到一个很奇快的问题，在INT自增的表中，插入信息时没有涉及主键字段，报错：Violation of PRIMARY KEY constraint 'PK_****’. Cannot insert duplicate key in object 'dbo.TableName'. 无法在表中插入重复键！直接把语句拿到查询分析器里去执行，也报相同错误。解决办法：1.取消主键，再设置主键，程序照常运行2.执行以下SQL语句,复制得到的结果，执行SELECT 'DBCC CHECKIDENT (' + Table_Name + ')' FROM </summary><published>2011-08-08T13:21:00Z</published><updated>2011-08-08T13:21:00Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mmmjiang13/archive/2011/08/08/2131345.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/archive/2011/08/08/2131345.html"/><content type="html">&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;遇到一个很奇快的问题，在INT自增的表中，插入信息时没有涉及主键字段，报错：Violation of PRIMARY KEY constraint 'PK_****&amp;rsquo;. Cannot insert duplicate key in object 'dbo.TableName'. 无法在表中插入重复键！&lt;/p&gt;&lt;p&gt;直接把语句拿到查询分析器里去执行，也报相同错误。&lt;/p&gt;&lt;p&gt;解决办法：&lt;/p&gt;&lt;p&gt;1.取消主键，再设置主键，程序照常运行&lt;/p&gt;&lt;p&gt;2.执行以下SQL语句,复制得到的结果，执行&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;SELECT 'DBCC CHECKIDENT (' + Table_Name + ')' FROM information_schema.tables WHERE TABLE_TYPE = 'BASE TABLE'&lt;/div&gt;&lt;/blockquote&gt;问题原因:标示种子值与表中的实际值不同步，DBCC CHECKIDENT 语句用来检查如果表的当前标识值小于列中存储的最大标识值，则使用标识列中的最大值对其进行重置~！&lt;img src="http://www.cnblogs.com/mmmjiang13/aggbug/2131345.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2011/08/08/2131345.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mmmjiang13/archive/2011/08/03/2125640.html</id><title type="text">再从淘宝数据结构来看电子商务中商品属性设计</title><summary type="text">前言 那个啥…前面发了2篇文章讲这个商品表的设计，后面越多需求浮出水面才发现设计依旧有问题，好吧，乐观一点，正如我博客的标题一样，我在进化…^_^为什么要这样设计先说几个需求，看看您现在是如何去实现：一个用户来到我们网站,在前台页面,1.他要买洗发水，他进入了洗发水的类别，他想买带去屑止痒功效的500ml的洗发水，能否直接搜索出来所有品牌带这个功效属性是500ml的洗发水2.接着他要买一件T恤，他想买V领，短袖的T恤，能否直接通过2个属性搜索出所有品牌的T恤展示给他3.他进入一个T恤的详情页面，由于白色卖的比较好，所以白色会比其他颜色贵一些，所以他选择不同颜色+不同尺码的搭配，就会显示出不同的</summary><published>2011-08-02T16:03:00Z</published><updated>2011-08-02T16:03:00Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mmmjiang13/archive/2011/08/03/2125640.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/archive/2011/08/03/2125640.html"/><content type="html">&lt;p&gt;&lt;strong&gt;前言&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt; 那个啥&amp;hellip;前面发了2篇文章讲这个商品表的设计，后面越多需求浮出水面才发现设计依旧有问题，好吧，乐观一点，正如我博客的标题一样，我在进化&amp;hellip;^_^&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;为什么要这样设计&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;先说几个需求，看看您现在是如何去实现：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;&lt;strong&gt;一个用户来到我们网站,在前台页面&lt;/strong&gt;,&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;1.他要买洗发水，他进入了洗发水的类别，他想买带去屑止痒功效的500ml的洗发水，能否直接搜索出来所有品牌带这个功效属性是500ml的洗发水&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;2.接着他要买一件T恤，他想买V领，短袖的T恤，能否直接通过2个属性搜索出所有品牌的T恤展示给他&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;3.他进入一个T恤的详情页面，由于白色卖的比较好，所以白色会比其他颜色贵一些，所以他选择不同颜色+不同尺码的搭配，就会显示出不同的价格以及是否有库存&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;&lt;strong&gt;后台&lt;/strong&gt;：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;1.统计某些商品某种属性销量情况和库存，反馈给仓库部门及时备货，比如海飞丝去屑系列的250ml的洗发水在这个系列中卖的最好，300ml的其次。A品牌XX大衣红色XL时间段内的销量和库存量。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;2.这个洗发水在做一个阶梯价销售，买2瓶便宜2块，买3瓶便宜5块，需要给出这种组合的销售量数据给策划人员来说明阶梯价销售对消费者的影响&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;3.A品牌T恤分圆领，V领，7分袖，短袖，统计圆领和V领销量情况供买手或者设计师参考大众比较接受什么设计，以备下一次的采购。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;4.这一年做了几十个活动，每个活动做了很多单品的搭配组合销售，比如500ml某种洗发水+黄色的眼霜等，我们现在没有做数据仓库和数据分析，那么要求sql语句来得到那种单品的销量情况，让我们可以能得知策划者的搭配到达了什么样的效果。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;甚至变态一点，我们要统计我们店得面膜的销售，我要知道撕拉型的面膜，水洗式面膜，睡眠免洗式面膜中带美白功能，带抗皱功能，带控油功能等哪种卖的好一些，怎么办呢？&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ffff00; font-family: 幼圆; font-size: 15px;"&gt;顺便扯一句，根据商品放置在页面的位置，深度，销量可以分析出某些品牌商品不需要放置在重要位置，某些对于我们来说利润高一点，或者销量不是很理想的商品放在重要位置或者排序在前来提高用户浏览量进而提高购买率。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;如果不设计属性，这种搜索是很难进行的！如果不分的这么彻底，比如ecshop或者&lt;a href="http://www.nopcommerce.com/"&gt;nopecomerce&lt;/a&gt;,那么你无法针对每个SKU设置组合搭配的价格和数量以及商家编码和SN号。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;上一篇设计出现的问题以及解决办法&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2011/04/21/1983079.html" target="_blank"&gt;在上一遍文章&lt;/a&gt;中，有比较大的问题没有解决:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;1.商品录入编辑界面编码实现过于复杂&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;2.如何通过属性搜索&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;3.按现在属性值属性表设计无法做到，如果A品牌洗发水有去痒止屑功效，B品牌洗发水同样有这个系列，无法搜索具有去痒止屑功效属性的所有洗发水的销量，因为现在的属性名和属性值表是1：N的关系，应该是N:N的关系&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;解决问题1：最简单的实现商品的录入界面:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108022351161738.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="ss1" border="0" alt="ss1" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/20110802235120785.jpg" width="287" height="383" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108022351247.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="ss2" border="0" alt="ss2" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108022351282958.jpg" width="508" height="383" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;在这里，我把商品的品牌和系列这个麻烦的东西分开了，为什么分开：品牌和系列导致2个属性名表和属性值多级引用，在实际代码实现过程中也会增加很多代码，增加复杂性.&lt;span style="background-color: #ffff00;"&gt;&lt;strong&gt;由于项目原因，这里只做了父子及关系，您在设计的时候，这里应该是品牌一张表，系列是父子及，有第3张表记录品牌与系列的多对多关系&lt;/strong&gt;&lt;/span&gt;。为什么呢，只有这样，才能满足比如A洗发水有去屑止痒系列，B洗发水同样也有这个系列，那么才能方便的统计出去屑止痒洗发水的总的销售情况！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;解决问题2.通过属性搜索&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;1.首先说明这个SKU和属性如何存储&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108022351302138.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="ccc" border="0" alt="ccc" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108022351322496.jpg" width="359" height="346" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108022351348361.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="attr" border="0" alt="attr" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108022351387376.jpg" width="498" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108022351444306.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="sku1" border="0" alt="sku1" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201108/201108022351498238.jpg" width="849" height="158" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;在添加一个商品的时候，在pg_items表中保持商品的基本信息.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;pg_item_sku表中保存sku信息，这个sku信息用来实现页面上的选择颜色，尺码这种组合不同价格，或者洗发水选择不同毫升数不同价格。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;pg_item_attr表中保存所有属性信息，包括每个SKU的属性拆分之后的信息，这样的话，保证能通过每种属性来搜索商品。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;&lt;span style="background-color: #ffff00;"&gt;比如我要搜索带有滋润功能的200ml的沐浴露，那么我的语句就是&lt;/span&gt;：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;SELECT  DISTINCT(dbo.pg_items.item_id),pg_items.name FROM dbo.pg_item_attr pa &lt;br/&gt;INNER JOIN dbo.pg_items ON pg_items.item_id = pa.itemid &lt;br/&gt;INNER JOIN pg_item_attr pa2 ON pa.itemid = pa2.itemid -- 组合 &lt;br/&gt;WHERE pa.p_id=772167869 AND pa.v_id=1866712003 &lt;br/&gt;AND pa2.p_id = 1419662919 AND pa2.v_id = 758727405 -- 组合&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;我的做法是，通过属性值ID和属性名ID的组合组合成上面的语句，有多条就组合多次,这里按照我们一般的情况，是不会说组合到级联10几次的，如果您觉得不靠谱，欢迎提出出您的看法&lt;/span&gt;。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;解决问题3.统计相同特性的不同商品的销售情况&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;如通过洗发水功效，服装的花色，衣领的样式来分析特性的不同对销售的影响.要实现在属性名和属性值表的设计的时候，应该是有第三张关系映射记录表来记录多对多关系。我这里还是偷懒了，因为我是针对淘宝的系统，拉下的属性已经是把3张表打横成了2张表，正好不用自己做了。&lt;span style="background-color: #ffff00;"&gt;如果是自己做系统，那就得考虑加上关系映射表.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;这样设计的缺点&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;1.实现复杂&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;2.需要商品维护人员对自己商店卖的各种商品的属性，注重的统计的方面有个比较清晰的认识，学习成本高一点&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;3.策划，业务人员必须理解这样的设计，才能结合系统给决策带来所需要的数据&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 15px;"&gt;我觉得程序员应该对业务的理解仅次于项目的策划人和需求分析人员甚至比他们对某些商业模式更为理解，深入行业，了解行业的点点滴滴，有敏锐的需求的嗅觉，那么才能做出好的程序。而且程序是为业务服务的，如果不深入了解业务，那么很多时候程序会偏掉，举一个简单的列子，现在某衣服做一个活动，上午是200块，下午是150块，在晚上是100块，那么这个价格变动带来的销量就能给活动策划者提供强有力的数据支撑，我们也能学到背后的商业模式，为什么要这样做，如何做！（赚人气，打造爆款，清仓等）不然就写几行代码，搞搞表关系，有什么意思？？其实里面的各种调调，比几行代码有意思太多了!&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mmmjiang13/aggbug/2125640.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2011/08/03/2125640.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mmmjiang13/archive/2011/06/12/2078040.html</id><title type="text">工作中常用,实用工具推荐！</title><summary type="text">Red Gate 家族大名鼎鼎的RedGate,相信大家都不会陌生，Reflector就是它家做的。这里就不介绍了.我本地安装的是09年下的一个套装，我介绍下常用的工具：SQL DOC:如图：图1是编辑表名，编辑好之后图2能选择多种生成类型，图3和4是生成的chm的效果，挺不错的吧，索引，sql脚本，都生成好了，看起来 很不错啊！SQL DataGenerator为我们新项目生成测试数据，...</summary><published>2011-06-12T15:55:00Z</published><updated>2011-06-12T15:55:00Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mmmjiang13/archive/2011/06/12/2078040.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/archive/2011/06/12/2078040.html"/><content type="html">&lt;p&gt;&lt;strong&gt;Red Gate 家族&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a target="_blank" href="http://www.red-gate.com/"&gt;&lt;img height="111" width="358" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102233025297.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102233201083.png"&gt;&lt;img height="83" width="244" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/20110610223335226.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102340457007.png"&gt;&lt;img height="244" width="178" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102340546296.png" alt="image" border="0" title="image" style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;大名鼎鼎的RedGate,相信大家都不会陌生，Reflector就是它家做的。这里就不介绍了.我本地安装的是09年下的一个套装，我介绍下常用的工具：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;SQL DOC&lt;/strong&gt;&lt;/span&gt;:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;如图：图1是编辑表名，编辑好之后图2能选择多种生成类型，图3和4是生成的chm的效果，挺不错的吧，索引，sql脚本，都生成好了，看起来 &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;很不错啊！&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102341235397.png"&gt;&lt;img height="241" width="484" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102341474384.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102341571504.png"&gt;&lt;img height="228" width="434" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102342109859.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102342236578.png"&gt;&lt;img height="226" width="468" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/20110610234245874.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102343029801.png"&gt;&lt;img height="220" width="461" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102343182979.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;SQL DataGenerator&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;为我们新项目生成测试数据，你也可以自定义数据比如说长度啊，最小最大值，递增还是随机等等，如果表建立了主外键关系，那么它会自动的生成关系对应的测试数据&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102345162188.png"&gt;&lt;img height="408" width="938" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102346262550.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;SQL Prompt Query Analyzer Integration&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;以前用SQL Assistant，但是感觉确实没它好用.它是相当好用的语法自动提示工具，还能随时看表结构，视图，存储过程脚本&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102346378788.png"&gt;&lt;img height="229" width="830" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102348582916.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;SQL Compare And &amp;nbsp;Sql DataCompare&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;&lt;strong&gt;　这个工具强烈推荐&lt;/strong&gt;&lt;/span&gt;，&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;我用它来比较我本地的数据库和服务器上的数据库的差异，不管是存储过程，表结构，表关系，全部给你列出来，只需点击2下自动给你同步过来。现在的项目比较急，可能还需要晚上在家里加班，那么在快下班的适合，首先使用Sql compare 同步服务器上的做过修改的表，存储过程，方法，视图这些到我本地的表，在使用Sql datacompare同步数据到我本地，就好了，到我第二天去上班,我同步好我修改或添加的表结构，存储过程到服务器上就好了，不需要自己记录哪里做过修改了..&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102349599737.png"&gt;&lt;img height="364" width="915" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102350309625.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102351574660.png"&gt;&lt;img height="432" width="898" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102353174334.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;XMiand&lt;/strong&gt;：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;异常强大的国产思维导图工具，还能将图同步到服务器上.做思维导图和头脑风暴必备软件，还能转换绘制鱼骨图、二维图、树形图、逻辑图、组织结构图.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102354188298.png"&gt;&lt;img height="432" width="933" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102355226462.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;CintaNotes&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102355238546.png"&gt;&lt;img height="52" width="136" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102355272040.png" alt="image" border="0" title="image" style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;方便的随手记工具":随手记录一些事物，它的特色功能是在网页上看到一段信息，只需要选中一段，Ctrl+F12，就能保存进工具，链接也给自动保存进去了，相当方便的工具&lt;/strong&gt;&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102356036709.png"&gt;&lt;img height="275" width="928" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102357169910.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106102357544843.png"&gt;&lt;img height="298" width="922" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110000539063.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;页面原型工具&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Axure 超实用页面原型工具.好的页面原型是项目组成员顺利沟通的一个非常重要因素，Axure能快速制作页面原型，还能界面手动式加上事件，链接跳转，弹出层等等一切HTML开发中常用功能，做好之后能生成html，便于浏览，讨论。下面原型是我同事小兵做的，貌似我接触的我们公司需求分析人员对这个都很在行，做的东西都很漂亮。图1是模型，图2是生成的HTML&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011073013322616.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011073013325428.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;FireFox插件&lt;/strong&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;ScrapBook&lt;/strong&gt;&lt;/span&gt;:&lt;strong&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;强烈推荐，我已经离不开它了，它能做的是保存页面在本地，我看到什么好文章，好效果，需要常用的页面都分类保存下来,下次我就可以直接在FireFox里面浏览呢.你可以只保存你想要的DOM节点，加备注，高亮，是记录一些东西必备的插件，如下图，我保存了淘宝api入口，每次需要使用，按下Alt+K,直接浏览&lt;/span&gt;&lt;/strong&gt;:&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110001485779.png"&gt;&lt;img height="211" width="931" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/20110611000222251.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110002333881.png"&gt;&lt;img height="179" width="931" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110003356025.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Firebug和YSlow就不说了，太常用了，开发必备.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110003439708.png"&gt;&lt;img height="169" width="903" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110004376816.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;CoolPreviews&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110004593304.png"&gt;&lt;img height="66" width="244" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110005057802.png" alt="image" border="0" title="image" style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;喜欢看论坛比如品色堂的兄弟必备..实在太方便了..也是必备的。使用方法:论坛一般要点进去在进入详细的文章页面，用了这个插件，鼠标放到链接上，后面出现一个图片，鼠标移动到图标，自动在一个窗口打开页面，很方便~&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110007389904.png"&gt;&lt;img height="261" width="858" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110008122390.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;VS2010必备插件&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;CodeMap&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;&lt;strong&gt;这是在博客园看到的一位朋友文章介绍的，很好用的插件，所有的方法，注释块在右边一目了然，找代码方便极了，还能设置代码段的高亮，给代码段设置标识&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110008203772.png"&gt;&lt;img height="328" width="871" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110008537064.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;JavaScript parser&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆;" face="幼圆"&gt;和上面功能有点像，折叠JS代码，快速找到JS中类，方法的工具&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110008597376.png"&gt;&lt;img height="274" width="875" src="http://images.cnblogs.com/cnblogs_com/mmmjiang13/201106/201106110009296958.png" alt="image" border="0" title="image" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;个人管理工具&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Rainlendar2,之前用过Todolist，太麻烦和复杂了，碰到Rainlendar，感觉很适合我，轻量级，基本的功能都有，很不错，推荐.图一显示在我桌面上的图型界面，图二显示添加事件的窗口，这个支持多语言。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011073013404493.jpg" width="443" height="400" /&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011073013410460.jpg" width="450" height="400" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;如果觉得对您有帮助，请按下推荐吧 :)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;RedGate 套件含Linces下载地址: 我以前的XP系统和现在的WIN7都可以安装，2个Rar下载之后解压在一起，安装好之后，安装RedGate.Licensing.exe...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;a href="http://dl.dbank.com/c085obnsbw"&gt;http://dl.dbank.com/c085obnsbw&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;a href="http://dl.dbank.com/c0bp0maxlq"&gt;http://dl.dbank.com/c0bp0maxlq&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mmmjiang13/aggbug/2078040.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2011/06/12/2078040.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mmmjiang13/archive/2011/04/21/1983079.html</id><title type="text">从淘宝数据结构来看电子商务中商品属性设计</title><summary type="text">淘宝名词解释产品 和 商品的区别:淘宝标准化产品，由类目+关键属性唯一确定。如：手机类目，关键属性是品牌和型号，Nokia N95就是一个产品,nokia是品牌，N95是型号。产品除了关键属性还包括一般信息、销售属性和非关键属性。参考：如"诺基亚N95"就是一个产品。通过类目的关键属性组合来确定唯一的产品。后台标准类目叶子节点下，一组共同特征商品的组合（例如：化妆品+雅芳+保湿单品+容量），属于同...</summary><published>2011-04-20T16:57:00Z</published><updated>2011-04-20T16:57:00Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mmmjiang13/archive/2011/04/21/1983079.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/archive/2011/04/21/1983079.html"/><content type="html">&lt;p&gt;&lt;strong&gt;淘宝名词解释&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;产品 和 商品的区别&lt;/strong&gt;:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;淘宝标准化产品，由类目+关键属性唯一确定。如：手机类目，关键属性是品牌和型号，Nokia N95就是一个产品,nokia是品牌，N95是型号。产品除了关键属性还包括一般信息、销售属性和非关键属性。参考：如"诺基亚N95"就是一个产品。通过类目的关键属性组合来确定唯一的产品。后台标准类目叶子节点下，一组共同特征商品的组合（例如：化妆品+雅芳+保湿单品+容量），属于同一个产品的商品可以认为对消费者的效用及使用感受是没有差别的。 产品这个概念对淘宝这种C2C,B2C的平台是需要的，对我们一般的电子商务平台基本是可以忽略的.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;strong&gt;属性名和属性值&lt;/strong&gt;：&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;这里非常重要了，淘宝的宝贝搜索页面，通过各种属性对商品进行搜索，全靠属性表了。从数据结构可以看到，属性名表和属性值值归属于类目，提取了类目子叶节点下面商品的公共基本属性，在淘宝中，品牌和系列也当成是类目的属性，&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2010/11/04/1868609.html"&gt;可以看看这里来了解淘宝属性分类&lt;/a&gt;，这里看下图来了解属性名和属性值表之间的关系：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;img height="500" width="421" src="http://pic002.cnblogs.com/images/2011/45460/2011041916121076.jpg" /&gt;&lt;img height="500" width="421" src="http://pic002.cnblogs.com/images/2011/45460/2011041916122859.jpg" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;1.需要注意的是：左边的表中全部存放属性名，存在一个父子关系，比如品牌-&amp;gt;型号-&amp;gt;子型号,右边的属性值表只保存属性的值。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;2.左表的属性名表有个parentVid字段，这边的属性名也跟右边的属性值相关联，比如宏基下面有&amp;lsquo;宏基电脑的型号&amp;rsquo;，那么这个&amp;lsquo;宏基电脑的型号&amp;rsquo;属性名存放于属性名表，&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;具体有多少个型号，型号的名称还是存放于属性值表&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;3.如何添加自定义属性，如何给属性起别名，可以参考淘宝API的输入属性&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SKU：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img height="400" width="400" src="http://pic002.cnblogs.com/images/2011/45460/2011041917185890.jpg" /&gt;&lt;img style="float: left;" height="400" width="400" src="http://pic002.cnblogs.com/images/2011/45460/2011041917195429.jpg" /&gt;&lt;br /&gt;&lt;span style="font-family: 幼圆;"&gt;在淘宝中，SKU指销售属性的组合，表示一组最小销售单位。 如颜色：金色;套餐：单电单充，描述手机销售时实物特征。比如衣服： 颜色:红色;尺码:xl;我们可以通过这样的属性标示来确定一个商品.注意:比如洗发水,容量:150ML;买的多便宜多:*6;比如相机:颜色:红色;套餐:A套餐;这种特殊的营销模式也是一个SKU，我们后面就必须通过这些组合成SKU的属性来统计销售，库存等信息,比如我们才能知道红色，XL的衣服卖了多少，绿色,L的衣服卖了多少.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;span style="color: #ff0000;"&gt;注意：我们自己的电子商务中，是否需要这样的SKU设计，是需要的，不管你是用什么方法实现，但是根据属性统计销售等情况是电子商务中都会遇到的需求，但是有&lt;span style="background-color: #ffff99;"&gt;没有必要一定这样的实现&lt;/span&gt;，&lt;span style="background-color: #ffff99;"&gt;一件衣服，用户点击进来，才能看到SKU呢，没有必要的，其实做电子商务之后发现，图片，介绍，是给用户的第一直接感觉，所以，很多商家会把一个SKU的商品当一个独立的商品发布，比如衣服，红色的发布一个，蓝色的发布一个，这是完全有必要的，我们可以通过发布的多个SKU的单品，跳转到统一的页面让用户进行挑选，就比方说，你看了衣服A的黄颜色，衣服A的绿颜色，点击查看详情都是到一个页面，这样的话，为我们的商品提供更多次的展示，提高了用户的购买率&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: #ffff99;"&gt;；&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆;"&gt;品牌和系列:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;在淘宝中,如：日化/清洁/护理-&amp;gt;日化用品-&amp;gt;洗发水-&amp;gt;海飞丝-&amp;gt;清爽去屑系列，海飞丝以及它的系列都被规制到属性当中，结构为：品牌:海飞丝;系列:XXXXX，这样的话，不管你新有什么品牌，你只要属于我的分类，那你就添加基本属性就可以了，特殊的属性是可以手动输入的。因为商品的属性是针对每一个分类的子叶节点的，这样的设计，在我们做电子商务中思考是否适合自己。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;抓取属性&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;API文档:&lt;a href="http://my.open.taobao.com/apidoc/index.htm#categoryId:3"&gt;http://my.open.taobao.com/apidoc/index.htm#categoryId:3&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;API属性测试工具:&lt;a href="http://open.taobao.com/api_tool/props/"&gt;http://open.taobao.com/api_tool/props/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;SDK下载地址:&lt;a href="http://open.taobao.com/bbs/read.php?tid=18008"&gt;http://open.taobao.com/bbs/read.php?tid=18008&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600; font-family: 幼圆;"&gt;抓取详细的代码不写了，需要注意的是，由于数据很大，需要多次连接API得到数据，必须做好异常记录，不然抓一次，发现失败了很多次，那么必须又开始一次了，我是把失败的ID保存于数据库之中&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011041916580295.jpg" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;这样，抓完之后只要先删除这些抓取失败的，在来一次，就OK了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;通过属性来动态构建表单&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;1. 当用户选择完类目之后,我们已经可以通过类目ID得到类目下面所有的属性名和属性值，这里我们根据淘宝的添加商品页面分析淘宝是如何做的:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011042023304478.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;需要注意的是：&lt;span style="color: #ff6600;"&gt;淘宝属性这里的布局全是UL-&amp;gt;LI的布局，这样的结构和CSS配合起来让JS实现起来是最容易的。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;我们看到name=&amp;ldquo;keySpus&amp;rdquo;这里放置的&lt;a target="_blank" href="http://open.taobao.com/dev/index.php/%E5%85%B3%E9%94%AE%E5%B1%9E%E6%80%A7"&gt;关键属性&lt;/a&gt;，下面的所有LI中放置的是&lt;a href="http://open.taobao.com/dev/index.php/%E9%9D%9E%E5%85%B3%E9%94%AE%E5%B1%9E%E6%80%A7"&gt;非关键属性&lt;/a&gt;，和&lt;a href="http://open.taobao.com/dev/index.php/%E5%8F%AF%E8%BE%93%E5%85%A5%E5%B1%9E%E6%80%A7"&gt;用户自定义属性&lt;/a&gt;。我们通过什么来判断表单控件是select 还是checkboxlist，属性是什么类型的属性,属性下是否有子属性(品牌-&amp;gt;系列-&amp;gt;子系列),以及验证属性是否必填必选或者可自定义输入？请看属性的&lt;a href="http://my.open.taobao.com/apidoc/index.htm#categoryId:3-dataStructId:76"&gt;数据结构&lt;/a&gt;，is_key_prop,is_sale_prop,is_enum_prop,multi,must,child_template这些数据结构能告诉我们答案.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;好吧，实现上面相对简单一点,实现销售属性就麻烦了，因为销售属性可以组合成多个SKU，怎么来实现呢?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011042023494318.png" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;上图的洗发水的&amp;ldquo;毫升&amp;rdquo;和&amp;ldquo;买的多便宜多&amp;rdquo;组合成一个SKU，显示在下面的tr里面，实现这里有一个很取巧的办法，先把所有能组合好的属性构造出来，页面上隐藏N个TR，用户点击毫升或者*6 *12这种，我们显示相应的TR组就好了 :) 其实是个好办法的,可以省掉考虑很多问题，页面最多增加10来K，JS性能也能提高不少.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;如果你觉得这样的实现很困难或者很麻烦，推荐你看看&lt;a href="http://www.nopcommerce.com"&gt;nopecomerce&lt;/a&gt;开源项目的属性(它叫变体)实现.如图：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011042100260868.gif" /&gt;&lt;/p&gt;&lt;p&gt;展示效果:&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011042100274391.jpg" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;这样在多个页面的输入，减少了实现的难度，就是在后台有点麻烦。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;好吧,这篇文章在护士MM的生活照中结束吧，欢迎大家讨论，以前写一篇&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2010/11/04/1868609.html"&gt;分析淘宝商品设计&lt;/a&gt;的文章，不要去看.发现当时考虑问题没有考虑周全，后面有时间再写一篇.在前台实现快速的属性读取和页面展示，后台进行快速的报表展示,OLAP建模都需要考虑很多问题，也希望有经验的朋友能讨论个自是如何做的.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆;"&gt;2011-04-22 追加 &amp;nbsp;属性名表和属性值表关系图示&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011042214160164.jpg" /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;1.通过类目ID得到类目下面的所有属性值&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;2.通过类目ID+品牌ID（20000）得到洗发水的所有品牌&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 幼圆;"&gt;3.通过父VID+父PID+类目ID 得到美吾发洗发水品牌下的3个型号&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span face="幼圆" style="font-family: 幼圆;"&gt;在图1这里型号可以叫做'美吾发型号' '飘柔型号',属性名表和属性表存在相互引用关系，这里我们自己做的话也可以加上第3个表来存储关系。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mmmjiang13/aggbug/1983079.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2011/04/21/1983079.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mmmjiang13/archive/2011/04/07/2007629.html</id><title type="text">Java调用.Net WebService参数为空解决办法 (远程)调试webservice方法</title><summary type="text">同事遇到一个很囧的问题，java调,netwebservice的时候，调用无参数方法成功，调用有参数的方法每次我这边的webservice日志都记录参数为空，而我自己.Net程序调用完全没有问题，后面查资料得到： 为每个方法加上：[SoapRpcMethod(Use=SoapBindingUse.Literal,Action= "http://tempuri.org/MethodName", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri</summary><published>2011-04-07T03:04:00Z</published><updated>2011-04-07T03:04:00Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mmmjiang13/archive/2011/04/07/2007629.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/archive/2011/04/07/2007629.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp; 同事遇到一个很囧的问题，java调,netwebservice的时候，调用无参数方法成功，调用有参数的方法每次我这边的webservice日志都记录参数为空，而我自己.Net程序调用完全没有问题，后面查资料得到：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 为每个方法加上：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;[SoapRpcMethod(Use=SoapBindingUse.Literal,Action= "http://tempuri.org/MethodName", RequestNamespace = "http://tempuri.org/", ResponseNamespace = "http://tempuri.org/")] &lt;br/&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; 标示每个方法为Rpc方法，调用成功.&lt;/p&gt;&lt;p&gt;附20110408远程调试：今天同事突然问能不能从他那台机器访问我这台机器部署的webservice，进入断点跟踪。测试可行：&lt;/p&gt;&lt;p&gt;1.Win7系统,以管理员身份启动VS，打开WS项目&lt;/p&gt;&lt;p&gt;2.&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011040817033447.png" /&gt;&lt;/p&gt;&lt;p&gt;调试-&amp;gt;附加到进程-&amp;gt;显示所有会话中的进程-&amp;gt;w3wp.exe &amp;nbsp;OK~~&lt;/p&gt;&lt;img src="http://www.cnblogs.com/mmmjiang13/aggbug/2007629.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2011/04/07/2007629.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/mmmjiang13/archive/2011/03/24/1993303.html</id><title type="text">快速开发框架第二弹:让ORM为快速开发插上翅膀（2）改进和基础框架搭建</title><summary type="text">在上一篇的文章中，那样的封装让开发变的很爽，好吧，我承认这是面向数据库编程的思维。在一个类中，封装了单表的几乎所有操作，我的看法是，因为ORM封装了所有的与数据库打交道的操作，它就是项目中的数据交换层，由于这个泛型类封装了单对象的操作，那么使得我们独立了所有对象的基本操作，使复用达到最高，使我们关注点集中了在对象关系处理和复杂的业务逻辑中。（希望有经验的人能给我指导或者相互讨论）一.让封装回归正途 多数据库的支持 public class BaseDao&lt;T&gt; where T : Entity { public DbSession db; public BaseDao(DbSess</summary><published>2011-03-24T12:44:00Z</published><updated>2011-03-24T12:44:00Z</updated><author><name>活雷锋</name><uri>http://www.cnblogs.com/mmmjiang13/</uri></author><link rel="alternate" href="http://www.cnblogs.com/mmmjiang13/archive/2011/03/24/1993303.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/mmmjiang13/archive/2011/03/24/1993303.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 幼圆; font-size: 14px;"&gt;&lt;strong&gt;在上一篇的文章中，那样的封装让开发变的很爽，好吧，我承认这是面向数据库编程的思维。在一个类中，封装了单表的几乎所有操作，我的看法是，因为ORM封装了所有的与数据库打交道的操作，它就是项目中的数据交换层，&lt;span style="background-color: #ffff99;"&gt;由于这个泛型类封装了单对象的操作，那么使得我们独立了所有对象的基本操作，使复用达到最高，使我们关注点集中了在对象关系处理和复杂的业务逻辑中&lt;/span&gt;。（希望有经验的人能给我指导或者相互讨论）&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一.让封装回归正途 多数据库的支持&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    public class BaseDao&amp;lt;T&amp;gt; where T : Entity&lt;br/&gt;    {&lt;br/&gt;        public DbSession db;&lt;br/&gt;        public BaseDao(DbSession _db) {&lt;br/&gt;            db = _db;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        public BaseDao(): this(DbSession.Default)&lt;br/&gt;        { &lt;br/&gt;            &lt;br/&gt;        }&lt;br/&gt;        #region "查询"&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 通过条件得到对象&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;如果你的条件是得到单个 那么list《T》[0]就是这个对象&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual List&amp;lt;T&amp;gt; Get_Entity_byWhere(WhereClip where, OrderByClip orderby, params Field[] fields)&lt;br/&gt;        {&lt;br/&gt;            return db.From&amp;lt;T&amp;gt;()&lt;br/&gt;                .Where(where)&lt;br/&gt;                .Select(fields)&lt;br/&gt;                .OrderBy(orderby)&lt;br/&gt;                .ToList();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 得到DataTable数据集合&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="orderby"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="fields"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual DataTable Get_Entity_byWhere_ToTable(WhereClip where, OrderByClip orderby, params Field[] fields)&lt;br/&gt;        {&lt;br/&gt;            return db.From&amp;lt;T&amp;gt;()&lt;br/&gt;                .Where(where)&lt;br/&gt;                .Select(fields)&lt;br/&gt;                .OrderBy(orderby)&lt;br/&gt;                .ToTable();&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 通过条件得到单个对象&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="fields"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual T Get_SingleEntity_byWhere(WhereClip where, params Field[] fields)&lt;br/&gt;        {&lt;br/&gt;            return db.From&amp;lt;T&amp;gt;()&lt;br/&gt;                .Where(where)&lt;br/&gt;                .Select(fields)&lt;br/&gt;                .ToSingle();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 得到所有的数据&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;datatable&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual DataTable Get_AllData_Table()&lt;br/&gt;        {&lt;br/&gt;            return db.From&amp;lt;T&amp;gt;().ToTable();&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 得到所有的数据&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;List&amp;lt;T&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual List&amp;lt;T&amp;gt; Get_AllData_List()&lt;br/&gt;        {&lt;br/&gt;            return db.From&amp;lt;T&amp;gt;().ToList();&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 得到top的几条数据&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="top"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="orderby"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual List&amp;lt;T&amp;gt; Get_Entitys_ByTop(int top, WhereClip where, OrderByClip orderby, params Field[] fields)&lt;br/&gt;        {&lt;br/&gt;            if (top == 0) throw new Exception("top值不能为0");&lt;br/&gt;            return db.From&amp;lt;T&amp;gt;()&lt;br/&gt;                .Where(where)&lt;br/&gt;                .Select(fields)&lt;br/&gt;                .GetTop(top)&lt;br/&gt;                .OrderBy(orderby)&lt;br/&gt;                .ToList();&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region "更新"&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 更新一条记录&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="entity"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual bool Update_Entity(T entity)&lt;br/&gt;        {&lt;br/&gt;            entity.Attach();&lt;br/&gt;            return db.Save&amp;lt;T&amp;gt;(entity) &amp;gt; 0;&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 通过多个条件更新对象&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="fields"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="values"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual bool Update_Entity_byWhere(Field[] fields, object[] values, WhereClip where)&lt;br/&gt;        {&lt;br/&gt;            return db.Update&amp;lt;T&amp;gt;(fields, values, where) &amp;gt; 0;&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 通过单个条件更新对象&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="fields"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="values"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual bool Update_Entity_byWhere(Field filed, object value, WhereClip where)&lt;br/&gt;        {&lt;br/&gt;            return db.Update&amp;lt;T&amp;gt;(filed, value, where) &amp;gt; 0;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region "删除"&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 通过对象删除记录&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="entity"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual bool Delete_Entity(T entity)&lt;br/&gt;        {&lt;br/&gt;            return db.Delete&amp;lt;T&amp;gt;(entity) &amp;gt; 0;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 通过主键ID集合删除&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="idList"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual int Delete_Entitys(List&amp;lt;string&amp;gt; idList)&lt;br/&gt;        {&lt;br/&gt;            return Delete_Entitys(idList.ToArray());&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 通过主键ID集合删除&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="idList"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual int Delete_Entitys(string[] idList)&lt;br/&gt;        {&lt;br/&gt;            return db.Delete&amp;lt;T&amp;gt;(idList);&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 通过条件删除对象 如果批量删除可以传入条件 where = T.ID.in(obj[])&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual bool Delete_Entity(WhereClip where)&lt;br/&gt;        {&lt;br/&gt;            return db.Delete&amp;lt;T&amp;gt;(where) &amp;gt; 0;&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region "新增"&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// add an new record,&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="entity"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual bool Add_Entity(T entity)&lt;br/&gt;        {&lt;br/&gt;            return db.Save&amp;lt;T&amp;gt;(entity) &amp;gt; 0;&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region "分页"&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 分页显示数据 需要记录总数&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="currentPageindex"&amp;gt;当前页码&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="pageSize"&amp;gt;pagesize&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;WhereClient&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="orderby"&amp;gt;OrderByClip&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="record"&amp;gt;总的记录数&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual List&amp;lt;T&amp;gt; Get_Entity_byPage(int currentPageindex, int pageSize,&lt;br/&gt;            WhereClip where, OrderByClip orderby, out int record, params Field[] fields)&lt;br/&gt;        {&lt;br/&gt;            record = Get_Entity_Record(where);&lt;br/&gt;            return Get_Entity_byPage(currentPageindex, pageSize, where, orderby, fields);&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 分页 返回Datatable&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="currentPageindex"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="pageSize"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="orderby"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="record"&amp;gt;总记录&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="fields"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual DataTable Get_Entity_byPage_ToTable(int currentPageindex, int pageSize,&lt;br/&gt;         WhereClip where, OrderByClip orderby, out int record, params Field[] fields)&lt;br/&gt;        {&lt;br/&gt;            record = Get_Entity_Record(where);&lt;br/&gt;            return Get_Entity_byPage_ToTable(currentPageindex, pageSize, where, orderby, fields);&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 通过条件得到表的记录数&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual int Get_Entity_Record(WhereClip where)&lt;br/&gt;        {&lt;br/&gt;            return db.From&amp;lt;T&amp;gt;().Where(where).Count();&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        ///  分页显示数据 不需要记录总数&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="currentPageindex"&amp;gt;当前页码&amp;lt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="pageSize"&amp;gt;pagesize&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;WhereClient&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="orderby"&amp;gt;OrderByClip&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual List&amp;lt;T&amp;gt; Get_Entity_byPage(int currentPageindex, int pageSize,&lt;br/&gt;            WhereClip where, OrderByClip orderby, params Field[] fields)&lt;br/&gt;        {&lt;br/&gt;            return db.From&amp;lt;T&amp;gt;()&lt;br/&gt;                   .Where(where)&lt;br/&gt;                   .Select(fields)&lt;br/&gt;                   .OrderBy(orderby)&lt;br/&gt;                   .GetPage(pageSize)&lt;br/&gt;                   .ToList(currentPageindex);&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 分页返回Datatable&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="currentPageindex"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="pageSize"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="where"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="orderby"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="fields"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual DataTable Get_Entity_byPage_ToTable(int currentPageindex, int pageSize,&lt;br/&gt;            WhereClip where, OrderByClip orderby, params Field[] fields)&lt;br/&gt;        {&lt;br/&gt;            return db.From&amp;lt;T&amp;gt;()&lt;br/&gt;                   .Where(where)&lt;br/&gt;                   .Select(fields)&lt;br/&gt;                   .OrderBy(orderby)&lt;br/&gt;                   .GetPage(pageSize)&lt;br/&gt;                   .ToTable(currentPageindex);&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region "批量处理"&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 带事物的批量添加&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="entityList"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual bool BatchAdd_Entitys(List&amp;lt;T&amp;gt; entityList)&lt;br/&gt;        {&lt;br/&gt;            //使用事务进行批量数据插入&lt;br/&gt;            using (DbTrans trans = db.BeginTrans())&lt;br/&gt;            {&lt;br/&gt;                try&lt;br/&gt;                {&lt;br/&gt;                    DbBatch batch = trans.BeginBatch(entityList.Count);&lt;br/&gt;                    entityList.ForEach(item =&amp;gt;&lt;br/&gt;                    {&lt;br/&gt;                        item.Detach();&lt;br/&gt;                        batch.Save(item);&lt;br/&gt;                    });&lt;br/&gt;                    batch.Process();&lt;br/&gt;&lt;br/&gt;                    trans.Commit();&lt;br/&gt;                    return true;&lt;br/&gt;                }&lt;br/&gt;                catch&lt;br/&gt;                {&lt;br/&gt;                    trans.Rollback();&lt;br/&gt;                    return false;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 批量更新&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        /// &amp;lt;param name="entityList"&amp;gt;&amp;lt;/param&amp;gt;&lt;br/&gt;        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br/&gt;        public virtual bool BatchUpdate_Entitys(List&amp;lt;T&amp;gt; entityList)&lt;br/&gt;        {&lt;br/&gt;            //使用事务进行批量数据更新&lt;br/&gt;            using (DbTrans trans = db.BeginTrans())&lt;br/&gt;            {&lt;br/&gt;                try&lt;br/&gt;                {&lt;br/&gt;                    DbBatch batch = trans.BeginBatch(entityList.Count);&lt;br/&gt;                    entityList.ForEach(item =&amp;gt;&lt;br/&gt;                    {&lt;br/&gt;                        item.Attach();&lt;br/&gt;                        batch.Save(item);&lt;br/&gt;                    });&lt;br/&gt;                    batch.Process();&lt;br/&gt;&lt;br/&gt;                    trans.Commit();&lt;br/&gt;                    return true;&lt;br/&gt;                }&lt;br/&gt;                catch&lt;br/&gt;                {&lt;br/&gt;                    trans.Rollback();&lt;br/&gt;                    return false;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;    }&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 14px;"&gt;1.由于MySoft可以动态传入DbSession对象来支持不通的数据库操作，这里给先前的BaseDao类添加了一个带DbSession的构造函数，2.所有方法改成虚方法，使继承类可以重写自己的实现.在数据的业务逻辑操作类中，修改如下：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;namespace Ecom.BusinessLogic.EshopManageMent&lt;br/&gt;{&lt;br/&gt;   &lt;br/&gt;    public partial class e_ShopService : BaseDao&amp;lt;e_Shop&amp;gt;&lt;br/&gt;    { &lt;br/&gt;        #region "ctor"&lt;br/&gt;        //这里有多个数据库的操作情况，传入相应的数据库操作对象&lt;br/&gt;        public e_ShopService() : base(DataAcess.DefaultSession) { }&lt;br/&gt;        #endregion&lt;br/&gt;    }&lt;br/&gt;}&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆;"&gt;DaAcess 类如下：因为我这个项目有对多个数据库的操作，所以配置如下&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;public static class DataAcess&lt;br/&gt;    {&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 通过配置节来实例化DbSession&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        public static readonly DefaultSession DefaultSession = new DefaultSession();&lt;br/&gt;&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// API基础数据库&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        public static readonly DbSession TopSession = new DbSession("TopDataBaseCon");&lt;br/&gt;&lt;br/&gt;        /// &amp;lt;summary&amp;gt;&lt;br/&gt;        /// 跟踪基础库&lt;br/&gt;        /// &amp;lt;/summary&amp;gt;&lt;br/&gt;        public static readonly DbSession TrackSession = new DbSession("TrackingCon");&lt;br/&gt;&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    public class DefaultSession : DbSession&lt;br/&gt;    {&lt;br/&gt;        public DefaultSession()&lt;br/&gt;            : base("ApplicationServices")&lt;br /&gt;        {&lt;br/&gt;            this.RegisterSqlLogger(log =&amp;gt;&lt;br/&gt;            {&lt;br/&gt;                //输出调试信息  &lt;br/&gt;                ComLib.Debug.DebugView.PrintDebug(log);&lt;br/&gt;            });&lt;br/&gt;        }&lt;br/&gt;    }&lt;/div&gt;&lt;p&gt;&lt;strong&gt;二.项目规划&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011032410243659.jpg" /&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/45460/2011032410324134.jpg" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 14px;"&gt;以Eshop模块为例，e_shop文件是mysoft生成的实体类,e_ShopService是生成的一般关系处理业务逻辑类(关系查询),e_ShopPartial是自己写的业务特殊业务处理类，2个类都是部分类，这样的分开是为了在让自己写的东西和生成的东西隔离，修改表结构或生成设置的时候不影响到现有代码。这里的命名规则如下，在eshop模块以下，全部的命名空间为&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 14px;"&gt;Ecom.BusinessLogic.EshopManageMent，使得我们处理的逻辑关注于模块的处理。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 14px;"&gt;为什么要把CommonLibraries独立出一个文件夹，个人原因呢，因为东西是我写的，我希望调试的某些时候直接跟入源码，对源码BUG进行修改或者增加功能，如果是队友开发，将会把这些类库编译好的DLL全部放入Dependencies，Dependencies文件夹是为了让大家对项目依赖的DLL一目了然。&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三.使用IOC,SingletonProvider来管理我们的业务逻辑&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 14px;"&gt;1.为什么引入IOC: 在项目中,随处出现 logic a = new logic(); 这样的调用，每次调用一次业务，就要new一个实例出来，或者干脆在每个调用的类中写一个类全局变量，让全局调用，虽然这样的写法没问题，但是我觉得对于这种不需要保存状态的类，应该集体的进行管理，也不需要每次通过new得到实例,我的做法如下:&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 14px;"&gt;IOC类的来源是：&lt;a href="http://commonlibrarynet.codeplex.com/" target="_blank"&gt;CommonLibrary.NET&lt;/a&gt; 中IOC模块&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 14px;"&gt;2.为什么引入&lt;a href="http://www.codeproject.com/KB/cs/genericsingleton.aspx" target="_blank"&gt;SingletonProvide&lt;/a&gt;r,对于所有仅限于单线程操作的类，不需要去在每个类中去写相同的得到单列代码&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;public class PageServiceBase : Page&lt;br/&gt;    {&lt;br/&gt;        #region "通过容器获取类型实例"&lt;br/&gt;        public e_ShopService MyEshopService&lt;br/&gt;        {&lt;br/&gt;            get&lt;br/&gt;            {&lt;br/&gt;                return Ioc.GetObject&amp;lt;e_ShopService&amp;gt;("e_ShopService");&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        public e_IspService MyIspService&lt;br/&gt;        {&lt;br/&gt;            get&lt;br/&gt;            {&lt;br/&gt;                return Ioc.GetObject&amp;lt;e_IspService&amp;gt;("e_IspService");&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;        #region SingerInstance 如果类是单列模式 那么使用通用的 SingletonProvider获取实例&lt;br/&gt;        //public e_ShopService MyInstanceShopService {&lt;br/&gt;        //    get {&lt;br/&gt;        //        return SingletonProvider&amp;lt;e_IspService&amp;gt;.Instance;&lt;br/&gt;        //    }&lt;br/&gt;        //}&lt;br/&gt;        #endregion&lt;br/&gt;&lt;br/&gt;    }&lt;br/&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 14px;"&gt;好吧，现在我所有继承这个page类的页面，要调用业务逻辑类只需要写 this.MyIspService.XXX();就OK了，清爽，方便,集中管理....&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-family: 幼圆; font-size: 14px;"&gt;别忘记了,在Global文件中注册业务类.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;   protected void Application_Start(object sender, EventArgs e)&lt;br/&gt;        {&lt;br/&gt;            Ioc.Init(new IocContainerInMemory());&lt;br/&gt;            Ioc.AddObject("e_ShopService",new e_ShopService());&lt;br/&gt;            Ioc.AddObject("e_IspService", new e_IspService());&lt;br/&gt;        }&lt;br/&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/mmmjiang13/aggbug/1993303.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/mmmjiang13/archive/2011/03/24/1993303.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
