﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-jlzhou</title><link>http://www.cnblogs.com/jlzhou/</link><description>回复才有动力～～</description><language>zh-cn</language><lastBuildDate>Mon, 06 Oct 2008 20:56:07 GMT</lastBuildDate><pubDate>Mon, 06 Oct 2008 20:56:07 GMT</pubDate><ttl>60</ttl><item><title>CommunityServer 2.1 SP3 低调发布</title><link>http://www.cnblogs.com/jlzhou/archive/2007/04/21/722019.html</link><dc:creator>jlzhou</dc:creator><author>jlzhou</author><pubDate>Sat, 21 Apr 2007 03:57:00 GMT</pubDate><guid>http://www.cnblogs.com/jlzhou/archive/2007/04/21/722019.html</guid><wfw:comment>http://www.cnblogs.com/jlzhou/comments/722019.html</wfw:comment><comments>http://www.cnblogs.com/jlzhou/archive/2007/04/21/722019.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cnblogs.com/jlzhou/comments/commentRss/722019.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jlzhou/services/trackbacks/722019.html</trackback:ping><description><![CDATA[昨天，发现CommunityServer 2.1的SP3低调发布了，官方甚至没有一个发布贴子，估计是避免影响CS2007的发行吧。<br><br>我是在下载区找到了SP3的，文件的更新日期居然是去年！不过下载后，压缩包内是4月下旬的日期。<br><br>解压缩，替换SDK中的相应文件，包括lib目录下的，升级数据库，重新编译，ok。<br><br>又试了破解的注册dll，仍然可用，great!<br><br>看了看SP3的readme，有很多bug修正，好像没有针对中文的，得！还得自己改。<br><br>最近，发现国内的各大讨论CS的社区，包括这里，新文章极少，是不是大家都放弃CS去研究php平台的社区程序了？<br><br>等我改好了，我会发布一个我修改过的非官方SDK。<br><br>（本篇文章没有什么技术含量，发布到首页是为了号召大家都关注CS，多分享CS的经验！）
<img src ="http://www.cnblogs.com/jlzhou/aggbug/722019.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42809/" target="_blank">[新闻]51.COM技术副总裁邵辉跳槽百度</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>五种提高 SQL 性能的方法</title><link>http://www.cnblogs.com/jlzhou/archive/2006/05/10/396034.html</link><dc:creator>jlzhou</dc:creator><author>jlzhou</author><pubDate>Wed, 10 May 2006 03:50:00 GMT</pubDate><guid>http://www.cnblogs.com/jlzhou/archive/2006/05/10/396034.html</guid><wfw:comment>http://www.cnblogs.com/jlzhou/comments/396034.html</wfw:comment><comments>http://www.cnblogs.com/jlzhou/archive/2006/05/10/396034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/jlzhou/comments/commentRss/396034.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jlzhou/services/trackbacks/396034.html</trackback:ping><description><![CDATA[<br><span id=dgfiList__ctl3_Body style="LINE-HEIGHT: 21px"><br>author:Johnny&nbsp;Papa&nbsp; <br><br>Data&nbsp;Points&nbsp;Archive&nbsp; <br><br>有时，&nbsp;为了让应用程序运行得更快，所做的全部工作就是在这里或那里做一些很小调整。啊，但关键在于确定如何进行调整！迟早您会遇到这种情况：应用程序中的&nbsp;SQL&nbsp;查询不能按照您想要的方式进行响应。它要么不返回数据，要么耗费的时间长得出奇。如果它降低了报告或您的企业应用程序的速度，用户必须等待的时间过长，他们就会很不满意。就像您的父母不想听您解释为什么在深更半夜才回来一样，用户也不会听你解释为什么查询耗费这么长时间。（&#8220;对不起，妈妈，我使用了太多的&nbsp;LEFT&nbsp;JOIN。&#8221;）用户希望应用程序响应迅速，他们的报告能够在瞬间之内返回分析数据。就我自己而言，如果在&nbsp;Web&nbsp;上冲浪时某个页面要耗费十多秒才能加载（好吧，五秒更实际一些），我也会很不耐烦。 <br><br>为了解决这些问题，重要的是找到问题的根源。那么，从哪里开始呢？根本原因通常在于数据库设计和访问它的查询。在本月的专栏中，我将讲述四项技术，这些技术可用于提高基于&nbsp;SQL&nbsp;Server?&nbsp;的应用程序的性能或改善其可伸缩性。我将仔细说明&nbsp;LEFT&nbsp;JOIN、CROSS&nbsp;JOIN&nbsp;的使用以及&nbsp;IDENTITY&nbsp;值的检索。请记住，根本没有神奇的解决方案。调整您的数据库及其查询需要占用时间、进行分析，还需要大量的测试。这些技术都已被证明行之有效，但对您的应用程序而言，可能其中一些技术比另一些技术更适用。 <br><br><br><br>本页内容 <br>从&nbsp;INSERT&nbsp;返回&nbsp;IDENTITY&nbsp;&nbsp; <br>内嵌视图与临时表&nbsp;&nbsp; <br>避免&nbsp;LEFT&nbsp;JOIN&nbsp;和&nbsp;NULL&nbsp;&nbsp; <br>灵活使用笛卡尔乘积&nbsp;&nbsp; <br>拾遗补零&nbsp;&nbsp; <br><br>从&nbsp;INSERT&nbsp;返回&nbsp;IDENTITY&nbsp; <br>我决定从遇到许多问题的内容入手：如何在执行&nbsp;SQL&nbsp;INSERT&nbsp;后检索&nbsp;IDENTITY&nbsp;值。通常，问题不在于如何编写检索值的查询，而在于在哪里以及何时进行检索。在&nbsp;SQL&nbsp;Server&nbsp;中，下面的语句可用于检索由最新在活动数据库连接上运行的&nbsp;SQL&nbsp;语句所创建的&nbsp;IDENTITY&nbsp;值： <br><br>SELECT&nbsp;@@IDENTITY <br>这个&nbsp;SQL&nbsp;语句并不复杂，但需要记住的一点是：如果这个最新的&nbsp;SQL&nbsp;语句不是&nbsp;INSERT，或者您针对非&nbsp;INSERT&nbsp;SQL&nbsp;的其他连接运行了此&nbsp;SQL，则不会获得期望的值。您必须运行下列代码才能检索紧跟在&nbsp;INSERT&nbsp;SQL&nbsp;之后且位于同一连接上的&nbsp;IDENTITY，如下所示： <br><br>INSERT&nbsp;INTO&nbsp;Products&nbsp;(ProductName)&nbsp;VALUES&nbsp;('Chalk') <br>SELECT&nbsp;@@IDENTITY <br>在一个连接上针对&nbsp;Northwind&nbsp;数据库运行这些查询将返回一个名称为&nbsp;Chalk&nbsp;的新产品的&nbsp;IDENTITY&nbsp;值。所以，在使用&nbsp;ADO&nbsp;的&nbsp;Visual&nbsp;Basic?&nbsp;应用程序中，可以运行以下语句： <br><br>Set&nbsp;oRs&nbsp;=&nbsp;oCn.Execute("SET&nbsp;NOCOUNT&nbsp;ON;INSERT&nbsp;INTO&nbsp;Products&nbsp;_ <br>(ProductName)&nbsp;VALUES&nbsp;('Chalk');SELECT&nbsp;@@IDENTITY") <br>lProductID&nbsp;=&nbsp;oRs(0) <br>此代码告诉&nbsp;SQL&nbsp;Server&nbsp;不要返回查询的行计数，然后执行&nbsp;INSERT&nbsp;语句，并返回刚刚为这个新行创建的&nbsp;IDENTITY&nbsp;值。SET&nbsp;NOCOUNT&nbsp;ON&nbsp;语句表示返回的记录集有一行和一列，其中包含了这个新的&nbsp;IDENTITY&nbsp;值。如果没有此语句，则会首先返回一个空的记录集（因为&nbsp;INSERT&nbsp;语句不返回任何数据），然后会返回第二个记录集，第二个记录集中包含&nbsp;IDENTITY&nbsp;值。这可能有些令人困惑，尤其是因为您从来就没有希望过&nbsp;INSERT&nbsp;会返回记录集。之所以会发生此情况，是因为&nbsp;SQL&nbsp;Server&nbsp;看到了这个行计数（即一行受到影响）并将其解释为表示一个记录集。因此，真正的数据被推回到了第二个记录集。当然您可以使用&nbsp;ADO&nbsp;中的&nbsp;NextRecordset&nbsp;方法获取此第二个记录集，但如果总能够首先返回该记录集且只返回该记录集，则会更方便，也更有效率。 <br><br>此方法虽然有效，但需要在&nbsp;SQL&nbsp;语句中额外添加一些代码。获得相同结果的另一方法是在&nbsp;INSERT&nbsp;之前使用&nbsp;SET&nbsp;NOCOUNT&nbsp;ON&nbsp;语句，并将&nbsp;SELECT&nbsp;@@IDENTITY&nbsp;语句放在表中的&nbsp;FOR&nbsp;INSERT&nbsp;触发器中，如下面的代码片段所示。这样，任何进入该表的&nbsp;INSERT&nbsp;语句都将自动返回&nbsp;IDENTITY&nbsp;值。 <br><br>CREATE&nbsp;TRIGGER&nbsp;trProducts_Insert&nbsp;ON&nbsp;Products&nbsp;FOR&nbsp;INSERT&nbsp;AS&nbsp; <br>&nbsp;&nbsp;&nbsp;SELECT&nbsp;@@IDENTITY&nbsp; <br>GO <br><br>触发器只在&nbsp;Products&nbsp;表上发生&nbsp;INSERT&nbsp;时启动，所以它总是会在成功&nbsp;INSERT&nbsp;之后返回一个&nbsp;IDENTITY。使用此技术，您可以始终以相同的方式在应用程序中检索&nbsp;IDENTITY&nbsp;值。 <br><br>返回页首 <br>内嵌视图与临时表&nbsp; <br>某些时候，查询需要将数据与其他一些可能只能通过执行&nbsp;GROUP&nbsp;BY&nbsp;然后执行标准查询才能收集的数据进行联接。例如，如果要查询最新五个定单的有关信息，您首先需要知道是哪些定单。这可以使用返回定单&nbsp;ID&nbsp;的&nbsp;SQL&nbsp;查询来检索。此数据就会存储在临时表（这是一个常用技术）中，然后与&nbsp;Products&nbsp;表进行联接，以返回这些定单售出的产品数量： <br><br>CREATE&nbsp;TABLE&nbsp;#Temp1&nbsp;(OrderID&nbsp;INT&nbsp;NOT&nbsp;NULL,&nbsp;_ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OrderDate&nbsp;DATETIME&nbsp;NOT&nbsp;NULL) <br>INSERT&nbsp;INTO&nbsp;#Temp1&nbsp;(OrderID,&nbsp;OrderDate) <br>SELECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TOP&nbsp;5&nbsp;o.OrderID,&nbsp;o.OrderDate <br>FROM&nbsp;Orders&nbsp;o&nbsp;ORDER&nbsp;BY&nbsp;o.OrderDate&nbsp;DESC <br>SELECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p.ProductName,&nbsp;SUM(od.Quantity)&nbsp;AS&nbsp;ProductQuantity <br>FROM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#Temp1&nbsp;t&nbsp; <br>&nbsp;&nbsp;&nbsp;INNER&nbsp;JOIN&nbsp;[Order&nbsp;Details]&nbsp;od&nbsp;ON&nbsp;t.OrderID&nbsp;=&nbsp;od.OrderID <br>&nbsp;&nbsp;&nbsp;INNER&nbsp;JOIN&nbsp;Products&nbsp;p&nbsp;ON&nbsp;od.ProductID&nbsp;=&nbsp;p.ProductID&nbsp; <br>GROUP&nbsp;BY&nbsp;p.ProductName <br>ORDER&nbsp;BY&nbsp;p.ProductName <br>DROP&nbsp;TABLE&nbsp;#Temp1 <br>这些&nbsp;SQL&nbsp;语句会创建一个临时表，将数据插入该表中，将其他数据与该表进行联接，然后除去该临时表。这会导致此查询进行大量&nbsp;I/O&nbsp;操作，因此，可以重新编写查询，使用内嵌视图取代临时表。内嵌视图只是一个可以联接到&nbsp;FROM&nbsp;子句中的查询。所以，您不用在&nbsp;tempdb&nbsp;中的临时表上耗费大量&nbsp;I/O&nbsp;和磁盘访问，而可以使用内嵌视图得到同样的结果： <br><br>SELECT&nbsp;p.ProductName,&nbsp; <br>&nbsp;&nbsp;&nbsp;SUM(od.Quantity)&nbsp;AS&nbsp;ProductQuantity <br>FROM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;( <br>&nbsp;&nbsp;&nbsp;SELECT&nbsp;TOP&nbsp;5&nbsp;o.OrderID,&nbsp;o.OrderDate <br>&nbsp;&nbsp;&nbsp;FROM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Orders&nbsp;o&nbsp; <br>&nbsp;&nbsp;&nbsp;ORDER&nbsp;BY&nbsp;o.OrderDate&nbsp;DESC <br>&nbsp;&nbsp;&nbsp;)&nbsp;t&nbsp; <br>&nbsp;&nbsp;&nbsp;INNER&nbsp;JOIN&nbsp;[Order&nbsp;Details]&nbsp;od&nbsp;ON&nbsp;t.OrderID&nbsp;=&nbsp;od.OrderID <br>&nbsp;&nbsp;&nbsp;INNER&nbsp;JOIN&nbsp;Products&nbsp;p&nbsp;ON&nbsp;od.ProductID&nbsp;=&nbsp;p.ProductID&nbsp; <br>GROUP&nbsp;BY <br>&nbsp;&nbsp;&nbsp;p.ProductName <br>ORDER&nbsp;BY <br>&nbsp;&nbsp;&nbsp;p.ProductName <br>此查询不仅比前面的查询效率更高，而且长度更短。临时表会消耗大量资源。如果只需要将数据联接到其他查询，则可以试试使用内嵌视图，以节省资源。 <br><br>返回页首 <br>避免&nbsp;LEFT&nbsp;JOIN&nbsp;和&nbsp;NULL&nbsp; <br>当然，有很多时候您需要执行&nbsp;LEFT&nbsp;JOIN&nbsp;和使用&nbsp;NULL&nbsp;值。但是，它们并不适用于所有情况。改变&nbsp;SQL&nbsp;查询的构建方式可能会产生将一个花几分钟运行的报告缩短到只花几秒钟这样的天壤之别的效果。有时，必须在查询中调整数据的形态，使之适应应用程序所要求的显示方式。虽然&nbsp;TABLE&nbsp;数据类型会减少大量占用资源的情况，但在查询中还有许多区域可以进行优化。SQL&nbsp;的一个有价值的常用功能是&nbsp;LEFT&nbsp;JOIN。它可以用于检索第一个表中的所有行、第二个表中所有匹配的行、以及第二个表中与第一个表不匹配的所有行。例如，如果希望返回每个客户及其定单，使用&nbsp;LEFT&nbsp;JOIN&nbsp;则可以显示有定单和没有定单的客户。 <br><br>此工具可能会被过度使用。LEFT&nbsp;JOIN&nbsp;消耗的资源非常之多，因为它们包含与&nbsp;NULL（不存在）数据匹配的数据。在某些情况下，这是不可避免的，但是代价可能非常高。LEFT&nbsp;JOIN&nbsp;比&nbsp;INNER&nbsp;JOIN&nbsp;消耗资源更多，所以如果您可以重新编写查询以使得该查询不使用任何&nbsp;LEFT&nbsp;JOIN，则会得到非常可观的回报（请参阅图&nbsp;1&nbsp;中的图）。 <br><br>图&nbsp;1&nbsp;查询&nbsp; <br><br>加快使用&nbsp;LEFT&nbsp;JOIN&nbsp;的查询速度的一项技术涉及创建一个&nbsp;TABLE&nbsp;数据类型，插入第一个表（LEFT&nbsp;JOIN&nbsp;左侧的表）中的所有行，然后使用第二个表中的值更新&nbsp;TABLE&nbsp;数据类型。此技术是一个两步的过程，但与标准的&nbsp;LEFT&nbsp;JOIN&nbsp;相比，可以节省大量时间。一个很好的规则是尝试各种不同的技术并记录每种技术所需的时间，直到获得用于您的应用程序的执行性能最佳的查询。 <br><br>测试查询的速度时，有必要多次运行此查询，然后取一个平均值。因为查询（或存储过程）可能会存储在&nbsp;SQL&nbsp;Server&nbsp;内存中的过程缓存中，因此第一次尝试耗费的时间好像稍长一些，而所有后续尝试耗费的时间都较短。另外，运行您的查询时，可能正在针对相同的表运行其他查询。当其他查询锁定和解锁这些表时，可能会导致您的查询要排队等待。例如，如果您进行查询时某人正在更新此表中的数据，则在更新提交时您的查询可能需要耗费更长时间来执行。 <br><br>避免使用&nbsp;LEFT&nbsp;JOIN&nbsp;时速度降低的最简单方法是尽可能多地围绕它们设计数据库。例如，假设某一产品可能具有类别也可能没有类别。如果&nbsp;Products&nbsp;表存储了其类别的&nbsp;ID，而没有用于某个特定产品的类别，则您可以在字段中存储&nbsp;NULL&nbsp;值。然后您必须执行&nbsp;LEFT&nbsp;JOIN&nbsp;来获取所有产品及其类别。您可以创建一个值为&#8220;No&nbsp;Category&#8221;的类别，从而指定外键关系不允许&nbsp;NULL&nbsp;值。通过执行上述操作，现在您就可以使用&nbsp;INNER&nbsp;JOIN&nbsp;检索所有产品及其类别了。虽然这看起来好像是一个带有多余数据的变通方法，但可能是一个很有价值的技术，因为它可以消除&nbsp;SQL&nbsp;批处理语句中消耗资源较多的&nbsp;LEFT&nbsp;JOIN。在数据库中全部使用此概念可以为您节省大量的处理时间。请记住，对于您的用户而言，即使几秒钟的时间也非常重要，因为当您有许多用户正在访问同一个联机数据库应用程序时，这几秒钟实际上的意义会非常重大。&nbsp; <br><br>返回页首 <br>灵活使用笛卡尔乘积&nbsp; <br>对于此技巧，我将进行非常详细的介绍，并提倡在某些情况下使用笛卡尔乘积。出于某些原因，笛卡尔乘积&nbsp;(CROSS&nbsp;JOIN)&nbsp;遭到了很多谴责，开发人员通常会被警告根本就不要使用它们。在许多情况下，它们消耗的资源太多，从而无法高效使用。但是像&nbsp;SQL&nbsp;中的任何工具一样，如果正确使用，它们也会很有价值。例如，如果您想运行一个返回每月数据（即使某一特定月份客户没有定单也要返回）的查询，您就可以很方便地使用笛卡尔乘积。&nbsp;图&nbsp;2&nbsp;中的&nbsp;SQL&nbsp;就执行了上述操作。 <br><br>虽然这看起来好像没什么神奇的，但是请考虑一下，如果您从客户到定单（这些定单按月份进行分组并对销售额进行小计）进行了标准的&nbsp;INNER&nbsp;JOIN，则只会获得客户有定单的月份。因此，对于客户未订购任何产品的月份，您不会获得&nbsp;0&nbsp;值。如果您想为每个客户都绘制一个图，以显示每个月和该月销售额，则可能希望此图包括月销售额为&nbsp;0&nbsp;的月份，以便直观标识出这些月份。如果使用&nbsp;图&nbsp;2&nbsp;中的&nbsp;SQL，数据则会跳过销售额为&nbsp;0&nbsp;美元的月份，因为在定单表中对于零销售额不会包含任何行（假设您只存储发生的事件）。 <br><br>图&nbsp;3&nbsp;中的代码虽然较长，但是可以达到获取所有销售数据（甚至包括没有销售额的月份）的目标。首先，它会提取去年所有月份的列表，然后将它们放入第一个&nbsp;TABLE&nbsp;数据类型表&nbsp;(@tblMonths)&nbsp;中。下一步，此代码会获取在该时间段内有销售额的所有客户公司的名称列表，然后将它们放入另一个&nbsp;TABLE&nbsp;数据类型表&nbsp;(@tblCus-tomers)&nbsp;中。这两个表存储了创建结果集所必需的所有基本数据，但实际销售数量除外。&nbsp;第一个表中列出了所有月份（12&nbsp;行），第二个表中列出了这个时间段内有销售额的所有客户（对于我是&nbsp;81&nbsp;个）。并非每个客户在过去&nbsp;12&nbsp;个月中的每个月都购买了产品，所以，执行&nbsp;INNER&nbsp;JOIN&nbsp;或&nbsp;LEFT&nbsp;JOIN&nbsp;不会返回每个月的每个客户。这些操作只会返回购买产品的客户和月份。 <br><br>笛卡尔乘积则可以返回所有月份的所有客户。笛卡尔乘积基本上是将第一个表与第二个表相乘，生成一个行集合，其中包含第一个表中的行数与第二个表中的行数相乘的结果。因此，笛卡尔乘积会向表&nbsp;@tblFinal&nbsp;返回&nbsp;972&nbsp;行。最后的步骤是使用此日期范围内每个客户的月销售额总计更新&nbsp;@tblFinal&nbsp;表，以及选择最终的行集。 <br><br>如果由于笛卡尔乘积占用的资源可能会很多，而不需要真正的笛卡尔乘积，则可以谨慎地使用&nbsp;CROSS&nbsp;JOIN。例如，如果对产品和类别执行了&nbsp;CROSS&nbsp;JOIN，然后使用&nbsp;WHERE&nbsp;子句、DISTINCT&nbsp;或&nbsp;GROUP&nbsp;BY&nbsp;来筛选出大多数行，那么使用&nbsp;INNER&nbsp;JOIN&nbsp;会获得同样的结果，而且效率高得多。如果需要为所有的可能性都返回数据（例如在您希望使用每月销售日期填充一个图表时），则笛卡尔乘积可能会非常有帮助。但是，您不应该将它们用于其他用途，因为在大多数方案中&nbsp;INNER&nbsp;JOIN&nbsp;的效率要高得多。 <br><br>返回页首 <br>拾遗补零&nbsp; <br>这里介绍其他一些可帮助提高&nbsp;SQL&nbsp;查询效率的常用技术。假设您将按区域对所有销售人员进行分组并将他们的销售额进行小计，但是您只想要那些数据库中标记为处于活动状态的销售人员。您可以按区域对销售人员分组，并使用&nbsp;HAVING&nbsp;子句消除那些未处于活动状态的销售人员，也可以在&nbsp;WHERE&nbsp;子句中执行此操作。在&nbsp;WHERE&nbsp;子句中执行此操作会减少需要分组的行数，所以比在&nbsp;HAVING&nbsp;子句中执行此操作效率更高。HAVING&nbsp;子句中基于行的条件的筛选会强制查询对那些在&nbsp;WHERE&nbsp;子句中会被去除的数据进行分组。 <br><br>另一个提高效率的技巧是使用&nbsp;DISTINCT&nbsp;关键字查找数据行的单独报表，来代替使用&nbsp;GROUP&nbsp;BY&nbsp;子句。在这种情况下，使用&nbsp;DISTINCT&nbsp;关键字的&nbsp;SQL&nbsp;效率更高。请在需要计算聚合函数（SUM、COUNT、MAX&nbsp;等）的情况下再使用&nbsp;GROUP&nbsp;BY。另外，如果您的查询总是自己返回一个唯一的行，则不要使用&nbsp;DISTINCT&nbsp;关键字。在这种情况下，DISTINCT&nbsp;关键字只会增加系统开销。 <br><br>您已经看到了，有大量技术都可用于优化查询和实现特定的业务规则，技巧就是进行一些尝试，然后比较它们的性能。最重要的是要测试、测试、再测试。在此专栏的将来各期内容中，我将继续深入讲述&nbsp;SQL&nbsp;Server&nbsp;概念，包括数据库设计、好的索引实践以及&nbsp;SQL&nbsp;Server&nbsp;安全范例。</span>
<img src ="http://www.cnblogs.com/jlzhou/aggbug/396034.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42807/" target="_blank">[新闻]Mono 2.0终于到来</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>对话周鸿祎:从程序员创业谈起 </title><link>http://www.cnblogs.com/jlzhou/archive/2006/02/16/331812.html</link><dc:creator>jlzhou</dc:creator><author>jlzhou</author><pubDate>Thu, 16 Feb 2006 05:53:00 GMT</pubDate><guid>http://www.cnblogs.com/jlzhou/archive/2006/02/16/331812.html</guid><wfw:comment>http://www.cnblogs.com/jlzhou/comments/331812.html</wfw:comment><comments>http://www.cnblogs.com/jlzhou/archive/2006/02/16/331812.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/jlzhou/comments/commentRss/331812.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jlzhou/services/trackbacks/331812.html</trackback:ping><description><![CDATA[<DIV class=postTitle>记者/闫辉</DIV>
<DIV class=postText>
<P align=left><BR>离开雅虎中国后的周鸿祎现在的身份是IDGVC的投资合伙人，做风险投资的他自然对创业有着说不完的话题。由于周鸿祎出身程序员，也一直是本刊的忠实读者，他希望一方面站在投资商的角度，同时以一种过来人的身份来探讨&#8220;程序员创业&#8221;这个话题。<BR>一个周五的傍晚，在北京光华路的一个酒吧中，本刊约到周鸿祎进行这次对话。从昌平远道赶来的周鸿祎由于塞车而晚到了半个小时。由于开会讲了一天的话，他的声音有些嘶哑。不过在草草的吃了晚饭后，周鸿祎仍然用其快速的语调表达了自己的观点。</P>
<P><EM>记者:我已经看到您在其它的媒体上接受了一些采访，也谈到了很多关于创业的话题。面对程序员这个群体，讲创业有什么特别的地方呢？</EM><BR>周鸿祎:的确如此，最近由于我的身份，只接受创业方面的话题。关于程序员创业，我之所以愿意谈我的观点，是因为我是程序员出身，也是从小公司做起来的，看到他们，就好像看到当年的我，我非常关心程序员个人包括共享软件作者和一些小网站。我希望能和他们分享一些经验和体会。<BR>首先，我想说的是聪明人不一定能成功，程序员多半很优秀、很聪明，但是聪明人不一定都能成功。我希望程序员能够清醒的认识到这一点。希望我的观点能够给程序员一些帮助，哪怕只是对我的某一句话有了感觉，对他以后的成长产生了帮助，这就足够了。<BR>中国的程序员群体有两类特征比较明显，这在CSDN的论坛就能够感觉到：一群人是自我感觉良好，以专家自居，另一群是软件蓝领埋怨公司和社会环境不行，待遇不好。<BR>应该说，中国的商业环境确实不是很成熟，因此中国程序员创业的成功率也是很低的。放眼望去，中国互联网成功的人士出身于程序员的并不多。<BR>我想说，在这里，我谈论的是程序员创业而不是程序员挣钱。挣钱很容易，写一个共享软件，一年可以挣几百万。但我希望谈的不是告诉程序员如何挣钱，而是要告诉程序员如何去创业。比如现在很多的共享软件的作者收入很高，衣食无忧，但从创业的角度看，它并没有以商业公司的方式创业成功。</P>
<P><EM>记者:那根据您的观察，中国的程序员在创业方面欠缺哪些？</EM><BR>周鸿祎：首先是合作心态，这是程序员普遍缺乏的，当然这也是这个特殊群体的特殊原因决定的。<BR>程序员的个性多半是傲气的、固执的，这些特点在写程序的时候都是优点。你必须要自信，必须要执着，你才能把程序写好。但是反过来说，这些特点在做商业的时候却是致命的缺点。大家经常说这句话：态度决定一切。程序员往往会觉得自己在做世界上一件十分伟大的事情，这就是驱动机器，修改一行代码，机器就能够工作，可以产生各种不同的行为。这很容易会让程序员产生一种错觉，认为自己可以Control Everything。程序员的自信在编程上是非常需要的，但不是适合一切场合。如果我们不说这些，可能很多程序员到现在还不知道自己错在哪里，仍然认为自己是King of the World。<BR>事实上，程序员的能力只是控制了一个机器。但创业仅仅具备了和机器打交道这一种能力是绝对不够的，他还需要和合作伙伴、竞争对手、投资人、员工甚至整个社会环境打交道。很多程序员因为已经习惯了和机器打交道，不善于也不愿意做其它的工作。很多程序员内心会认为&#8220;营销不是很简单嘛，市场很简单啊，管理也很简单啊。&#8221;我认为这种心态是非常害人的。<BR>程序员很固执，他觉得自己是机器的统帅，因此不会灵活，不会妥协。我之所以这么说，是因为当年的我就是这样的个性，越是优秀的程序员这些特征就越明显，但是我后来意识到这些问题，我就逼着自己改变角色。</P>
<P><EM>记者:在做公司的过程中，您应该也经常和不同层次的程序员打交道吧？有什么深刻的故事和印象？</EM><BR>周鸿祎：这两天，我收到几封程序员的来信。有一封信中大意说&#8220;我是个如此优秀的程序员，为什么我就不能成功呢，请你指点。这里有我的Blog地址,看完你就会了解我了。&#8221;我想说的是:如果真的希望别人帮忙,就要把情况真实的说出来,而不是上来就说自己很优秀,这种语言就会让别人觉得很不舒服,不是很好的交流方式。我还真看了那个Blog，但看完之后，觉得这个程序员就是一个空想狂。<BR>可以说，很多程序员实际上是优秀带来了自负，这种自负使得其不要说创业，可能在在公司中工作也会遇到问题。所以，我甚至认为程序员在创业方面遇到的困难比其它类型的人员更大。如果程序员希望主导一个创业，可能首先就要逼自己不是一个程序员。</P>
<P><EM>记者:所以我们不能只单纯谈程序员创业，而是要从程序员创业谈起。为了避免这些问题，要做哪些转变呢？<BR></EM>周鸿祎：是的，要从创业谈起。程序员首先要学会和别人合作。提到这点，很多程序员都会说&#8220;我正在带着其他程序员写程序啊，我会合作啊。&#8221;但这种合作是片面的，我所谈的不仅仅是程序员和程序员之间的合作，而是包括了程序员和其它各种角色之间的合作。程序员之间相互的语言比较能够容易理解。但作为一个程序员，你能不能和商业人员、销售人员很好的合作呢。<BR>我这些年还看到很多这样的例子:程序员动不动就把目标定为比尔&#183;盖茨。其实，比尔&#183;盖茨不应该成为程序员崇拜的目标对象，这会让程序员迷失方向，因为微软另外一个创始人保罗&#183;艾伦才是真正的程序员，盖茨已经成为一个管理者。再看其它一些例子，Adobe公司两个创始人也是一个精通技术，一个对商业精通，这样的搭配才更利于成功。因此，对于很多程序员来说，一定要找准真正的榜样，不要被外界的故事迷惑了头脑。如果剖开一些故事的外表，你会发现国外很多成功的程序员，背后一定有一个很强大的商业感觉的人或者一个团队。</P>
<P><EM>记者:那也就是说，程序员应该作为一种创业的参与者，而不一定要做主导者了？</EM><BR>周鸿祎:程序员的商业感觉其实并不是很好。即便有商业感觉，其实这只是一个灵感，一个创意，但要做成、做大还需要一系列的管理、市场、运营，这些对于程序员是不可想象的。程序员要明白，在自己不擅长的领域，找到一个可以弥补自己缺陷的合作团队才是出路。加入一个创业团队，可能个人占10%，但因为更容易成功，而且团队可以做100分的事情。而如果只是一个人做，很可能就失败了。例如：Google的第20名程序员都可以获得五亿美元，这也是一种成功。<BR>这方面，国外的程序员对自己的长短比较清楚。在硅谷，很多程序员技术上都很牛，但他们都非常明了自己只是在技术这个领域水平比较高，出了这个领域，自己什么都不是。正因为有了这种心态，他们特别懂得与人合作。我认为国外的程序员已经普遍意识到了这点，他们很愿意成为创业团队中的一员而并非自己创业。<BR>因此，程序员需要调整心态，不要把自己当作精英人物，要承认自己在编程方面是优秀的，但永远有人比自己更优秀，对于其它的领域，很可能自己很无知。要知道，其实程序员的选择是最少的，因此抱有开放的心态是最重要的。</P>
<P><EM>记者:你认为国内的程序员在哪些地方还与创业的要求存在一定差距？</EM><BR>周鸿祎:我认为现在的很多程序员经验过于不足，他没有认真踏实做过很多工作就奢谈创业。如果一个程序员没有在编程方面深入过，没有积累，也就是半瓶子醋。这样的程序员我接触过很多，他们自己也不清楚问题出在哪里，让人感觉又爱又恨。我认为程序员既然要凭借自己的技术，那就一定要踏实，要能够实记者/闫辉</P>
<P>离开雅虎中国后的周鸿祎现在的身份是IDGVC的投资合伙人，做风险投资的他自然对创业有着说不完的话题。由于周鸿祎出身程序员，也一直是本刊的忠实读者，他希望一方面站在投资商的角度，同时以一种过来人的身份来探讨&#8220;程序员创业&#8221;这个话题。<BR>一个周五的傍晚，在北京光华路的一个酒吧中，本刊约到周鸿祎进行这次对话。从昌平远道赶来的周鸿祎由于塞车而晚到了半个小时。由于开会讲了一天的话，他的声音有些嘶哑。不过在草草的吃了晚饭后，周鸿祎仍然用其快速的语调表达了自己的观点。</P>
<P><EM>记者:我已经看到您在其它的媒体上接受了一些采访，也谈到了很多关于创业的话题。面对程序员这个群体，讲创业有什么特别的地方呢？</EM><BR>周鸿祎:的确如此，最近由于我的身份，只接受创业方面的话题。关于程序员创业，我之所以愿意谈我的观点，是因为我是程序员出身，也是从小公司做起来的，看到他们，就好像看到当年的我，我非常关心程序员个人包括共享软件作者和一些小网站。我希望能和他们分享一些经验和体会。<BR>首先，我想说的是聪明人不一定能成功，程序员多半很优秀、很聪明，但是聪明人不一定都能成功。我希望程序员能够清醒的认识到这一点。希望我的观点能够给程序员一些帮助，哪怕只是对我的某一句话有了感觉，对他以后的成长产生了帮助，这就足够了。<BR>中国的程序员群体有两类特征比较明显，这在CSDN的论坛就能够感觉到：一群人是自我感觉良好，以专家自居，另一群是软件蓝领埋怨公司和社会环境不行，待遇不好。<BR>应该说，中国的商业环境确实不是很成熟，因此中国程序员创业的成功率也是很低的。放眼望去，中国互联网成功的人士出身于程序员的并不多。<BR>我想说，在这里，我谈论的是程序员创业而不是程序员挣钱。挣钱很容易，写一个共享软件，一年可以挣几百万。但我希望谈的不是告诉程序员如何挣钱，而是要告诉程序员如何去创业。比如现在很多的共享软件的作者收入很高，衣食无忧，但从创业的角度看，它并没有以商业公司的方式创业成功。</P>
<P><EM>记者:那根据您的观察，中国的程序员在创业方面欠缺哪些？</EM><BR>周鸿祎：首先是合作心态，这是程序员普遍缺乏的，当然这也是这个特殊群体的特殊原因决定的。<BR>程序员的个性多半是傲气的、固执的，这些特点在写程序的时候都是优点。你必须要自信，必须要执着，你才能把程序写好。但是反过来说，这些特点在做商业的时候却是致命的缺点。大家经常说这句话：态度决定一切。程序员往往会觉得自己在做世界上一件十分伟大的事情，这就是驱动机器，修改一行代码，机器就能够工作，可以产生各种不同的行为。这很容易会让程序员产生一种错觉，认为自己可以Control Everything。程序员的自信在编程上是非常需要的，但不是适合一切场合。如果我们不说这些，可能很多程序员到现在还不知道自己错在哪里，仍然认为自己是King of the World。<BR>事实上，程序员的能力只是控制了一个机器。但创业仅仅具备了和机器打交道这一种能力是绝对不够的，他还需要和合作伙伴、竞争对手、投资人、员工甚至整个社会环境打交道。很多程序员因为已经习惯了和机器打交道，不善于也不愿意做其它的工作。很多程序员内心会认为&#8220;营销不是很简单嘛，市场很简单啊，管理也很简单啊。&#8221;我认为这种心态是非常害人的。<BR>程序员很固执，他觉得自己是机器的统帅，因此不会灵活，不会妥协。我之所以这么说，是因为当年的我就是这样的个性，越是优秀的程序员这些特征就越明显，但是我后来意识到这些问题，我就逼着自己改变角色。</P>
<P><EM>记者:在做公司的过程中，您应该也经常和不同层次的程序员打交道吧？有什么深刻的故事和印象？</EM><BR>周鸿祎：这两天，我收到几封程序员的来信。有一封信中大意说&#8220;我是个如此优秀的程序员，为什么我就不能成功呢，请你指点。这里有我的Blog地址,看完你就会了解我了。&#8221;我想说的是:如果真的希望别人帮忙,就要把情况真实的说出来,而不是上来就说自己很优秀,这种语言就会让别人觉得很不舒服,不是很好的交流方式。我还真看了那个Blog，但看完之后，觉得这个程序员就是一个空想狂。<BR>可以说，很多程序员实际上是优秀带来了自负，这种自负使得其不要说创业，可能在在公司中工作也会遇到问题。所以，我甚至认为程序员在创业方面遇到的困难比其它类型的人员更大。如果程序员希望主导一个创业，可能首先就要逼自己不是一个程序员。</P>
<P><EM>记者:所以我们不能只单纯谈程序员创业，而是要从程序员创业谈起。为了避免这些问题，要做哪些转变呢？</EM><BR>周鸿祎：是的，要从创业谈起。程序员首先要学会和别人合作。提到这点，很多程序员都会说&#8220;我正在带着其他程序员写程序啊，我会合作啊。&#8221;但这种合作是片面的，我所谈的不仅仅是程序员和程序员之间的合作，而是包括了程序员和其它各种角色之间的合作。程序员之间相互的语言比较能够容易理解。但作为一个程序员，你能不能和商业人员、销售人员很好的合作呢。<BR>我这些年还看到很多这样的例子:程序员动不动就把目标定为比尔&#183;盖茨。其实，比尔&#183;盖茨不应该成为程序员崇拜的目标对象，这会让程序员迷失方向，因为微软另外一个创始人保罗&#183;艾伦才是真正的程序员，盖茨已经成为一个管理者。再看其它一些例子，Adobe公司两个创始人也是一个精通技术，一个对商业精通，这样的搭配才更利于成功。因此，对于很多程序员来说，一定要找准真正的榜样，不要被外界的故事迷惑了头脑。如果剖开一些故事的外表，你会发现国外很多成功的程序员，背后一定有一个很强大的商业感觉的人或者一个团队。</P>
<P><EM>记者:那也就是说，程序员应该作为一种创业的参与者，而不一定要做主导者了？</EM><BR>周鸿祎:程序员的商业感觉其实并不是很好。即便有商业感觉，其实这只是一个灵感，一个创意，但要做成、做大还需要一系列的管理、市场、运营，这些对于程序员是不可想象的。程序员要明白，在自己不擅长的领域，找到一个可以弥补自己缺陷的合作团队才是出路。加入一个创业团队，可能个人占10%，但因为更容易成功，而且团队可以做100分的事情。而如果只是一个人做，很可能就失败了。例如：Google的第20名程序员都可以获得五亿美元，这也是一种成功。<BR>这方面，国外的程序员对自己的长短比较清楚。在硅谷，很多程序员技术上都很牛，但他们都非常明了自己只是在技术这个领域水平比较高，出了这个领域，自己什么都不是。正因为有了这种心态，他们特别懂得与人合作。我认为国外的程序员已经普遍意识到了这点，他们很愿意成为创业团队中的一员而并非自己创业。<BR>因此，程序员需要调整心态，不要把自己当作精英人物，要承认自己在编程方面是优秀的，但永远有人比自己更优秀，对于其它的领域，很可能自己很无知。要知道，其实程序员的选择是最少的，因此抱有开放的心态是最重要的。</P>
<P><EM>记者:你认为国内的程序员在哪些地方还与创业的要求存在一定差距？</EM><BR>周鸿祎:我认为现在的很多程序员经验过于不足，他没有认真踏实做过很多工作就奢谈创业。如果一个程序员没有在编程方面深入过，没有积累，也就是半瓶子醋。这样的程序员我接触过很多，他们自己也不清楚问题出在哪里，让人感觉又爱又恨。我认为程序员既然要凭借自己的技术，那就一定要踏实，要能够实现任何创意。<BR>但现在一些程序员自己没有商业意识，却又很自负，不相信别人，而且不理解的事情就不做。我遇到过很多程序员，他们对公司做什么方向都质疑，他们希望自己先想清楚，可是一想就浪费了很长时间。这些程序员积累的不多，看不到方向，但他也不相信自己的公司和老板，这是一个悖论，需要程序员深刻反省。要知道，每个公司都有懂商业的人。<BR>就这样，一些程序员极端自负，另外有一些程序员碰了很多钉子之后，感觉很自卑，于是便认为国内软件业不行，最后出国或者打工，很少有程序员能对自己能做公正的评价。</P>
<P><EM>记者:您是否认为国内的环境是造成程序员浮躁的因素呢？</EM><BR>周鸿祎：这个倒问住我了，我以前没有仔细考虑过这点。但我想，不管怎样，程序员需要先从自身找问题，因为大环境就是这样了。我承认一个现实：程序员生存状态并不是很好，但程序员很多报怨其实是一种不切实际的期望值和自身的缺陷产生的反差。<BR>首先，产品没有大小，只有市场的大小。很多人总是觉得这也小，那也看不上，认为公司做的产品很无聊，要做就要像CSDN论坛中某些人宣扬那样:做游戏一定要做3D引擎，好像只有这样才够牛。这其实就是一种浮躁。很多程序员写软件总是很多bug，基础知识也不牢固，没有参加几个项目，没有写过十万行代码，就奢谈做大项目，这有价值吗？<BR>而且我还发现有些程序员特别愤青，骂环境，骂老板，其实这只能把自己的心态搞的很坏。很多人刚进公司时做的很差，虽然工资少，但他没有想到给公司增加了很多bug，公司实际上是在给他出学费。论坛上大家都在讨论哪里活干得少钱拿的多。甚至还有人列了一些黑名单。这种做法的结果就是程序员自己将周围环境搞的乌烟瘴气了。<BR>有的程序员还非常喜欢指点江山，指点公司。我个人觉得这不是不可以，但指责别的公司对个人没有什么好处，因为存在就是合理的。如果看不到，恰恰证明是自己不懂。我看到很多程序员也写Blog，技术交流的我认为非常好，但有些人是写评论。我是觉得程序员不要做评论家，中国不缺评论家，最缺的是实干家。<BR>总之，程序员一般过于自我。总生活在自我的世界中，就不可能真正了解世界是什么。我很早就意识到了这些问题，也努力的去克服。我的经验就是看别人如何做的好，为什么能够做的好，什么是我所不能理解的。程序员要学会慢慢站在别人立场上看问题。</P>
<P><EM>记者:您对希望创业的程序员有哪些建议呢？<BR></EM>周鸿祎:对程序员来说，现在要做的也很简单，这就是需要大量的实践，要慢慢培养对产品，对商业的感觉。我的建议说出来可能有些忠言逆耳，但是绝对都是肺腑之言。对绝大多数程序员来说，自己一个人成功的机率是很小的，所以我认为加入一个创业的团队可能更为合适。现在有很多初期创业的公司，也需要很多优秀的程序员加盟。如果有理想，可以选择加入一个团队，也有相应的股份，这方面我可以充当一个桥梁。</P>
<P>对于本文的观点可以直接写信给周鸿祎:Zhou_hongyi@163.com。</P></DIV><img src ="http://www.cnblogs.com/jlzhou/aggbug/331812.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42808/" target="_blank">[新闻]百度任命李一男担任首席技术官</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>SQL Server利用数据库日志恢复数据到时间点的操作</title><link>http://www.cnblogs.com/jlzhou/archive/2005/11/02/266787.html</link><dc:creator>jlzhou</dc:creator><author>jlzhou</author><pubDate>Tue, 01 Nov 2005 23:41:00 GMT</pubDate><guid>http://www.cnblogs.com/jlzhou/archive/2005/11/02/266787.html</guid><wfw:comment>http://www.cnblogs.com/jlzhou/comments/266787.html</wfw:comment><comments>http://www.cnblogs.com/jlzhou/archive/2005/11/02/266787.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/jlzhou/comments/commentRss/266787.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jlzhou/services/trackbacks/266787.html</trackback:ping><description><![CDATA[<P>可能有不少朋友遇到过这样的问题：<BR>update或delete语句忘带了where子句，或where子句精度不够，执行之后造成了严重的后果，<BR>这种情况的数据恢复只能利用事务日志的备份来进行，所以如果你的SQL没有进行相应的全库备份<BR>或不能备份日志（truncate log on checkpoint选项为1），那么就无法进行数据的恢复了，或者<BR>只能恢复到最近一次的备份的数据了。</P>
<P>以下简单说明恢复数据方法：<BR>1，如果误操作之前存在一个全库备份（或已有多个差异备份或增量备份），首先要做的事就是进<BR>进行一次日志备份（如果为了不让日志文件变大而置trunc. log on chkpt.选项为1那你就死翘了）<BR>&nbsp;&nbsp;&nbsp; backup log dbName to disk='fileName'<BR>2，恢复一个全库备份，注意需要使用with norecovery，如果还有其他差异或增量备份，则逐个恢<BR>复<BR>&nbsp;&nbsp;&nbsp; restore database dbName from disk='fileName' with norecovery<BR>3，恢复最后一个日志备份即刚做的日志备份，指定恢复时间点到误操作之前的时刻<BR>&nbsp;&nbsp;&nbsp; restore log dbName from disk='fileName'<BR>&nbsp;&nbsp;&nbsp; with stopat='date_time'</P>
<P>以上这些操作都可以在SQL SERVER企业管理器里完成，难度不大。。。</P>
<P>当然，如果误操作是一些不记日志的操作比如truncate table，select into等操作，那么是无法利<BR>用上述方法来恢复数据的... <BR>&nbsp;</P><img src ="http://www.cnblogs.com/jlzhou/aggbug/266787.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42805/" target="_blank">[新闻]Google Knol 开始尝试有声版</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>VS2005专业版感想</title><link>http://www.cnblogs.com/jlzhou/archive/2005/11/01/266076.html</link><dc:creator>jlzhou</dc:creator><author>jlzhou</author><pubDate>Tue, 01 Nov 2005 02:22:00 GMT</pubDate><guid>http://www.cnblogs.com/jlzhou/archive/2005/11/01/266076.html</guid><wfw:comment>http://www.cnblogs.com/jlzhou/comments/266076.html</wfw:comment><comments>http://www.cnblogs.com/jlzhou/archive/2005/11/01/266076.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cnblogs.com/jlzhou/comments/commentRss/266076.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jlzhou/services/trackbacks/266076.html</trackback:ping><description><![CDATA[因为买了MSDN宇宙版，所以可以得到VS2005，可是从微软的MSDN网站下载速度巨慢，到现在，3天了，还只下载了一半VS2005 Team Developer和SQL 2005 Develop Edition。等不及了，从BT上下载了VS2005 Professional，速度真快呀，1天就搞定了。<BR><BR>在VMWare的虚拟机中，安装Windows 2003 Standard with SP1 VOL，(MSDN版的还要激活限制，真麻烦，还是盗版方便啊！)，然后，安装VS2005专业版，完全安装，感觉安装速度比VS2003要快一些。<BR><BR>安装完了，试了试ASP.NET的开发，连接了SQL Server 2005 Express，随便建了新数据库和表，托拽到ASP页面，发现，VS2005自动完成了很多工作，包括生成数据库连接和GridView，甚至可以选择设置Edit和Delete的代码自动生成，虽然在实际的项目开发中没有太大的用处，但是这代表了Microsoft的一种态度，就是要简化开发步骤，去掉那些non-Value Added的部分。<BR><BR>我以前用的比较多的是Borland Delphi，而且是从1.0开始的，我的很多成绩都是使用Delphi创造的，一直希望Delphi能更好更强。可是后来Borland的战略总是出问题，人才流失严重，产品也不对路，.net的支持也是一塌糊涂，跟着Microsoft的后面跑，产品售价还高的离谱，新版本Delphi8 &amp; Delphi2005都不好用，bug连天，速度慢，稳定的老版本(Delphi 7)却不卖了，可能是担心影响新版本的销售，Sigh!<BR><BR>VS2005的推出，无疑是给Borland当头一棒，看Delphi2006如何表现吧。<img src ="http://www.cnblogs.com/jlzhou/aggbug/266076.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42804/" target="_blank">[新闻]12日电脑与人进行世纪对话 可思考机器或诞生</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>MSDN宇宙版到货！</title><link>http://www.cnblogs.com/jlzhou/archive/2005/10/11/252403.html</link><dc:creator>jlzhou</dc:creator><author>jlzhou</author><pubDate>Tue, 11 Oct 2005 07:01:00 GMT</pubDate><guid>http://www.cnblogs.com/jlzhou/archive/2005/10/11/252403.html</guid><wfw:comment>http://www.cnblogs.com/jlzhou/comments/252403.html</wfw:comment><comments>http://www.cnblogs.com/jlzhou/archive/2005/10/11/252403.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/jlzhou/comments/commentRss/252403.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jlzhou/services/trackbacks/252403.html</trackback:ping><description><![CDATA[<IMG src="http://www.cnblogs.com/images/cnblogs_com/jlzhou/msdn.jpg" border=0><BR><BR>终于到手啦！哈哈哈，期待VS2005，据微软的人说，已经release了，真的吗？<img src ="http://www.cnblogs.com/jlzhou/aggbug/252403.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42803/" target="_blank">[新闻]人民网评:中国移动为什么要抛弃iPhone?</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>VB.NET LDAP 用户身份验证</title><link>http://www.cnblogs.com/jlzhou/archive/2005/06/26/181608.html</link><dc:creator>jlzhou</dc:creator><author>jlzhou</author><pubDate>Sun, 26 Jun 2005 14:47:00 GMT</pubDate><guid>http://www.cnblogs.com/jlzhou/archive/2005/06/26/181608.html</guid><wfw:comment>http://www.cnblogs.com/jlzhou/comments/181608.html</wfw:comment><comments>http://www.cnblogs.com/jlzhou/archive/2005/06/26/181608.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/jlzhou/comments/commentRss/181608.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jlzhou/services/trackbacks/181608.html</trackback:ping><description><![CDATA[前几天花了两天时间研究如何在.NET下验证LDAP的用户身份，看了一些java和vb的代码，碰了不少钉子，试验再试验，终于搞定，与大家分享... <BR><BR>首先，我要讲的LDAP不是微软的Active Directory目录服务，而是运行在SUN One上面的目录服务。 <BR><BR>请看代码（部分敏感信息删节）： <BR><BR>
<DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid">
<DIV><IMG id=Codehighlighter1_12_2236_Open_Image onclick="this.style.display='none'; Codehighlighter1_12_2236_Open_Text.style.display='none'; Codehighlighter1_12_2236_Closed_Image.style.display='inline'; Codehighlighter1_12_2236_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_12_2236_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12_2236_Closed_Text.style.display='none'; Codehighlighter1_12_2236_Open_Image.style.display='inline'; Codehighlighter1_12_2236_Open_Text.style.display='inline';" src="http://www.cnblogs.com/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Private</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN id=Codehighlighter1_12_2236_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Sub&nbsp;btnTest_Click()</SPAN><SPAN id=Codehighlighter1_12_2236_Open_Text><SPAN style="COLOR: #0000ff">Sub</SPAN><SPAN style="COLOR: #000000">&nbsp;btnTest_Click(</SPAN><SPAN style="COLOR: #0000ff">ByVal</SPAN><SPAN style="COLOR: #000000">&nbsp;sender&nbsp;</SPAN><SPAN style="COLOR: #0000ff">As</SPAN><SPAN style="COLOR: #000000">&nbsp;System.</SPAN><SPAN style="COLOR: #0000ff">Object</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #0000ff">ByVal</SPAN><SPAN style="COLOR: #000000">&nbsp;e&nbsp;</SPAN><SPAN style="COLOR: #0000ff">As</SPAN><SPAN style="COLOR: #000000">&nbsp;System.EventArgs)&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Handles</SPAN><SPAN style="COLOR: #000000">&nbsp;btnTest.Click<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Dim</SPAN><SPAN style="COLOR: #000000">&nbsp;LoginName&nbsp;</SPAN><SPAN style="COLOR: #0000ff">As</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">String</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;txtUser.Text<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Dim</SPAN><SPAN style="COLOR: #000000">&nbsp;LoginPwd&nbsp;</SPAN><SPAN style="COLOR: #0000ff">As</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">String</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;txtPwd.Text<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">If</SPAN><SPAN style="COLOR: #000000">&nbsp;LoginPwd&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">""</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Then</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtResult.Text&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">*&nbsp;Password&nbsp;can&nbsp;not&nbsp;be&nbsp;blank."</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Exit&nbsp;Sub</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">End</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">If</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Dim</SPAN><SPAN style="COLOR: #000000">&nbsp;myDirectorySearcher&nbsp;</SPAN><SPAN style="COLOR: #0000ff">As</SPAN><SPAN style="COLOR: #000000">&nbsp;DirectorySearcher<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Dim</SPAN><SPAN style="COLOR: #000000">&nbsp;mySearchResult&nbsp;</SPAN><SPAN style="COLOR: #0000ff">As</SPAN><SPAN style="COLOR: #000000">&nbsp;SearchResult<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Dim</SPAN><SPAN style="COLOR: #000000">&nbsp;myDirectoryEntry&nbsp;</SPAN><SPAN style="COLOR: #0000ff">As</SPAN><SPAN style="COLOR: #000000">&nbsp;DirectoryEntry<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Dim</SPAN><SPAN style="COLOR: #000000">&nbsp;UserName&nbsp;</SPAN><SPAN style="COLOR: #0000ff">As</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">String</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtResult.Text&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Try</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">If</SPAN><SPAN style="COLOR: #000000">&nbsp;myDirectoryEntry.Exists(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">LDAP://ldapserver.com/uid=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;LoginName&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,ou=people,ou=intranet,dc=yourdomainname,dc=com</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Then</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Try</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myDirectoryEntry&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">New</SPAN><SPAN style="COLOR: #000000">&nbsp;DirectoryEntry(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">LDAP://ldapserver.com/ou=people,ou=intranet,dc=yourdomainname,dc=com</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">uid=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;LoginName&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,ou=people,ou=intranet,dc=yourdomainname,dc=com</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">,&nbsp;LoginPwd,&nbsp;AuthenticationTypes.ServerBind)<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myDirectorySearcher&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">New</SPAN><SPAN style="COLOR: #000000">&nbsp;DirectorySearcher(myDirectoryEntry)<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myDirectorySearcher.</SPAN><SPAN style="COLOR: #0000ff">Filter</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">(uid=</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;txtUser.Text&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)"</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myDirectorySearcher.PropertiesToLoad.Add(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">DisplayLastName</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myDirectorySearcher.PropertiesToLoad.Add(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">DisplayFirstName</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">)<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mySearchResult&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;myDirectorySearcher.FindOne<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">If</SPAN><SPAN style="COLOR: #000000">&nbsp;mySearchResult&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Is</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Nothing</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Then</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtResult.Text&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">*&nbsp;Login&nbsp;failed."</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Else</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtResult.Text&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&gt;&gt;&gt;&nbsp;Login&nbsp;passed!</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;vbCrLf<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserName&nbsp;</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">&nbsp;mySearchResult.GetDirectoryEntry().Properties(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">DisplayFirstName</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">).Value&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;mySearchResult.GetDirectoryEntry().Properties(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">DisplayLastName</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">).Value<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtResult.Text&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;UserName&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;vbCrLf<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">End</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">If</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Catch</SPAN><SPAN style="COLOR: #000000">&nbsp;ex&nbsp;</SPAN><SPAN style="COLOR: #0000ff">As</SPAN><SPAN style="COLOR: #000000">&nbsp;Exception<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtResult.Text&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">*&nbsp;Login&nbsp;failed.</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;vbCrLf&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;ex.Message<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">End</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Try</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Else</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtResult.Text&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">*&nbsp;Invalid&nbsp;user&nbsp;login&nbsp;name."</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top></SPAN><SPAN style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">End</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">If</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Catch</SPAN><SPAN style="COLOR: #000000">&nbsp;ex&nbsp;</SPAN><SPAN style="COLOR: #0000ff">As</SPAN><SPAN style="COLOR: #000000">&nbsp;Exception<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtResult.Text&nbsp;</SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">*&nbsp;Can&nbsp;not&nbsp;access&nbsp;the&nbsp;LDAP&nbsp;server.</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;vbCrLf&nbsp;</SPAN><SPAN style="COLOR: #000000">&amp;</SPAN><SPAN style="COLOR: #000000">&nbsp;ex.Message<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">End</SPAN><SPAN style="COLOR: #000000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff">Try</SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.cnblogs.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</SPAN><SPAN style="COLOR: #0000ff">End&nbsp;Sub</SPAN></SPAN></DIV></DIV><BR>这里要说明一下：<BR><BR>1、必须检验密码不能为空，否则会造成验证有误，即空密码能通过验证，不知道为什么。<BR>2、LDAP://......这最前面的四个字母LDAP必须大写！否则报未知错误，不知道为什么，还得我走了一段弯路。<BR>3、ldapserver.com需要替换成LDAP服务器的地址。<BR>4、LDAP://......地址后面的参数，要根据你要访问的LDAP的设置而定。<BR>5、如果密码不对，会引发异常，所以我在异常处理中捕获，但是不知道这样是否正确。<BR>6、If mySearchResult Is Nothing Then 这句我觉得是废话，好像怎么也不会为True，如果密码不对，会引发异常的，但是不放心还是加上这句，可能是我的判断逻辑有问题。<BR><BR>总之，这段代码肯定不是最完美的代码，但是确实是可以完成任务的代码，欢迎大家指正。<img src ="http://www.cnblogs.com/jlzhou/aggbug/181608.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42802/" target="_blank">[新闻]索尼推出第二代触控屏eBook电子书</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>我的.NET开发环境设置</title><link>http://www.cnblogs.com/jlzhou/archive/2005/06/24/180732.html</link><dc:creator>jlzhou</dc:creator><author>jlzhou</author><pubDate>Fri, 24 Jun 2005 14:18:00 GMT</pubDate><guid>http://www.cnblogs.com/jlzhou/archive/2005/06/24/180732.html</guid><wfw:comment>http://www.cnblogs.com/jlzhou/comments/180732.html</wfw:comment><comments>http://www.cnblogs.com/jlzhou/archive/2005/06/24/180732.html#Feedback</comments><slash:comments>36</slash:comments><wfw:commentRss>http://www.cnblogs.com/jlzhou/comments/commentRss/180732.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jlzhou/services/trackbacks/180732.html</trackback:ping><description><![CDATA[<P>我想大家在开发过程中可能同样会遇到下列问题：</P>
<P>1，多平台开发<BR>不同的开发工具，相同开发工具的不同版本混装在一起，稍有不慎就会搞得乱七八糟。</P>
<P>2，试用新控件或者新工具<BR>很自然的，因为没用过，搞乱系统也就很正常啦，卸载也卸不干净。比如试用VS2005B2</P>
<P>3，病毒感染或者被3721之类下三滥黑了<BR>很讨厌的防治问题，上网找东西，很有可能被恶意脚本攻击。又不能随意重装系统，重装一次需要n小时。</P>
<P>4，备份设置好的环境<BR>费了九牛二虎之力安装配置好的系统，不想以后再来一次或n次。</P>
<P>5，多操作系统<BR>使用各种版本，类型的操作系统，新版windows使用新的激活策略，使用VOL版吧，升级又会有麻烦，不升级吧，请参考第3条。</P>
<P>哈，控诉了这么多问题，终于在2005年找到了比较完美的解决方案！</P>
<P></P>
<P>有人说了，这有什么，我们用虚拟机软件可以解决这些问题，可是虚拟机对硬件，尤其是内存和硬盘的要求比较高，而且用起来不那么顺手。</P>
<P>我要说，在VMWare 5出来以前确实是这样滴......</P>
<P>隆重推出我的解决方案！这是我潜心钻研多日的成果，请耐心看下去，谢谢各位。</P>
<P>首先说明我的硬件环境：Dell Inspiron 8500 宽屏 1280x800 WXGA笔记本电脑，1G内存，40G硬盘，还有Dell 17寸液晶显示器一台。</P>
<P>在进一步介绍之前，先说一下Windows XP的扩展桌面功能，大家都知道吗？我问了周围n个人，居然都没用过，倒！我们本本一族要充分利用我们现有的工具啊！把要外接的显示器连到笔记本电脑的外接显示器插口上，注意，我们不是要使两个显示器显示同样的内容，而是要扩展桌面！接好后，打开外接显示器电源，然后打开WindowsXP的显示属性设置，点击Settings标签,看到有两个蓝色的框框显示，一个表示你的主显示器，另一个就是你外接的，点击选中外接显示器，然后设置合适的分辨率，然后使Extend my Windows desktop onto this monitor复选框选中，然后点确定！如果没有意外，你会看到外接显示器显示扩展出来的桌面，你可以用鼠标拖动窗口到新的桌面，在开发时，可以一边参考帮助，一边coding了。我可没有跑题，这是为了下面的进一步说明打下基础。</P>
<P>进入正题，先介绍VMWare5的新的，很酷的特性：可以有多snapshot和clone功能！优化内存的使用，做到按需分配，不再像以前占用大量内存了！</P>
<P>简单解释一下vmware，用过的可以跳过这一段：vmware是一种虚拟机软件，它可以运行在Windows或linux平台的PC上（术语叫做host），它可以虚拟出x86架构的电脑，然后我们可以在这个虚拟出来的电脑（术语叫做：guest）上安装操作系统，guest的操作系统完全在虚拟的环境下，使用host的内存硬盘网卡和其他资源。具体的介绍请到<A href="http://www.google.com/">www.google.com</A>搜索vmware关键词。</P>
<P>在介绍snapshot,vmware可以把虚拟机里面运行的系统，进行快照，并且可以保存很多个版本，你可以随时还原到任何一个版本，这还不是最酷的功能！最酷的是：你可以在快照的基础上，进行克隆！这个克隆有两种，一种是连接克隆，另外就是完全克隆。所谓连接克隆，就是在以前保存得快照基础上，生成增量的虚拟机，哎，表达能力有限，将就着看吧。这样可以节省大量的硬盘空间和时间，具体应用请往下看。至于完全克隆不用多讲，是生成一个独立于原来快照的虚拟机。</P>
<P>好了，说说我如何在以上基础上设置我的开发环境：</P>
<P>首先，在笔记本上安装Windows xp 专业版sp1a版本，(sp2不好用，ie打开网页经常一片空白)，装好各个驱动，安装常用软件，比如，office,photoshop,金山词霸，SQL server开发版,升级ie和windows组件。</P>
<P>然后安装VMWare5,装好后,新建虚拟机,安装windows2000server，在guest中安装vmware tools，设置好后，take snapshot。然后选择clone功能，新建link clone，取个新的虚拟机名字，然后安装英文版vs.net2003，安装完后，take snapshot，然后安装中文msdn，take snapshot, 然后选择clone功能，新建link clone，再取一个新的虚拟机名字，这个虚拟机以后将用来承担主要的开发任务。在这些过程中我们建立了多个snapshot，以后随时可以在这些snapshot的基础上克隆出新的虚拟机。我们可以在这些新的虚拟机上安装各种软件，试验各种功能，而且不用担心破坏主要的开发环境。更妙的是，vmware5的内存管理功能异常强劲！它可以根据guest的内存占用情况来占用host的内存，而不向以前的版本占用固定大小的内存。另外，vmware5采用新的休眠机制,休眠和恢复guest异常快捷，这一点很爽，我们可以随时暂停开发任务，以后可以很快速的恢复工作状态。</P>
<P>随后，我新建虚拟机，安装Windows XP VOL版，生成snapshot,然后clone新的虚拟机，安装delphi7，再take snapshot....</P>
<P>值得注意的是，在vmware5虚拟机里面安装win2000,并且开发delphi的程序，windows2000会莫名其妙的崩溃（当时急死我了），但是试验发现在windowsxp作为guest时一切正常，这就是我为什么在winxp中安装delphi的原因。<BR></P>
<P>最后，我们还可以把vmware虚拟机的窗口拖到扩展的桌面上，这样就好像同时操作两台机器一样，好爽啊！<BR><BR>大概的思路就是这样了，打字打了好久，与大家分享！感谢dudu为大家提供这么好的平台分享技术和经验！</P>
<P>分享是快乐的......</P><img src ="http://www.cnblogs.com/jlzhou/aggbug/180732.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42801/" target="_blank">[新闻]百付宝加入战团 电子支付市场寻突破</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>NetAdvantage 2005 V2 is coming!</title><link>http://www.cnblogs.com/jlzhou/archive/2005/06/09/171400.html</link><dc:creator>jlzhou</dc:creator><author>jlzhou</author><pubDate>Thu, 09 Jun 2005 13:26:00 GMT</pubDate><guid>http://www.cnblogs.com/jlzhou/archive/2005/06/09/171400.html</guid><wfw:comment>http://www.cnblogs.com/jlzhou/comments/171400.html</wfw:comment><comments>http://www.cnblogs.com/jlzhou/archive/2005/06/09/171400.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnblogs.com/jlzhou/comments/commentRss/171400.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jlzhou/services/trackbacks/171400.html</trackback:ping><description><![CDATA[<IMG src="http://www.cnblogs.com/images/cnblogs_com/jlzhou/NA2f.jpg" border=0><BR><BR>看了看what's new，感觉asp.net部分更新不多，主要是webgrid的firefox支持，和增加了webchart的一些类型。<img src ="http://www.cnblogs.com/jlzhou/aggbug/171400.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42800/" target="_blank">[新闻]邮件标准协议英文独占时代终结</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item><item><title>Visual Studio for Linux 来了！</title><link>http://www.cnblogs.com/jlzhou/archive/2005/05/30/164784.html</link><dc:creator>jlzhou</dc:creator><author>jlzhou</author><pubDate>Mon, 30 May 2005 02:35:00 GMT</pubDate><guid>http://www.cnblogs.com/jlzhou/archive/2005/05/30/164784.html</guid><wfw:comment>http://www.cnblogs.com/jlzhou/comments/164784.html</wfw:comment><comments>http://www.cnblogs.com/jlzhou/archive/2005/05/30/164784.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cnblogs.com/jlzhou/comments/commentRss/164784.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/jlzhou/services/trackbacks/164784.html</trackback:ping><description><![CDATA[别以为题目错了！<BR><BR>是Mainsoft，注意，不是Microsoft!<BR><BR>发布了VS插件，使得Windows平台可以：<BR><BR>It is seamlessly integrated inside Visual Studio .NET and incorporates Mainsoft&#8217;s patent-pending compiler, which compiles Microsoft Intermediate Language (MSIL) into standard Java bytecode.<BR><BR>
<P>Grasshopper is a Visual Studio .NET<SUP>&#174;</SUP> plug-in, which enables you to use C# or Visual Basic .NET<SUP>&#174;</SUP> to develop cross-platform ASP.NET applications that run on Linux<SUP>&#174;</SUP> and any platform running Apache Tomcat.<BR></P><BR>Debugging an application running on the Java platform.<BR><BR><IMG height=479 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/jlzhou/MainSoft.jpg" width=609 align=baseline><BR><BR>Starting a new project in the Visual Studio .NET environment with Grasshopper installed.<BR><BR><IMG height=364 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/jlzhou/MainSoft1.jpg" width=531 align=baseline><BR><BR>Grasshopper integrated help.<BR><BR><IMG height=479 hspace=5 src="http://www.cnblogs.com/images/cnblogs_com/jlzhou/MainSoft2.jpg" width=609 align=baseline><BR><BR>请大家访问：http://www.mainsoft.com<BR><BR><img src ="http://www.cnblogs.com/jlzhou/aggbug/164784.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42799/" target="_blank">[新闻]2008年10月6日科技博客精选</a><br/><a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻频道</a>&nbsp;<a href="http://space.cnblogs.com/group.htm" target="_blank">小组</a>&nbsp;<a href="http://space.cnblogs.com/q" target="_blank">博问</a>&nbsp;<a href="http://wz.cnblogs.com/" target="_blank">网摘</a>&nbsp;<a href="http://space.cnblogs.com/ing" target="_blank">闪存</a>]]></description></item></channel></rss>