<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[Westlife]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[]]></description>
<link>http://hi.baidu.com/liulogo</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[try语句块中的页面跳转问题]]></title>
        <link><![CDATA[http://hi.baidu.com/liulogo/blog/item/b2c52a8b672058779f2fb4a0.html]]></link>
        <description><![CDATA[
		
		今天第一次碰到<span style="color: rgb(0, 0, 0);">Response.Redirect</span>报错，不是无法找到页面，而是弹出错误：<br>
<h1 class="title_txt"><font color="#ff0000" size="2">Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack</font></h1>
在网上查找问题解决方法如下：<br>
摘自http://blog.csdn.net/skyaspnet/archive/2008/03/18/2194793.aspx
<p>问题原因及解决办法：</p>
<p>原因<br>
Response.End 方法停止页的执行，并将该执行变换到应用程序的事件管线中的 Application_EndRequest 事件。 Response.End 后面的代码行将不执行。</p>
<p>此问题出现在 Response.Redirect 和 Server.Transfer 方法中，这是由于这两种方法都在内部调用 Response.End。 <br>
解决方案<br>
若要解决此问题，请使用下列方法之一： <br>
对于 Response.End，调用 ApplicationInstance.CompleteRequest 方法而不调用 Response.End，以便跳过 Application_EndRequest 事件的代码执行。 <br>
对于 Response.Redirect，使用重载 Response.Redirect(String url, bool endResponse)，对 endResponse 参数它传递 false以取消对 Response.End 的内部调用。例如： <br>
&nbsp;&nbsp;  Response.Redirect (&quot;nextpage.aspx&quot;, false);<br>
如果使用这种解决方法，Response.Redirect 后面的代码将得到执行。 <br>
对于 Server.Transfer，请改用 Server.Execute 方法。 <br>
状态<br>
这种现象是设计使然。<br>
解决后的代码:<br>
try<br>
{<br>
Response.Redirect(&quot;UserManager&quot;,false);<br>
}<br>
catch <br>
{<br>
Response.Redirect(&quot;Error.aspx&quot;);<br>
}</p> <a href="http://hi.baidu.com/liulogo/blog/item/b2c52a8b672058779f2fb4a0.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/liulogo/blog/category/%2Enet">.net</a>&nbsp;<a href="http://hi.baidu.com/liulogo/blog/item/b2c52a8b672058779f2fb4a0.html#comment">查看评论</a>]]></description>
        <pubDate>2009-04-22  18:59</pubDate>
        <category><![CDATA[.net]]></category>
        <author><![CDATA[liulogo]]></author>
		<guid>http://hi.baidu.com/liulogo/blog/item/b2c52a8b672058779f2fb4a0.html</guid>
</item>

<item>
        <title><![CDATA[Visual Studio 2008使用奇怪问题]]></title>
        <link><![CDATA[http://hi.baidu.com/liulogo/blog/item/8cd643fc56babcf5fd037f25.html]]></link>
        <description><![CDATA[
		
		开发工具:Visual Studio 2008<br>
现象：修改后没有重新编译，直接运行程序跑起来有问题，调试就没问题，但重新编译后就不再有问题<br>
疑问：VS在debug时不重新编译当前工程？ 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/liulogo/blog/category/%2Enet">.net</a>&nbsp;<a href="http://hi.baidu.com/liulogo/blog/item/8cd643fc56babcf5fd037f25.html#comment">查看评论</a>]]></description>
        <pubDate>2009-04-22  15:19</pubDate>
        <category><![CDATA[.net]]></category>
        <author><![CDATA[liulogo]]></author>
		<guid>http://hi.baidu.com/liulogo/blog/item/8cd643fc56babcf5fd037f25.html</guid>
</item>

<item>
        <title><![CDATA[.net 快捷方式]]></title>
        <link><![CDATA[http://hi.baidu.com/liulogo/blog/item/ce292064019b45f8f63654c4.html]]></link>
        <description><![CDATA[
		
		编辑快捷键<br>
shift + alt + enter  切换全屏编辑<br>
<p>Ctrl+B,T / Ctrl+K,K: 切换书签开关<br>
Ctrl+B,N / Ctrl+K,N: 移动到下一书签<br>
Ctrl+B,P: 移动到上一书签<br>
Ctrl+B,C: 清除全部标签</p>
<p>Ctrl+I: 渐进式搜索<br>
Ctrl+Shift+I: 反向渐进式搜索<br>
Ctrl+F: 查找<br>
Ctrl+Shift+F: 在文件中查找<br>
F3: 查找下一个<br>
Shift+F3: 查找上一个<br>
Ctrl+H: 替换<br>
Ctrl+Shift+H: 在文件中替换<br>
Alt+F12: 查找符号(列出所有查找结果)</p>
<p>Ctrl+Shift+V: 剪贴板循环</p>
<p>Ctrl+左右箭头键: 一次可以移动一个单词<br>
Ctrl+上下箭头键: 滚动代码屏幕，但不移动光标位置。<br>
Ctrl+Shift+L: 删除当前行<br>
Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态<br>
Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态<br>
Ctrl+M,P: 停止大纲显示<br>
Ctrl+E,S: 查看空白<br>
Ctrl+E,W: 自动换行<br>
Ctrl+G: 转到指定行<br>
Shift+Alt+箭头键: 选择矩形文本<br>
Alt+鼠标左按钮: 选择矩形文本</p>
<p>Ctrl+Shift+U: 全部变为大写<br>
Ctrl+U: 全部变为小写</p>
<p>调试快捷键</p>
<p>F6: 生成解决方案<br>
Ctrl+F6: 生成当前项目<br>
F7: 查看代码<br>
Shift+F7: 查看窗体设计器<br>
F5: 启动调试<br>
Ctrl+F5: 开始执行(不调试)<br>
Shift+F5: 停止调试<br>
Ctrl+Shift+F5: 重启调试<br>
F9: 切换断点<br>
Ctrl+F9: 启用/停止断点<br>
Ctrl+Shift+F9: 删除全部断点<br>
F10: 逐过程<br>
Ctrl+F10: 运行到光标处<br>
F11: 逐语句</p>
<p>Ctrl+J / Ctrl+K,L: 列出成员<br>
Ctrl+Shift+空格键 / Ctrl+K,P: 参数信息<br>
Ctrl+K,I: 快速信息</p>
<p>Ctrl+E,C / Ctrl+K,C: 注释选定内容<br>
Ctrl+E,U / Ctrl+K,U: 取消选定注释内容</p>
<p>Ctrl+K,M: 生成方法存根<br>
Ctrl+K,X: 插入代码段<br>
Ctrl+K,S: 插入外侧代码</p>
<p>F12: 转到所调用过程或变量的定义</p>
<p>窗口快捷键</p>
<p>Ctrl+W,W: 浏览器窗口<br>
Ctrl+W,S: 解决方案管理器<br>
Ctrl+W,C: 类视图<br>
Ctrl+W,E: 错误列表<br>
Ctrl+W,O: 输出视图<br>
Ctrl+W,P: 属性窗口<br>
Ctrl+W,T: 任务列表<br>
Ctrl+W,X: 工具箱<br>
Ctrl+W,B: 书签窗口<br>
Ctrl+W,U: 文档大纲</p>
<p>Ctrl+D,B: 断点窗口<br>
Ctrl+D,I: 即时窗口</p>
<p>Ctrl+Tab: 活动窗体切换</p>
<p>Ctrl+Shift+N: 新建项目<br>
Ctrl+Shift+O: 打开项目<br>
Ctrl+Shift+S: 全部保存<br>
Shift+Alt+C: 新建类<br>
Ctrl+Shift+A: 新建项</p>
<p> </p>
<p>常用Visual C# 快捷键</p>
<p>1． F12：转到定义；Shift+F12：转到引用</p>
<p>2． F5：启动；Ctrl+F5：开始执行（不调试）；Shift+F5：停止调试</p>
<p>3． F7：查看代码；Shift+F7：查看视图设计器</p>
<p>4． Ctrl+Alt+L：解决方案资源管理器</p>
<p>5． Ctrl+Alt+J：对象浏览器</p>
<p>6． F4：显示属性窗口</p>
<p>7． Ctrl+Alt+X：工具箱</p>
<p>8． Ctrl+Alt+C类视图</p>
<p>9． Alt+Enter：查看属性</p>
<p>10． F10：逐过程调试</p>
<p>11． F11：逐语句调试</p>
<p>12． Ctrl+B：新断点</p>
<p>13． Ctrl+Shift+F9：清除所有断点</p>
<p>14． Ctrl+Shift+B生成解决方案</p>
<p>15． Shift+Alt+Enter：全屏</p>
<p>16． 大纲显示：Ctrl+M, Ctrl+M：切换大纲显示展开；Ctrl+M, Ctrl+L：切换所有大纲显示；Ctrl+M,Crtl+P停止大纲显示；Ctrl+M, Ctrl+O：折叠到定义</p>
<p>17． 智能感知：Ctrl＋J：列出成员；Ctrl+Shift+空格：参数信息； Ctrl+K,Ctrl+I：快速信息；Alt+右箭头键：完成单词</p>
<p>如果不好一下记住，也没有关系。可以对IDE环境进行设置，在菜单上显示快捷键。平时写代码时多注意一下，见的多了自然就熟练了，免得在写代码时不停的切换键盘和鼠标。</p>
<p>设置如下：『工具』，『自定义』，『选项』，然后在&ldquo;在屏幕提示中显示快捷键&rdquo;前选定即可。</p> <a href="http://hi.baidu.com/liulogo/blog/item/ce292064019b45f8f63654c4.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/liulogo/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/liulogo/blog/item/ce292064019b45f8f63654c4.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-25  22:46</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[liulogo]]></author>
		<guid>http://hi.baidu.com/liulogo/blog/item/ce292064019b45f8f63654c4.html</guid>
</item>

<item>
        <title><![CDATA[.net开源项目资源网站收集]]></title>
        <link><![CDATA[http://hi.baidu.com/liulogo/blog/item/c8dbca34a526fd4b251f1492.html]]></link>
        <description><![CDATA[
		
		DotNetNuke中文官方(www.dnnchina.net)授权文章：   <br>
  DotNetNuke中文官方技术支持中心(forum.pspsoft.com)   <br>
    <br>
  １、DNN(DotNetNuke)研究手札系列1－资源：   http://www.cnblogs.com/unruledboy/archive/2004/09/01/38425.html   <br>
  ２、DNN(DotNetNuke)研究手札系列2－背景、现状：http://www.cnblogs.com/unruledboy/archive/2004/09/01/38607.html   <br>
  ３、DNN(DotNetNuke)研究手札系列3－框架(概述)：http://www.cnblogs.com/unruledboy/archive/2004/09/04/39628.html   <br>
  ４、DNN(DotNetNuke)研究手札系列4－框架(硬伤)   1：http://www.cnblogs.com/unruledboy/archive/2004/09/23/46019.html   <br>
  ５、DNN(DotNetNuke)研究手札系列5之DNN的未来(蓝图)：http://www.cnblogs.com/unruledboy/archive/2004/10/03/48739.html   <br>
  ６、DNN(DotNetNuke)   3.0感官刺激零距x接触！！！：   <br>
  http://www.cnblogs.com/unruledboy/archive/2004/10/19/54066.html   <br>
  ７、PSP团队、开源事业、DotNetNuke(DNN)中国本地化的一些情况：http://www.cnblogs.com/unruledboy/archive/2004/11/15/63573.html   <br>
  ８、DotNetNuke3.0   Public   Beta发布新特性研究手札：http://www.cnblogs.com/unruledboy/archive/2004/11/21/66700.html <a href="http://hi.baidu.com/liulogo/blog/item/c8dbca34a526fd4b251f1492.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/liulogo/blog/category/%2Enet">.net</a>&nbsp;<a href="http://hi.baidu.com/liulogo/blog/item/c8dbca34a526fd4b251f1492.html#comment">查看评论</a>]]></description>
        <pubDate>2008-06-26  19:31</pubDate>
        <category><![CDATA[.net]]></category>
        <author><![CDATA[liulogo]]></author>
		<guid>http://hi.baidu.com/liulogo/blog/item/c8dbca34a526fd4b251f1492.html</guid>
</item>

<item>
        <title><![CDATA[ASP.NET将Web站点下的绝对路径转换为虚拟路径(转载http://www.hackhome.com/InfoView/Article_180045.html]]></title>
        <link><![CDATA[http://hi.baidu.com/liulogo/blog/item/4e4d1551135c1b2143a75bdc.html]]></link>
        <description><![CDATA[
		
		<p>很经常使用到的一个功能,但在在网上却一直没有找到相关的解决方法,今天借着项目应用到的机会写了两个将绝对路径转换为虚拟路径封装好的方法<br>
将Web站点下的绝对路径转换为相对于指定页面的虚拟路径<br>
/**//// &lt;summary&gt;<br>
/// 将Web站点下的绝对路径转换为相对于指定页面的虚拟路径<br>
/// &lt;/summary&gt;<br>
/// &lt;param name=&quot;page&quot;&gt;当前页面指针，一般为this&lt;/param&gt;<br>
/// &lt;param name=&quot;specifiedPath&quot;&gt;绝对路径&lt;/param&gt;<br>
/// &lt;returns&gt;虚拟路径, 型如: ../../&lt;/returns&gt;<br>
public static string ConvertSpecifiedPathToRelativePathForPage(Page page, string specifiedPath)<br>
{<br>
&nbsp;&nbsp;&nbsp;  // 根目录虚拟路径<br>
&nbsp;&nbsp;&nbsp;  string virtualPath = page.Request.ApplicationPath;<br>
&nbsp;&nbsp;&nbsp;  // 根目录绝对路径<br>
&nbsp;&nbsp;&nbsp;  string pathRooted = HostingEnvironment.MapPath(virtualPath);<br>
&nbsp;&nbsp;&nbsp;  // 页面虚拟路径<br>
&nbsp;&nbsp;&nbsp;  string pageVirtualPath = page.Request.Path;</p>
<p>&nbsp;&nbsp;&nbsp;  if (!Path.IsPathRooted(specifiedPath) specifiedPath.IndexOf(pathRooted) == -1)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  throw new Exception(string.Format(&quot;\&quot;{0}\&quot;是虚拟路径而不是绝对路径!&quot;, specifiedPath));<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  // 转换成相对路径 <br>
&nbsp;&nbsp;&nbsp;  //(测试发现，pathRooted 在 VS2005 自带的服务器跟在IIS下根目录或者虚拟目录运行似乎不一样,<br>
&nbsp;&nbsp;&nbsp;  // 有此地方后面会加&quot;\&quot;, 有些则不会, 为保险起见判断一下)<br>
&nbsp;&nbsp;&nbsp;  if (pathRooted.Substring(pathRooted.Length - 1, 1) == &quot;\\&quot;)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  specifiedPath = specifiedPath.Replace(pathRooted, &quot;/&quot;);<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  else<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  specifiedPath = specifiedPath.Replace(pathRooted, &quot;&quot;);<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  string relativePath = specifiedPath.Replace(&quot;\\&quot;, &quot;/&quot;);</p>
<p>&nbsp;&nbsp;&nbsp;  string[] pageNodes = pageVirtualPath.Split('/');</p>
<p>&nbsp;&nbsp;&nbsp;  // 减去最后一个页面和前面一个 &quot;&quot; 值<br>
int pageNodesCount = pageNodes.Length - 2;</p>
<p> </p>
<p>&nbsp;&nbsp;&nbsp;  for (int i = 0; i &lt; pageNodesCount; i++)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  relativePath = &quot;/..&quot; + relativePath;<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  if (pageNodesCount &gt; 0)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // 如果存在 &quot;..&quot; , 则把最前面的 &quot;/&quot; 去掉<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  relativePath = relativePath.Substring(1, relativePath.Length - 1);<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  return relativePath;<br>
}</p>
<p>第二个方法显然是从第一个方法中的前部分抽取出来的,所以懒得去添加相关注释 :P<br>
将Web站点下的绝对路径转换为虚拟路径<br>
/**//// &lt;summary&gt;<br>
/// 将Web站点下的绝对路径转换为虚拟路径<br>
/// 注：非Web站点下的则不转换<br>
/// &lt;/summary&gt;<br>
/// &lt;param name=&quot;page&quot;&gt;当前页面指针，一般为this&lt;/param&gt;<br>
/// &lt;param name=&quot;specifiedPath&quot;&gt;绝对路径&lt;/param&gt;<br>
/// &lt;returns&gt;虚拟路径, 型如: ~/&lt;/returns&gt;<br>
public static string ConvertSpecifiedPathToRelativePath(Page page, string specifiedPath)<br>
<br>
{<br>
&nbsp;&nbsp;&nbsp;  string virtualPath = page.Request.ApplicationPath;</p>
<p>&nbsp;&nbsp;&nbsp;  string pathRooted = HostingEnvironment.MapPath(virtualPath);</p>
<p>&nbsp;&nbsp;&nbsp;  if (!Path.IsPathRooted(specifiedPath) specifiedPath.IndexOf(pathRooted) == -1)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return specifiedPath;<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  if (pathRooted.Substring(pathRooted.Length - 1, 1) == &quot;\\&quot;)<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  specifiedPath = specifiedPath.Replace(pathRooted, &quot;~/&quot;);<br>
&nbsp;&nbsp;&nbsp;  }<br>
&nbsp;&nbsp;&nbsp;  else<br>
&nbsp;&nbsp;&nbsp;  {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  specifiedPath = specifiedPath.Replace(pathRooted, &quot;~&quot;);<br>
}</p>
<p> </p>
<p>&nbsp;&nbsp;&nbsp;  string relativePath = specifiedPath.Replace(&quot;\\&quot;, &quot;/&quot;);<br>
&nbsp;&nbsp;&nbsp;  return relativePath;<br>
}</p>
<p>将虚拟路径转绝对路就没什么好说的了, HttpRequest.MapPath 方法专门干这事</p> <a href="http://hi.baidu.com/liulogo/blog/item/4e4d1551135c1b2143a75bdc.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/liulogo/blog/category/%2Enet">.net</a>&nbsp;<a href="http://hi.baidu.com/liulogo/blog/item/4e4d1551135c1b2143a75bdc.html#comment">查看评论</a>]]></description>
        <pubDate>2008-04-16  15:37</pubDate>
        <category><![CDATA[.net]]></category>
        <author><![CDATA[liulogo]]></author>
		<guid>http://hi.baidu.com/liulogo/blog/item/4e4d1551135c1b2143a75bdc.html</guid>
</item>

<item>
        <title><![CDATA[B/S中窗体式下载服务器文件]]></title>
        <link><![CDATA[http://hi.baidu.com/liulogo/blog/item/3ae0c9a7f97edb90d0435872.html]]></link>
        <description><![CDATA[
		
		<div class="HtmlCode">string DownloadFilePath = downloadfilepath ;//下载文件在服务器中的路径 ;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Response.Clear();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Response.ContentType = &quot;application/octet-stream&quot;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Response.AddHeader(&quot;Content-Disposition&quot;, &quot;attachment; filename=file.txt&quot; );<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Response.Flush();<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Response.WriteFile(DownloadFilePath);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Response.End();</div> <a href="http://hi.baidu.com/liulogo/blog/item/3ae0c9a7f97edb90d0435872.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/liulogo/blog/category/%2Enet">.net</a>&nbsp;<a href="http://hi.baidu.com/liulogo/blog/item/3ae0c9a7f97edb90d0435872.html#comment">查看评论</a>]]></description>
        <pubDate>2008-04-15  20:00</pubDate>
        <category><![CDATA[.net]]></category>
        <author><![CDATA[liulogo]]></author>
		<guid>http://hi.baidu.com/liulogo/blog/item/3ae0c9a7f97edb90d0435872.html</guid>
</item>

<item>
        <title><![CDATA[having子句的用法]]></title>
        <link><![CDATA[http://hi.baidu.com/liulogo/blog/item/ab9584b37b1effa3d8335a67.html]]></link>
        <description><![CDATA[
		
		<p>指定组或聚合的搜索条件。HAVING 只能与 SELECT 语句一起使用。通常在 GROUP BY 子句中使用它。如果不使用 GROUP BY 子句，HAVING 的行为与 WHERE 子句一样。</p>
<pre>SELECT <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Sales.Customer.CustomerID,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Sales.SalesOrderHeader.SalesOrderID, <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  SUM(Sales.SalesOrderDetail.LineTotal) AS SubTotal<br>FROM <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Sales.Customer<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  INNER JOIN Sales.SalesOrderHeader<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ON Sales.SalesOrderHeader.CustomerID = Sales.Customer.CustomerID<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  INNER JOIN Sales.SalesOrderDetail<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ON Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID<br>GROUP BY <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Sales.Customer.CustomerID,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Sales.SalesOrderHeader.SalesOrderID<br>HAVING SUM(LineTotal) &gt; 25000.00<br>ORDER BY <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Sales.Customer.CustomerID,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  SalesOrderID</pre> <a href="http://hi.baidu.com/liulogo/blog/item/ab9584b37b1effa3d8335a67.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/liulogo/blog/category/Sqlserver">Sqlserver</a>&nbsp;<a href="http://hi.baidu.com/liulogo/blog/item/ab9584b37b1effa3d8335a67.html#comment">查看评论</a>]]></description>
        <pubDate>2008-03-10  14:24</pubDate>
        <category><![CDATA[Sqlserver]]></category>
        <author><![CDATA[liulogo]]></author>
		<guid>http://hi.baidu.com/liulogo/blog/item/ab9584b37b1effa3d8335a67.html</guid>
</item>

<item>
        <title><![CDATA[substring和charindex的使用注意]]></title>
        <link><![CDATA[http://hi.baidu.com/liulogo/blog/item/7e3f70ed22f6b64b79f0553f.html]]></link>
        <description><![CDATA[
		
		<h5><font face="新宋体">SUBSTRING</font></h5>
<h5>语法</h5>
<p><code><font face="新宋体">SUBSTRING <strong>( </strong><em>expression </em><strong>,</strong> <em>start </em><strong>,</strong> <em>length </em><strong>) </strong></font></code></p>
<h5>参数</h5>
<p><em>expression</em></p>
<p class="indent">是字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。</p>
<p><em>start</em></p>
<p class="indent">是一个整数，指定子串的开始位置。</p>
<p class="indent"><font face="新宋体" color="#ff0000"><u>expression 的起始索引从1开始，当写成0或小于0的数字时系统用空格填充相应位置</u></font></p>
<p><em>length</em></p>
<p class="indent">是一个整数，指定子串的长度（要返回的字符数或字节数）。</p>
<h1><a name="_charindex"></a><font size="2">CHARINDEX</font></h1>
<p>返回字符串中指定表达式的起始位置。<em> </em></p>
<h5>语法</h5>
<p><code><font face="新宋体">CHARINDEX <strong>( </strong><em>expression1 </em><strong>,</strong> <em>expression2</em> [ <strong>,</strong> <em>start_location </em>] <strong>) </strong></font></code></p>
<h5>参数</h5>
<p><em>expression1</em></p>
<p class="indent">一个表达式，其中包含要寻找的字符的次序。<em>expression1</em> 是一个短字符数据类型分类的表达式。</p>
<p><em>expression2</em></p>
<p class="indent">一个表达式，通常是一个用于搜索指定序列的列。<em>expression2 </em>属于字符串数据类型分类。</p>
<p><em>start_location</em></p>
<p class="indent">在 <em>expression2</em> 中搜索 <em>expression1</em> 时的起始字符位置。如果没有给定 <em>start_location</em>，而是一个负数或零，则将从 <em>expression2</em> 的起始位置开始搜索。</p>
<p class="indent"><font color="#ff0000">起始位置从1开始</font></p>
<h5>返回类型</h5>
<p><strong>int</strong></p> <a href="http://hi.baidu.com/liulogo/blog/item/7e3f70ed22f6b64b79f0553f.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/liulogo/blog/category/Sqlserver">Sqlserver</a>&nbsp;<a href="http://hi.baidu.com/liulogo/blog/item/7e3f70ed22f6b64b79f0553f.html#comment">查看评论</a>]]></description>
        <pubDate>2008-03-07  11:21</pubDate>
        <category><![CDATA[Sqlserver]]></category>
        <author><![CDATA[liulogo]]></author>
		<guid>http://hi.baidu.com/liulogo/blog/item/7e3f70ed22f6b64b79f0553f.html</guid>
</item>

<item>
        <title><![CDATA[SQLServer2K远程连接问题解决方案（转载自飞狐小屋）]]></title>
        <link><![CDATA[http://hi.baidu.com/liulogo/blog/item/7c9082239487f54a935807f8.html]]></link>
        <description><![CDATA[
		
		<font size="2">由于特定需求，最近实验室需要远程连接外地的sql server 2000服务器，最开始怎么连也连不上，出现了很多问题，但是在今天上午，借用实验室的测试条件（一个公网IP，两个教育网静态IP），终于调试通过，也算是完成了老师的任务，在这里写下自己的心得，参考了很多网上的文章和论坛里的问题，希望对有此需要的有帮助。不完善之处，也请留言。废话少说，进入主题。<br>
步骤：<br>
一 看ping 服务器IP能否ping通。<br>
&nbsp;&nbsp;  这个实际上是看和远程sql server 2000服务器的物理连接是否存在。如果不行，请检查网络，查看配置，当然得确保远程sql server 2000服务器的IP拼写正确。 </font>
<p><font size="2">二 在Dos或命令行下输入telnet 服务器IP 端口，看能否连通。<br>
如telnet 202.114.100.100 1433<br>
通常端口值是1433，因为1433是sql server 2000的对于Tcp/IP的默认侦听端口。如果有问题，通常这一步会出问题。通常的提示是&ldquo;……无法打开连接,连接失败&quot;。<br>
如果这一步有问题，应该检查以下选项。<br>
&nbsp;&nbsp;  1 检查远程服务器是否启动了sql server 2000服务。如果没有，则启动。<br>
&nbsp;&nbsp;  2 检查服务器端有没启用Tcp/IP协议，因为远程连接（通过因特网）需要靠这个协议。检查方法是，在服务器上打开 开始菜单-&gt;程序-&gt;Microsoft SQL Server-&gt;服务器网络实用工具，看启用的协议里是否有tcp/ip协议，如果没有，则启用它。<br>
&nbsp;&nbsp;  3 检查服务器的tcp/ip端口是否配置为1433端口。仍然在服务器网络实用工具里查看启用协议里面的tcp/ip的属性，确保默认端口为1433，并且隐藏服务器复选框没有勾上。<br>
&nbsp;&nbsp;&nbsp;&nbsp;  事实上，如果默认端口被修改，也是可以的，但是在客户端做telnet测试时，写服务器端口号时必须与服务器配置的端口号保持一致。如果隐藏服务器复选框被勾选，则意味着客户端无法通过枚举服务器来看到这台服务器，起到了保护的作用，但不影响连接，但是Tcp/ip协议的默认端口将被隐式修改为2433，在客户端连接时必须作相应的改变。<br>
&nbsp;&nbsp;&nbsp;&nbsp;  4 如果服务器端操作系统打过sp2补丁，则要对windows防火墙作一定的配置，要对它开放1433端口，通常在测试时可以直接关掉windows防火墙（其他的防火墙也关掉最好）。<br>
  5 检查服务器是否在1433端口侦听。如果服务器没有在tcp连接的1433端口侦听，则是连接不上的。检查方法是在服务器的dos或命令行下面输入 <br>
 netstat -a -n 或者是netstat -an，在结果列表里看是否有类似 tcp&nbsp;&nbsp;  127.0.0.1 1433&nbsp;&nbsp;  listening 的项。如果没有，则通常需要给sql server 2000打上至少sp3的补丁。其实在服务器端启动查询分析器，输入 select @@version 执行后可以看到版本号，版本号在8.0.2039以下的都需要打补丁。<br>
&nbsp;&nbsp;&nbsp;  如果以上都没问题，这时你再做telnet 服务器ip 1433 测试，将会看到屏幕一闪之后光标在左上角不停闪动。恭喜你，你马上可以开始在企业管理器或查询分析器连接了。 </font></p>
<p><font size="2">三 检查客户端设置<br>
&nbsp;&nbsp;&nbsp;  程序-&gt;Microsoft SQL Server -&gt; 客户端网络使用工具。像在服务器网络实用工具里一样，确保客户端tcp/ip协议启用，并且默认端口为1433（或其他端口，与服务器端保持一致就行）。 </font></p>
<p><font size="2">四 在企业管理器里或查询那分析器连接测试<br>
&nbsp;&nbsp;  企业管理器-&gt;右键SQlserver组-&gt;新建sqlserver注册-&gt;下一步-&gt;写入远程IP-&gt;下一步-&gt;选Sqlserver登陆-&gt;下一步-&gt;写入登陆名与密码（sa,password）-&gt;下一步-&gt;下一步-&gt;完成<br>
&nbsp;&nbsp;  查询分析器-&gt;文件-&gt;连接-&gt;写入远程IP-&gt;写入登录名和密码（sa,password）-&gt;确定<br>
&nbsp;&nbsp;  通常建议在查询分析器里做，因为默认情况下，通过企业管理器注册另外一台SQL Server的超时设置是4秒，而查询分析器是15秒。<br>
&nbsp;&nbsp;  修改默认连接超时的方法：<br>
&nbsp;&nbsp;&nbsp;&nbsp;  企业管理器-&gt;工具-&gt;选项-&gt;在弹出的&quot;SQL Server企业管理器属性&quot;窗口中，点击&quot;高级&quot;选项卡-&gt;连接设置-&gt;在 登录超时（秒） 后面的框里输入一个较大的数字<br>
&nbsp;&nbsp;&nbsp;&nbsp;  查询分析器-&gt;工具-&gt;选项-&gt;连接-&gt;在 登录超时（秒） 后面的框里输入一个较大的数字<br>
&nbsp;&nbsp;&nbsp;&nbsp;  通常就可以连通了，如果提示错误，则进入下一步。 </font></p>
<p><font size="2">五  错误产生的原因通常是由于SQL Server使用了&quot;仅 Windows&quot;的身份验证方式，因此用户无法使用SQL Server的登录帐户（如 sa ）进行连接。解决方法如下所示：<br>
  　1 在服务器端使用企业管理器，并且选择&quot;使用 Windows 身份验证&quot;连接上 SQL Server。<br>
　　2 展开&quot;SQL Server组&quot;，鼠标右键点击SQL Server服务器的名称，选择&quot;属性&quot;，再选择&quot;安全性&quot;选项卡。<br>
　　3 在&quot;身份验证&quot;下，选择&quot;SQL Server和 Windows &quot;。<br>
　　4 重新启动SQL Server服务。（在dos或命令行下面net stop mssqlserver停止服务，net start mssqlserver启动服务，也是一种快捷的方法）。 </font></p>
<p><font size="2">附注：在连接本地服务器时，通常使用的是命名管道协议（在服务器网络实用工具里可以看到启用的协议有这个），默认端口是445，因此在本地能连通是不能说明什么问题的，连接远程服务器是完全不同的协议）</font></p>
<p> </p>
<p><font size="2">转载自<a href="http://jkflyfox.spaces.live.com/blog/cns!C936FCDDF997BA5F!169.entry">http://jkflyfox.spaces.live.com/blog/cns!C936FCDDF997BA5F!169.entry</a></font></p> <a href="http://hi.baidu.com/liulogo/blog/item/7c9082239487f54a935807f8.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/liulogo/blog/category/Sqlserver">Sqlserver</a>&nbsp;<a href="http://hi.baidu.com/liulogo/blog/item/7c9082239487f54a935807f8.html#comment">查看评论</a>]]></description>
        <pubDate>2008-02-28  12:49</pubDate>
        <category><![CDATA[Sqlserver]]></category>
        <author><![CDATA[liulogo]]></author>
		<guid>http://hi.baidu.com/liulogo/blog/item/7c9082239487f54a935807f8.html</guid>
</item>

<item>
        <title><![CDATA[清楚SQLSERVER表中的重复记录]]></title>
        <link><![CDATA[http://hi.baidu.com/liulogo/blog/item/50fc87d7e159d3d9a044df27.html]]></link>
        <description><![CDATA[
		
		<p>当SQLServer设计表的时候没有建组合字段唯一约束，以后需要增加这一约束时，却发现表里已经有了很多重复记录了。<br>
<br>
请看看我用的去掉SQLServer表里组合字段重复的记录方法：<br>
<br>
假设原始表名为source_table,字段名1为field_name1,字段名2为field_name2。<br>
<br>
（当然稍加修改也可以用到三个及以上组合字段重复的情况） <br>
<br>
第一步: 生成组合字段重复的临时表source_dup_simple<br>
select field_name1,field_name2,count(0) as num into source_dup_simple<br>
from source_table<br>
group by field_name1,field_name2 having count(0)&gt;1<br>
<br>
<br>
第二步: 生成组合字段重复的主表里<strong>完整记录</strong>的临时表source_table_dup<br>
select t1.* into source_table_dup<br>
from source_table t1,source_dup_simple t2<br>
where t1.field_name1=t2.field_name1 and t1.field_name2=t2.field_name2<br>
<br>
第三步: 删去source_table_dup里的全部重复记录 <br>
delete from source_table_dup<br>
where convert(varchar,field_name1)+convert(varchar,field_name2) in <br>
(select convert(varchar,field_name1)+convert(varchar,field_name2) <br>
&nbsp;&nbsp;  from source_dup_simple)<br>
&nbsp;&nbsp;&nbsp;&nbsp;  <br>
第四步: 生成有序列号的重复组合字段记录表source_table_dup_2 <br>
select IDENTITY(int,1,1) as rowid,t1.* into source_table_dup_2<br>
from source_table_dup t1<br>
order by field_name1,field_name2,date_field_name<br>
<br>
说明：用自动增长序列号IDENTITY(int,1,1)生成唯一的行号字段rowid<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  这里是按字段field_name1,field_name2,date_field_name排序，<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <u>以方便后面删除最新还是最旧时间的重复记录<br>
</u>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  当然date_field_name字段可以替换成你想要排序的字段，并可用desc选项<br>
<br>
第五步: 删去有序列号重复组合字段记录表source_table_dup_2里面的重复记录<br>
delete from source_table_dup_2<br>
where rowid in (select min(rowid) from source_table_dup_2<br>
group by field_name1,field_name2 having count(*)&gt;1)<br>
<br>
（所影响的行数为 5586 行）<br>
<br>
delete from source_table_dup_2<br>
where rowid in (select min(rowid) from source_table_dup_2<br>
group by field_name1,field_name2 having count(*)&gt;1)<br>
（所影响的行数为 1108 行）<br>
<br>
...... ......<br>
<br>
delete from source_table_dup_2<br>
where rowid in (select min(rowid) from source_table_dup_2<br>
group by field_name1,field_name2 having count(*)&gt;1)<br>
（所影响的行数为 0 行）<br>
<br>
注意：上面这条删除的SQL要执行一到多次，因为组合字段重复记录可能一条以上，<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  一直到它（所影响的行数为 0 行）才算彻底删除干净重复记录。<br>
<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  我这里是保留重复记录里时间字段date_field_name最新的记录。<br>
<br>
第六步: 把剩下的没有重复的记录插回原始表 <br>
insert into source_table(field_name1,field_name2,.....)<br>
select field_name1,field_name2,...... from source_table_dup_2</p>
<p>简单方法：</p>
<p><span class="javascript" ><font color="#993300" size="2">1、建立一个与当前表结构完全一致临时表<br>
2、用distinct关键字，将当前表中数据导入到临时表<br>
3、删除当前表数据<br>
4、从临时表将数据存回当前表</font></span>
<p><font face="verdana, arial, helvetica" size="2"><span class="javascript" ><strong>begin tran<br>
select distinct * into #t from YOUR_TABLE<br>
trancate table YOUR_TABLE<br>
insert into YOUR_TABLE<br>
select * from #t<br>
if @@error&lt;&gt;0 <br>
begin<br>
rollback tran <br>
drop table #t<br>
return<br>
end<br>
commit tran<br>
drop table #t</strong></span></font></p>
<p> </p>
<p><font face="verdana, arial, helvetica" size="2"><span class="javascript" ><strong>以上内容均转自网络</strong></span></font></p>
</p> <a href="http://hi.baidu.com/liulogo/blog/item/50fc87d7e159d3d9a044df27.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/liulogo/blog/category/Sqlserver">Sqlserver</a>&nbsp;<a href="http://hi.baidu.com/liulogo/blog/item/50fc87d7e159d3d9a044df27.html#comment">查看评论</a>]]></description>
        <pubDate>2008-01-17  13:31</pubDate>
        <category><![CDATA[Sqlserver]]></category>
        <author><![CDATA[liulogo]]></author>
		<guid>http://hi.baidu.com/liulogo/blog/item/50fc87d7e159d3d9a044df27.html</guid>
</item>


</channel>
</rss>