<?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>博客园-IT民工(小赖)</title><link>http://www.cnblogs.com/GavinCome/</link><description>只有想不到，没有做不到!
Anything is possible!(专注.NET)</description><language>zh-cn</language><lastBuildDate>Sun, 07 Sep 2008 20:41:56 GMT</lastBuildDate><pubDate>Sun, 07 Sep 2008 20:41:56 GMT</pubDate><ttl>60</ttl><item><title>windows2003 IIS 服务启动失败，提示‘另一个程序正在使用此文件，进程无法访问'，解决方法！</title><link>http://www.cnblogs.com/GavinCome/archive/2008/09/07/1285854.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Sat, 06 Sep 2008 16:11:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/09/07/1285854.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1285854.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/09/07/1285854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1285854.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1285854.html</trackback:ping><description><![CDATA[<div class="tit">windows2003 IIS 服务启动失败，提示&#8216;另一个程序正在使用此文件，进程无法访问'，解决方法</div>
<table style="table-layout: fixed">
    <tr>
            <td>
            <div class="cnt" id="blog_text">
            <p>今天遇到关于IIS服务启动失败的问题：&#8220;IIS提示&#8216;另一个程序正在使用此文件，进程无法访问&#8217;&#8221;，现将问题解答如下。</p>
            <p>IIS中网站服务所占用的是80端口，出现这样的提示我们可以判定是端口冲突造成的，故，查看真正运行</p>
            <p>的占用80端口的程序，在&#8220;运行&#8221;输入&#8220;cmd&#8221;，进入命令行，输入netstat -abn &gt; c:/port80.txt</p>
            <p>如图：<br />
            <img style="width: 568px; height: 610px" height="610" alt="" src="http://images.cnblogs.com/cnblogs_com/gavincome/1231231.JPG" width="568" border="0" /></p>
            <p>此命令既是查询当前运行的程序所占用的端口状况，然后到c盘port80.txt文件中找到占用80端口的程序</p>
            <p>在这里我的讯雷。哈哈！</p>
            </div>
            </td>
        </tr>
    </table>
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1285854.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42134/" target="_blank">[新闻]JavaScript将成Silverlight的最大对手?</a>]]></description></item><item><title>关闭MessageBox</title><link>http://www.cnblogs.com/GavinCome/archive/2008/09/02/1282140.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Tue, 02 Sep 2008 08:30:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/09/02/1282140.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1282140.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/09/02/1282140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1282140.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1282140.html</trackback:ping><description><![CDATA[<span id="_193_2830_Open_Text"><span id="_293_2828_Open_Text"><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img id="_1660_1707_Open_Image" onclick="this.style.display='none'; document.getElementById('_1660_1707_Open_Text').style.display='none'; document.getElementById('_1660_1707_Closed_Image').style.display='inline'; document.getElementById('_1660_1707_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="_1660_1707_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1660_1707_Closed_Text').style.display='none'; document.getElementById('_1660_1707_Open_Image').style.display='inline'; document.getElementById('_1660_1707_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_1660_1707_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">/**/</span><span id="_1660_1707_Open_Text"><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;summary&gt;</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;应用程序的主入口点。<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">///</span><span style="color: #008000">&nbsp;</span><span style="color: #808080">&lt;/summary&gt;</span></span><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[STAThread]<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Main()&nbsp;<br />
<img id="_1746_1783_Open_Image" onclick="this.style.display='none'; document.getElementById('_1746_1783_Open_Text').style.display='none'; document.getElementById('_1746_1783_Closed_Image').style.display='inline'; document.getElementById('_1746_1783_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="_1746_1783_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1746_1783_Closed_Text').style.display='none'; document.getElementById('_1746_1783_Open_Image').style.display='inline'; document.getElementById('_1746_1783_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_1746_1783_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">...</span><span id="_1746_1783_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.Run(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Form1());<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;button1_Click(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;System.EventArgs&nbsp;e)<br />
<img id="_1852_1968_Open_Image" onclick="this.style.display='none'; document.getElementById('_1852_1968_Open_Text').style.display='none'; document.getElementById('_1852_1968_Closed_Image').style.display='inline'; document.getElementById('_1852_1968_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="_1852_1968_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_1852_1968_Closed_Text').style.display='none'; document.getElementById('_1852_1968_Open_Image').style.display='inline'; document.getElementById('_1852_1968_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_1852_1968_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">...</span><span id="_1852_1968_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StartKiller();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(</span><span style="color: #000000">"</span><span style="color: #000000">这里是MessageBox弹出的内容</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">MessageBox</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(</span><span style="color: #000000">"</span><span style="color: #000000">这里是跟随运行的窗口</span><span style="color: #000000">"</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">窗口</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;StartKiller()<br />
<img id="_2002_2136_Open_Image" onclick="this.style.display='none'; document.getElementById('_2002_2136_Open_Text').style.display='none'; document.getElementById('_2002_2136_Closed_Image').style.display='inline'; document.getElementById('_2002_2136_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="_2002_2136_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2002_2136_Closed_Text').style.display='none'; document.getElementById('_2002_2136_Open_Image').style.display='inline'; document.getElementById('_2002_2136_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_2002_2136_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">...</span><span id="_2002_2136_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Timer&nbsp;timer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Timer();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer.Interval&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10000</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">10秒启动</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer.Tick&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EventHandler(Timer_Tick);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timer.Start();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Timer_Tick(</span><span style="color: #0000ff">object</span><span style="color: #000000">&nbsp;sender,&nbsp;EventArgs&nbsp;e)<br />
<img id="_2195_2258_Open_Image" onclick="this.style.display='none'; document.getElementById('_2195_2258_Open_Text').style.display='none'; document.getElementById('_2195_2258_Closed_Image').style.display='inline'; document.getElementById('_2195_2258_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="_2195_2258_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2195_2258_Closed_Text').style.display='none'; document.getElementById('_2195_2258_Open_Image').style.display='inline'; document.getElementById('_2195_2258_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_2195_2258_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">...</span><span id="_2195_2258_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;KillMessageBox();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">停止计时器</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((Timer)sender).Stop();<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;KillMessageBox()<br />
<img id="_2295_2482_Open_Image" onclick="this.style.display='none'; document.getElementById('_2295_2482_Open_Text').style.display='none'; document.getElementById('_2295_2482_Closed_Image').style.display='inline'; document.getElementById('_2295_2482_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="_2295_2482_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2295_2482_Closed_Text').style.display='none'; document.getElementById('_2295_2482_Open_Image').style.display='inline'; document.getElementById('_2295_2482_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_2295_2482_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">...</span><span id="_2295_2482_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">查找MessageBox的弹出窗口,注意对应标题</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IntPtr&nbsp;ptr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;FindWindow(</span><span style="color: #0000ff">null</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">MessageBox</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/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">(ptr&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;IntPtr.Zero)<br />
<img id="_2403_2478_Open_Image" onclick="this.style.display='none'; document.getElementById('_2403_2478_Open_Text').style.display='none'; document.getElementById('_2403_2478_Closed_Image').style.display='inline'; document.getElementById('_2403_2478_Closed_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="_2403_2478_Closed_Image" style="display: none" onclick="this.style.display='none'; document.getElementById('_2403_2478_Closed_Text').style.display='none'; document.getElementById('_2403_2478_Open_Image').style.display='inline'; document.getElementById('_2403_2478_Open_Text').style.display='inline';" alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="_2403_2478_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">...</span><span id="_2403_2478_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/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: #008000">//</span><span style="color: #008000">查找到窗口则关闭</span><span style="color: #008000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/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;PostMessage(ptr,WM_CLOSE,IntPtr.Zero,IntPtr.Zero);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #000000">"</span><span style="color: #000000">user32.dll</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;EntryPoint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">FindWindow</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;CharSet</span><span style="color: #000000">=</span><span style="color: #000000">CharSet.Auto)]<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;IntPtr&nbsp;FindWindow(</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;lpClassName,&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;lpWindowName);&nbsp;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[DllImport(</span><span style="color: #000000">"</span><span style="color: #000000">user32.dll</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;CharSet</span><span style="color: #000000">=</span><span style="color: #000000">CharSet.Auto)]<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">extern</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;PostMessage(IntPtr&nbsp;hWnd,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;msg,&nbsp;IntPtr&nbsp;wParam,&nbsp;IntPtr&nbsp;lParam);<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" /><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">const</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;WM_CLOSE&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0x10</span><span style="color: #000000">;<br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span>
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1282140.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42133/" target="_blank">[新闻]没有谷歌就活不下去的四个网站</a>]]></description></item><item><title>Oracle 的十八般武艺 </title><link>http://www.cnblogs.com/GavinCome/archive/2008/08/11/1265438.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Mon, 11 Aug 2008 10:25:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/08/11/1265438.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1265438.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/08/11/1265438.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1265438.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1265438.html</trackback:ping><description><![CDATA[<div class="quote_div">ORACLE的简单介绍 <br />
ORACLE公司是一家提供综合技术产品、方案、服务的数据库公司 <br />
ORACLE数据库设计成可大量存储数据，快速查询数据，保证数据的安全和一致性， <br />
跨网络的分布式管理及客户-服务器的配置等。 <br />
ORACLE SQL语法符合ANSI 1986标准 <br />
SQL 和数据库交流的命令式语言 <br />
SQL*PLUS ORACLE的一种工具, 用来运行SQL和PL/SQL语句 <br />
PL/SQL ORACLE的过程化编程语言
<p>&nbsp;</p>
<p>一、选择行 <br />
1. 简单的SELECT 语句 <br />
SELECT [DISTINCT] {*,COLUMN [ALIAS], &#8230;&#8230;} FROM table_name; <br />
字段的非唯一的结果集 <br />
DISTINCT 字段名1 [ ,字段名2] <br />
数字类型字段名之间可以进行算术运算 <br />
+ - * / 等 <br />
例如: (字段名1*字段名2)/3 <br />
合并字段内容的连接字符 || <br />
字段名1 || 字段名2 <br />
字段可以有别名 <br />
SELECT 字段名1 [AS] '字段名1 解释' FROM table;</p>
<p>2. 处理NULL <br />
NULL 未定义，不可操作，什么都不是 <br />
NULL != 0 NULL!='空格' <br />
和NULL的任何运算都返回NULL <br />
ORACLE里未定义的变量值都为NULL <br />
NVL函数可把NULL转换成其它类型的符号 <br />
NVL(EXPR1, EXPR2)函数 <br />
解释: IF EXPR1=NULL RETURN EXPR2 <br />
ELSE RETURN EXPR1 <br />
编程技巧: NVL函数在多条件模糊查询的时候比较有用 <br />
nvl('+input_value+','0')='0' or filed_name like '%+input_value+%' <br />
NVL函数可返回多种数据类型: <br />
返回日期 NVL(start_date,'2002-02-01') <br />
返回字符串 NVL(title,'no title') <br />
返回数字 NVL(salary,1000)</p>
<p>3. 使用SQL*PLUS（1） <br />
登录SQL*PLUS的方法 <br />
用户名，密码，数据库连接字符串 <br />
数据库连接字符串可以用net8 easy configuration建立本地网络服务名配置， <br />
也可以手工编辑$ORACLE_HOME/network/admin/tnsnames.ora文件。 <br />
在UNIX系统下不要用 <br />
$sqlplus username/password@dbname <br />
这样别的用户用$ps命令能看出用户的密码 <br />
SQL&gt; desc table; 显示表结构 <br />
SQL&gt; select * from tab; 查看用户下所有的表 <br />
SQL&gt; set pause on; 可以使大量结果集在用户按&#8220;Enter&#8221;(回车)后翻页 <br />
SQL&gt; set pagesize 100; 设定SQL语句返回结果集一页的行数100, 默认值是14 <br />
SQL&gt; set linesize 100; 设定SQL语句返回结果集一行的宽度100, 默认值是80</p>
<p>3. 使用SQL*PLUS（2）SQL*PLUS里的编辑命令 <br />
最近一条SQL命令语句存在ORACLE内存（sql buffer）里,但SQL*PLUS命令却不会存进去。 <br />
SQL*PLUS里的编辑命令: <br />
A[PPEND] text 把text增加到当前行后面 <br />
C[HANGE] /old/new/ 把当前行old符号替换成new符号,new为空，删除old符号 <br />
CL[EAR] BUFF[ER] 从sql buffer里删除所有的行 <br />
DEL n 删除sql buffer里第n行 <br />
I[NPUT] text 在sql buffer后面插入text <br />
L[IST] n 显示sql buffer里第n行 <br />
n 使第n行为当前行 <br />
n text 第n行替换成text <br />
0 text 在第一行前面插入一行</p>
<p>3. 使用SQL*PLUS（3） SQL*PLUS里的文件命令: <br />
SAV[E] filename [REP[LACE] | APP[END] ] <br />
把sql buffer里的SQL命令存到OS下一个文件filename,默认的文件名后缀为.sql. <br />
REP[LACE]替换filename里的SQL命令 <br />
APP[END] 把sql buffer里的SQL命令添加到filename后 <br />
GET filename 从filename里把SQL命令读到sql buffer <br />
STA[RT] filename 运行上次保存到文件filename里的SQL命令 <br />
@filename 运行上次保存到文件filename里的SQL命令 <br />
EDIT 打开编辑窗口，编辑sql buffer里的SQL命令 <br />
EDIT filename 打开编辑窗口，编辑文件filename里的SQL命令 <br />
SPO[OL] filename [OFF | OUT] 把SQL命令结果输出到OS下一个文件filename OFF结束输出到文件, OUT结束输出到文件并打印文件 <br />
<br />
4. SQL*PLUS里规定字段的显示格式 <br />
规定数字的显示格式 <br />
SQL&gt;column 字段名 format 99999999999; <br />
SQL&gt;column 字段名 format 999,999,999,999; <br />
规定字符串的显示宽度 <br />
SQL&gt;column 字段名 format a数字 [word_wrapped]; <br />
说明: 一行只显示数字位的长度, 超过长度折行,加word_wrapped后, 单词不会折行 <br />
规定long字符的显示宽度 <br />
SQL&gt;set long 200; <br />
规定字段名的显示内容 <br />
SQL&gt; column 字段名 heading '字段名显示内容'; <br />
SQL&gt; set heading off; 查询时不显示字段名称 <br />
规定字段的对齐方向 <br />
SQL&gt; column 字段名 justify [left | right | center]; <br />
清除字段的格式 <br />
SQL&gt; column 字段名 clear; </p>
<p>5. SQL*PLUS里规定字段的显示格式例子 <br />
SQL&gt; column last_name heading 'Employee|Name' format a15; <br />
SQL&gt; column salary justify right format $99,999.99; <br />
SQL&gt; column start_date format a10 null 'Not Hired'; <br />
说明：如果start_date为null, 显示字符串'Not Hired'</p>
<p>6. 判断题(T/F) <br />
(1). SQL command are always held in sql buffer. [T] <br />
(2). SQL*PLUS command assit with query data. [T] <br />
SQL*PLUS命令只控制SELECT结果集的显示格式及控制文件.只有SQL命令能访问数据库.</p>
<p>二、限制选择行 <br />
1. 按指定的规则排序 <br />
SELECT expr FROM table [ORDER BY {column, expr} [ASC | DESC] ]; <br />
默认的排序是ASC升序(由小到大) <br />
还可以ORDER BY 字段名的位置[1]| [2] ASC| DESC; <br />
当字段名很复杂或者是算术表达式时用字段名显示的位置排序很方便.</p>
<p>2. 用WHERE限制选择行(1) <br />
比较操作符 = &gt; &lt; &gt;= &lt;= != &lt;&gt; ^= 与NULL比较不能用上面的比较操作符 ANY SOME ALL <br />
SQL操作符 BETWEEN &#8230; AND&#8230; IN LIKE IS NULL <br />
NOT BETWEEN &#8230; AND&#8230; NOT IN NOT LIKE IS NOT NULL <br />
逻辑操作符 AND OR NOT</p>
<p>3. 用WHERE限制选择行(2) <br />
比较顺序(可以用括号改变它们的顺序) <br />
(1). = &lt; &gt; &gt;= &lt;= in like is null between <br />
(2). and <br />
(3). Or <br />
注意: char和varchar2的比较规则有不同: <br />
char比较时会忽略字符串后面的空格. varchar2会计算字符串后面的空格</p>
<p>4. LIKE操作 <br />
% 零到任意多个字符 _ 一个字符 <br />
例如: 字段名 like 'M%' 字段名 like '%m%' 字段名 like 'job_' <br />
如果要找含下划线的字符, 要加反斜线 例如:字段名 like '%X/_Y%' escape '/'</p>
<p>5. 日期字段的比较 <br />
举例: <br />
日期字段 between to_date('2001-12-12','YYYY-MM-DD') and to_date('2002-02-01','YYYY-MM-DD') <br />
日期字段&gt; to_date('2001-12-12','YYYY-MM-DD') and日期字段&lt;= to_date('2002-02-01','YYYY-MM-DD'); </p>
<p>6. 不能用到索引的比较操作符 <br />
IS NULL <br />
IS NOT NULL <br />
LIKE '%m%'</p>
<p>三、单行函数 <br />
1. 数字函数 <br />
ABS 取绝对值 POWER 乘方 LN 10为底数取冪 <br />
SQRT 平方根 EXP e的n次乘方 LOG(m,n) m为底数n取冪 <br />
数学运算函数:ACOS ATAN ATAN2 COS COSH SIGN SIN SINH TAN TANH <br />
CEIL 大于或等于取整数 <br />
FLOOR 小于或等于取整数 <br />
MOD 取余数 <br />
ROUND(n,m) 按m的位数取四舍五入值如果round(日期): 中午12以后将是明天的日期. round(sysdate,'Y')是年的第一天 <br />
TRUNC(n,m) 按m的位数取前面的数值如果trunc(日期), 确省的是去掉时间</p>
<p>2. 字符函数 <br />
CHR 按数据库的字符集由数字返回字符 <br />
CONCAT(c1,c2) 把两个字符c1,c2组合成一个字符, 和 || 相同 <br />
REPLACE(c,s,r) 把字符c里出现s的字符替换成r, 返回新字符 <br />
SUBSTR(c,m,n) m大于0,字符c从前面m处开始取n位字符,m等于0和1一样, <br />
m小与0,字符c从后面m处开始取n位字符 <br />
TRANSLATE(c,f1,t1) 字符c按f1到t1的规则转换成新的字符串 <br />
INITCAP 字符首字母大写,其它字符小写 <br />
LOWER 字符全部小写 <br />
UPPER 字符全部大写 <br />
LTRIM(c1,c2) 去掉字符c1左边出现的字符c2 <br />
RTRIM(c1,c2) <br />
TRIM(c1,c2) 去掉字符c1左右两边的字符c2 <br />
LPAD(c1,n,c2) 字符c1按制定的位数n显示不足的位数用c2字符串替换左边的空位 <br />
RPAD(c1,n,c2)</p>
<p>3. 日期函数 <br />
ADD_MONTHS(d,n) 日期值加n月 <br />
LAST_DAY(d) 返回当月的最后一天的日期 <br />
MONTHS_BETWEEN(d1,d2) 两个日期值间的月份,d1NEXT_DAY(d) 返回日期值下一天的日期 <br />
SYSDATE 当前的系统时间 <br />
DUAL是SYS用户下一个空表，它只有一个字段dummy <br />
4. 转换函数(1) <br />
TO_CHAR(date,'日期显示格式') <br />
TO_CHAR(number) 用于显示或报表的格式对齐 <br />
TO_DATE(char,'日期显示格式') <br />
TO_LOB 把long字段转换成lob字段 <br />
TO_NUMBER(char) 用于计算或者比较大小 </p>
<p>4. 转换函数(2) <br />
to_date里日期显示格式 <br />
YYYY 年 YEAR YYY YY Y <br />
Q 季度 <br />
MM 月 MONTH MON <br />
W 星期 (week of month) WW, IW (week of year) <br />
(说明：周计是按ISO标准,从1月1日的星期数到后面七天为一周,不一定是从周一到周日) <br />
DD 日 DAY DY <br />
HH24 小时 HH12 HH <br />
MI 分钟 <br />
SS 秒 <br />
如果想固定日期的显示格式可以在数据库的参数文件initorasid.ora里新写一行参数 NLS_DATE_FORMAT=yyyy-mm-dd hh24:mi:ss可以在UNIX环境变量或者NT的注册表里的设置 NLS_DATE_FORMAT=yyyy-mm-dd hh24:mi:ss</p>
<p>4. 转换函数(3) <br />
如果想固定日期的显示格式可以用alter session命令改变 <br />
SQL&gt; alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; <br />
它的作用顺序如下: <br />
initialization parameter <br />
Environment variable <br />
ALTER SESSION command</p>
<p>4. 转换函数 (4) <br />
to_char(number)里数字显示格式 <br />
9 数字位 <br />
0 数字前面补0 to_char(-1200,'00000.00') <br />
. 小数点的位置 <br />
, 标记位置的逗号 用在数字显示格式的左边 <br />
L 根据数据库字符集加货币符号 to_char(-1200,'L9999.99') <br />
B 把数字0显示为空格,用在数字显示格式的右边 <br />
<br />
MI 右边的负数标记 to_char(-1200,'9999.99MI') <br />
PR 括起来的负数 to_char(-1200,'9999.99PR') <br />
EEEE 用指数方式表示 to_char(-1200,'9999.99EEEE')</p>
<p>5. 输入字符,返回数字的函数 <br />
instr(c1,c2) 字符c2出现在c1的位置, 不出现, 返回0, 常用于模糊查询 <br />
length(c) 按数据库的字符集,算出字符c的长度,跟数据库的字符集有关, 一个汉字长度为1</p>
<p>6. 有逻辑比较的函数NVL(EXPR1, EXPR2)函数 <br />
解释: IF EXPR1=NULL RETURN EXPR2 <br />
ELSE RETURN EXPR1 <br />
DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数 <br />
解释: IF AA=V1 THEN RETURN R1 <br />
IF AA=V2 THEN RETURN R2 <br />
..&#8230; <br />
ELSE <br />
RETURN NULL <br />
举例: decode(id,1,'dept sale',2,'dept tech')</p>
<p>四、从多个表里选取数据记录 <br />
1. 数据表间的连接 <br />
简单的连接语法: <br />
SELECT 字段名1, 字段名2, &#8230;&#8230; FROM 表名1, [表名2, &#8230;&#8230;] <br />
WHERE 表名1.字段名 = 表名2. 字段名 [ AND &#8230;&#8230;] ; <br />
SELECT 字段名1, 字段名2, &#8230;&#8230; FROM 表名1, [表名2, &#8230;&#8230;] <br />
WHERE 表名1.字段名 = 表名2. 字段名(+) [ AND &#8230;&#8230;] ; <br />
有(+)号的字段位置自动补空值 </p>
<p>连接的分类: <br />
等于的连接 = <br />
不等于的连接 != BETWEEN &#8230; AND &#8230; IN 注意IN和OR不能一起用 <br />
外连接 有一个字段名(+) , 没有满足的条件补空值 <br />
自连接 同一个表自己跟自己连接 例如找重复记录</p>
<p>2. 数据表间的连接例子 <br />
删除table_name表里字段名email重复的记录: <br />
SQL&gt;delete from table_name t1 <br />
where t1.rowid &gt; <br />
(select min(rowid) from table_name t2 <br />
where t1.email = t2.email <br />
group by email <br />
having count(email) &gt; 1);</p>
<p>找到手机用户的服务区域: <br />
SQL&gt; select a.handphoneno,nvl(c.name,'null'),a.totalscore <br />
from topscore a,chargeoperator cc,chargeoperatorinfo c <br />
where substr(a.handphoneno,1,7)=cc.hpnohead(+) <br />
and cc.chargetype=c.chargetype(+) <br />
order by a.totalscore desc;</p>
<p>3. 数据表间的连接技巧 <br />
连接N个表, 需要N-1个连接操作 <br />
被连接的表最好建一个单字符的别名, 字段名前加上这个单字符的别名 <br />
BETWEEN .. AND.. 比用 &gt;= AND &lt;= 要好 <br />
连接操作的字段名上最好要有索引 <br />
连接操作的字段最好用整数数字类型 <br />
有外连接时, 不能用OR或IN的比较操作</p>
<p>4. 如何分析和执行SQL语句 <br />
写多表连接SQL语句时要知道它的分析执行计划的情况. <br />
Sys用户下运行@/ORACLE_HOME/sqlplus/admin/plustrce.sql <br />
产生plustrace角色 <br />
Sys用户下把此角色赋予一般用户 SQL&gt; grant plustrace to &amp;username; <br />
一般用户下运行@/ORACLE_HOME/rdbms/admin/utlxplan.sql <br />
产生plan_table <br />
SQL&gt; set time on; 说明：打开时间显示 <br />
SQL&gt; set autotrace on; 说明：打开自动分析统计，并显示SQL语句的运行结果 <br />
SQL&gt; set autotrace traceonly; 说明：打开自动分析统计，不显示SQL语句的运行结果 <br />
接下来你就运行测试SQL语句，看到其分析统计结果了。 <br />
一般来讲，我们的SQL语句应该避免大表的全表扫描。 <br />
SQL&gt; set autotrace off; 说明：关闭自动分析统计</p>
<p>五、集合函数 经常和group by一起使用 <br />
1. 集合函数列表 <br />
AVG (DISTINCT | ALL | N) 取平均值 <br />
COUNT (DISTINCT | ALL | N | expr | * ) 统计数量 <br />
MAX (DISTINCT | ALL | N) 取最大值 <br />
MIN (DISTINCT | ALL | N) 取最小值 <br />
SUM (DISTINCT | ALL | N) 取合计值 <br />
STDDEV (DISTINCT | ALL | N) 取偏差值,如果组里选择的内容都相同,结果为0 <br />
VARIANCE (DISTINCT | ALL | N) 取平方偏差值</p>
<p>2. 使用集合函数的语法 <br />
SELECT column, group_function FROM table <br />
WHERE condition GROUP BY group_by_expression <br />
HAVING group_condition ORDER BY column; <br />
<br />
3. 使用count时的注意事项 <br />
SELECT COUNT(*) FROM table; <br />
SELECT COUNT(常量) FROM table;</p>
<p>都是统计表中记录数量,如果没有PK后者要好一些 <br />
SELECT COUNT(all 字段名) FROM table; <br />
SELECT COUNT(字段名) FROM table;</p>
<p>不会统计为NULL的字段的数量 <br />
SUM,AVG时都会忽略为NULL的字段</p>
<p>4. 用group by时的限制条件 <br />
SELECT字段名不能随意, 要包含在GROUP BY的字段里 <br />
GROUP BY后ORDER BY时不能用位置符号和别名 <br />
限制GROUP BY的显示结果, 用HAVING条件 <br />
<br />
5. 例子 <br />
SQL&gt; select title,sum(salary) payroll from s_emp <br />
where title like 'VP%' group by title <br />
having sum(salary)&gt;5000 order by sum(salary) desc; <br />
<br />
找出某表里字段重复的记录数, 并显示 <br />
SQL&gt; select (duplicate field names) from table_name <br />
group by (list out fields) having count(*)&gt;1;</p>
<p>6. 判断题(T/F) <br />
(1) Group functions include nulls in calculations [F] <br />
(2) Using the having clause to exclude rows from a group calculation [F] <br />
解释: <br />
Group function 都是忽略NULL值的 如果您要计算NULL值, 用NVL函数 <br />
Where语句在Group By前把结果集排除在外Having语句在Group By后把结果集排除在外</p>
<p>7. 在SQL*PLUS里可使用的其它命令:</p>
<p>Ctrl^C 终止正在运行的SQL语句 <br />
remark /*...*/ -- 注释符号 <br />
HOST 可执行的操作系统下的命令 有些unix可以用 !</p>
<p>BREAK ON column_name SKIP n [ ON column_name SKIP n ] <br />
按字段的名称column_name分隔显示,更清晰,SKIP n 是在分隔处空行的数量n <br />
BREAK ON ROW SKIP n 每一行间隔都放n个空行</p>
<p>COMPUTE 集合运算符 OF 字段1 ON 字段2 按字段2对字段1进行集合运算 <br />
COMPUTE后面可以跟的集合运算符: <br />
SUM MINIMUM MAXIMUM AVG STD VARIANCE COUNT NUMBER</p>
<p>8.在SQL*PLUS里可使用的其它命令举例:(scott用户) <br />
<br />
BREAK ON REPORT <br />
COMPUTE SUM LABEL TOTAL OF SAL ON REPORT 在全部结果集后面算合计 <br />
select ename,sal from emp where job='SALESMAN'; <br />
<br />
COMPUTE AVG LABEL avg OF SAL ON REPORT 在全部结果集后面算平均值 <br />
/ 再次执行上次的sql语句 <br />
<br />
break on DEPTNO skip 2 on JOB skip 1 在BREAK字段结果集后面算合计 <br />
COMPUTE SUM OF SAL ON DEPTNO <br />
SELECT DEPTNO,JOB,ENAME,SAL FROM EMP ORDER BY DEPTNO,JOB; <br />
<br />
SQL&gt; CLEAR BREAKS; 清除设置的BREAK条件 <br />
SQL&gt; CLEAR COMPUTES; 清除设置的COMPUTE条件</p>
<p>六、子查询 <br />
1. 查询语句可以嵌套 <br />
例如: SELECT &#8230;&#8230; FROM (SELECT &#8230;&#8230; FROM表名1, [表名2, &#8230;&#8230;] WHERE 条件) WHERE 条件2; </p>
<p>2. 何处可用子查询? <br />
当查询条件是不确定的条件时 <br />
DML(insert, update,delete)语句里也可用子查询 <br />
HAVING里也可用子查询</p>
<p>3. 两个查询语句的结果可以做集合操作 <br />
例如: <br />
并集UNION(去掉重复记录) <br />
并集UNION ALL(不去掉重复记录) <br />
差集MINUS, <br />
交集INTERSECT </p>
<p>4. 子查询的注意事项 <br />
先执行括号里面的SQL语句，一层层到外面 <br />
内部查询只执行一次 <br />
如果里层的结果集返回多个，不能用= &gt; &lt; &gt;= &lt;=等比较符要用IN.</p>
<p>5. 子查询的例子(1) <br />
SQL&gt; select title,avg(salary) from s_emp <br />
group by title Having avg(salary) = <br />
(select min(avg(salary)) from s_emp <br />
group by title); <br />
找到最低平均工资的职位名称和工资</p>
<p>5. 子查询的例子(2) <br />
子查询可以用父查询里的表名 <br />
这条SQL语句是对的: <br />
SQL&gt;select cty_name from city where st_code in <br />
(select st_code from state where st_name='TENNESSEE' and <br />
city.cnt_code=state.cnt_code); <br />
说明：父查询调用子查询只执行一次．</p>
<p>6.取出结果集的80 到100的SQL语句 <br />
ORACLE处理每个结果集只有一个ROWNUM字段标明它的逻辑位置, <br />
并且只能 用ROWNUM&lt;100, 不能用ROWNUM&gt;80。 <br />
以下是经过分析后较好的两种ORACLE取得结果集80到100间的SQL语句( ID是唯一关键字的字段名 )： <br />
语句写法： <br />
SQL&gt;select * from ( <br />
( select rownum as numrow, c.* from ( <br />
select [field_name,...] from table_name where 条件1 order by 条件2) c) <br />
where numrow &gt; 80 and numrow &lt;= 100 ) <br />
order by 条件3; </p>
<p>七、在执行SQL语句时绑定变量 <br />
1. 接收和定义变量的SQL*PLUS命令 <br />
ACCEPT <br />
DEFINE UNDEFINE <br />
&amp; <br />
<br />
2. 绑定变量SQL语句的例子(1) <br />
SQL&gt; select id, last_name, salary from s_emp where dept_id = &amp;department_number; <br />
Enter value for department_number: 10 <br />
old 1: select id, last_name, salary from s_emp where dept_id=&amp;department_number; <br />
new 1: select id, last_name, salary from s_emp where dept_id= 10 <br />
SQL&gt; SET VERIFY OFF | ON;可以关闭和打开提示确认信息old 1和new 1的显示.</p>
<p>3. 绑定变量SQL语句的例子(2) <br />
SQL&gt; select id, last_name, salary <br />
from s_emp <br />
where title = '&amp;job_title'; <br />
Enter value for job_title: Stock Clerk</p>
<p>SQL&gt; select id, last_name, salary <br />
from s_emp <br />
where hiredate &gt;to_date( '&amp;start_hire_date','YYYY-MM-DD'); <br />
Enter value for start_hire_date : 2001-01-01</p>
<p>把绑定字符串和日期类型变量时，变量外面要加单引号 <br />
也可绑定变量来查询不同的字段名 <br />
输入变量值的时候不要加;等其它符号</p>
<p>4. ACCEPT的语法和例子 <br />
SQL&gt; ACCEPT variable [datatype] [FORMAT] [PROMPT text] [HIDE] <br />
说明： variable 指变量名 datatype 指变量类型，如number,char等 format 指变量显示格式 prompt text 可自定义弹出提示符的内容text hide 隐藏用户的输入符号 <br />
使用ACCEPT的例子： <br />
ACCEPT p_dname PROMPT 'Provide the department name: ' <br />
ACCEPT p_salary NUMBER PROMPT 'Salary amount: ' <br />
ACCEPT pswd CHAR PROMPT 'Password: ' HIDE <br />
ACCEPT low_date date format 'YYYY-MM-DD' PROMPT&#8220;Enter the low date range('YYYY-MM-DD'):&#8221;</p>
<p>4. DEFINE的语法和例子 <br />
SQL&gt; DEFINE variable = value <br />
说明： variable 指变量名 value 指变量值 <br />
定义好了变良值后, 执行绑定变量的SQL语句时不再提示输入变量 <br />
使用DEFINE的例子： <br />
SQL&gt; DEFINE dname = sales <br />
SQL&gt; DEFINE dname <br />
DEFINE dname = &#8220;sales&#8221; (CHAR) <br />
SQL&gt; select name from dept where lower(name)='&amp;dname'; <br />
NAME <br />
------------------------- <br />
sales <br />
sales <br />
SQL&gt; UNDEFINE dname <br />
SQL&gt; DEFINE dname <br />
Symbol dname is UNDEFINED</p>
<p>5. SQL*PLUS里传递参数到保存好的*.sql文件里 <br />
SQL&gt; @ /路径名/文件名 参数名1[,参数名2, &#8230;.] <br />
SQL&gt; start /路径名/文件名 参数名1[,参数名2, &#8230;.]</p>
<p>注意事项: <br />
一次最多只能获取9个&amp;变量, 变量名称只能是从&amp;1,&amp;2到&amp;9 <br />
变量名后不要加特殊的结束符号 <br />
如果在SQL*PLUS里要把&amp;符号保存在ORACLE数据库里,要修改sql*plus环境变量define <br />
SQL&gt; set define off;</p>
<p>八、概述数据模型和数据库设计 <br />
1. 系统开发的阶段: <br />
Strategy and Analysis <br />
Design <br />
Build and Document <br />
Transition <br />
Production</p>
<p>2. 数据模型 <br />
Model of system in client's mind <br />
Entity model of client's model <br />
Table model of entity model <br />
Tables on disk</p>
<p>3. 实体关系模型 (ERM)概念 <br />
ERM ( entity relationship modeling) <br />
实体 存有特定信息的目标和事件 例如: 客户,订单等 <br />
属性 描述实体的属性 例如: 姓名,电话号码等 <br />
关系 两个实体间的关系 例如:订单和产品等 <br />
实体关系模型图表里的约定 <br />
Dashed line (虚线) 可选参数 &#8220;may be&#8221; <br />
Solid line (实线) 必选参数 &#8220;must be&#8221; <br />
Crow's foot (多线) 程度参数 &#8220;one or more&#8221; <br />
Single line (单线) 程度参数 &#8220;one and only one&#8221;</p>
<p>4. 实体关系模型例子 <br />
每个订单都必须有一个或几个客户 <br />
每个客户可能是一个或几个订单的申请者</p>
<p>5. 实体关系的类型 <br />
1:1 一对一 例如: 的士和司机 <br />
M:1 多对一 例如: 乘客和飞机 <br />
1:M 一对多 例如: 员工和技能</p>
<p>6. 校正实体关系的原则 <br />
属性是单一值的, 不会有重复 <br />
属性必须依存于实体, 要有唯一标记 <br />
没有非唯一属性依赖于另一个非唯一的属性 <br />
7. 定义结构时的注意事项 <br />
减少数据冗余 <br />
减少完整性约束产生的问题 <br />
确认省略的实体,关系和属性</p>
<p>8. 完整性约束的要求 <br />
Primary key 主关键字 唯一非NULL <br />
Foreign key 外键 依赖于另一个Primary key,可能为NULL <br />
Column 字段名 符合定义的类型和长度 <br />
Constraint 约束条件 用户自定义的约束条件,要符合工作流要求 <br />
例如: 一个销售人员的提成不能超过它的基本工资 <br />
Candidate key 候选主关键字 多个字段名可组成候选主关键字, 其组合是唯一和非NULL的</p>
<p>9. 把实体关系图映射到关系数据库对象的方法 <br />
把简单实体映射到数据库里的表 <br />
把属性映射到数据库里的表的字段, 标明类型和注释 <br />
把唯一标记映射到数据库里的唯一关键字 <br />
把实体间的关系映射到数据库里的外键</p>
<p>其它的考虑: <br />
设计索引,使查询更快 <br />
建立视图,使信息有不同的呈现面, 减少复杂的SQL语句 <br />
计划存储空间的分配 <br />
重新定义完整性约束条件</p>
<p>10. 实体关系图里符号的含义 <br />
PK 唯一关键字的字段 <br />
FK 外键的字段 <br />
FK1,FK2 同一个表的两个不同的外键 <br />
FK1,FK1 两个字段共同组成一个外键 <br />
NN 非null字段 <br />
U 唯一字段 <br />
U1,U1 两个字段共同组成一个唯一字段</p>
<p>九、创建表 <br />
1. ORACLE常用的字段类型 <br />
ORACLE常用的字段类型有 <br />
VARCHAR2 (size) 可变长度的字符串, 必须规定长度 <br />
CHAR(size) 固定长度的字符串, 不规定长度默认值为１ <br />
NUMBER(p,s) 数字型p是位数总长度, s是小数的长度, 可存负数 <br />
最长38位. 不够位时会四舍五入. <br />
DATE 日期和时间类型 <br />
LOB 超长字符, 最大可达4G <br />
CLOB 超长文本字符串 <br />
BLOB 超长二进制字符串 <br />
BFILE 超长二进制字符串, 保存在数据库外的文件里是只读的.</p>
<p>数字字段类型位数及其四舍五入的结果 <br />
原始数值1234567.89 <br />
数字字段类型位数 存储的值 <br />
Number 1234567.89 <br />
Number(8) 12345678 <br />
Number(6) 错 <br />
Number(9,1) 1234567.9 <br />
Number(9,3) 错 <br />
Number(7,2) 错 <br />
Number(5,-2) 1234600 <br />
Number(5,-4) 1230000 <br />
Number(*,1) 1234567.9</p>
<p>2. 创建表时给字段加默认值 和约束条件 <br />
创建表时可以给字段加上默认值 <br />
例如 : 日期字段 DEFAULT SYSDATE <br />
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间 </p>
<p>创建表时可以给字段加上约束条件 <br />
例如: 非空 NOT NULL <br />
不允许重复 UNIQUE <br />
关键字 PRIMARY KEY <br />
按条件检查 CHECK (条件) <br />
外键 REFERENCES 表名(字段名) <br />
<br />
3. 创建表的例子 <br />
CREATE TABLE DEPT( <br />
EPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY, <br />
DNAME VARCHAR2(14), <br />
LOC VARCHAR2(13)) ;</p>
<p>CREATE TABLE region( <br />
ID number(2) NOT NULL PRIMARY KEY, <br />
postcode number(6) default '0' NOT NULL, <br />
areaname varchar2(30) default ' ' NOT NULL);</p>
<p>4. 创建表时的命名规则和注意事项 <br />
表名和字段名的命名规则：必须以字母开头，可以含符号A-Z,a-z,0-9,_,$,# <br />
大小写不区分 <br />
不用SQL里的保留字, 一定要用时可用双引号把字符串括起来． <br />
用和实体或属性相关的英文符号长度有一定的限制</p>
<p>注意事项: <br />
建表时可以用中文的字段名, 但最好还是用英文的字段名 <br />
创建表时要把较小的不为空的字段放在前面, 可能为空的字段放在后面 <br />
建表时如果有唯一关键字或者唯一的约束条件，建表时自动建了索引 <br />
一个表的最多字段个数也是有限制的，254个.</p>
<p>5. 约束名的命名规则和语法 <br />
约束名的命名规则约束名如果在建表的时候没有指明，系统命名规则是SYS_Cn(n是数字) <br />
约束名字符串的命名规则同于表和字段名的命名规则</p>
<p>6. 使用约束时的注意事项 <br />
约束里不能用系统函数,如SYSDATE和别的表的字段比较 <br />
可以用本表内字段的比较</p>
<p>想在事务处理后, 做约束的检查 <br />
SQL&gt; alter session set constraints deferred.</p>
<p>7. 由实体关系图到创建表的例子 s_dept <br />
前提条件:已有region表且含唯一关键字的字段id <br />
SQL&gt; CREATE TABLE s_dept <br />
(id NUMBER(7) <br />
CONSTRAINT s_dept_id_pk PRIMARY KEY, <br />
name VARCHAR2(25) <br />
CONSTRAINT s_dept_name_nn NOT NULL, <br />
region_id NUMBER(7) <br />
CONSTRAINT s_dept_region_id_fk REFERENCES region (id), <br />
CONSTRAINT s_dept_name_region_id_uk UNIQUE(name, region_id)); <br />
<br />
8. 较复杂的创建表例子 <br />
SQL&gt; CREATE TABLE s_emp <br />
(id NUMBER(7) <br />
CONSTRAINT s_emp_id_pk PRIMARY KEY, <br />
last_name VARCHAR2(25) <br />
CONSTRAINT s_emp_last_name_nn NOT NULL, <br />
first_name VARCHAR2(25), <br />
userid VARCHAR2(8) <br />
CONSTRAINT s_emp_userid_nn NOT NULL <br />
CONSTRAINT s_emp_userid_uk UNIQUE, <br />
start_date DATE DEFAULT SYSDATE, <br />
comments VARCHAR2(25), <br />
manager_id NUMBER(7), <br />
title VARCHAR2(25), <br />
dept_id NUMBER(7) <br />
CONSTRAINT s_emp_dept_id_fk REFERENCES s_dept(id), <br />
salary NUMBER(11,2), <br />
commission_pct NUMBER(4,2) <br />
CONSTRAINT s_emp_commission_pct_ck CHECK <br />
(commission_pct IN(10,12.5,15,17.5,20)));</p>
<p>8. 通过子查询建表 <br />
通过子查询建表的例子 <br />
SQL&gt;CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date <br />
FROM s_emp WHERE dept_id = 41; <br />
<br />
SQL&gt; CREATE TABLE A as select * from B where 1=2; <br />
只要表的结构.</p>
<p>10. 用子查询建表的注意事项 <br />
可以关连多个表及用集合函数生成新表,注意选择出来的字段必须有合法的字段名称,且不能重复。 <br />
用子查询方式建立的表，只有非空NOT NULL的约束条件能继承过来, 其它的约束条件和默认值都没有继承过来. <br />
根据需要，可以用alter table add constraint &#8230;&#8230;再建立其它的约束条件，如primary key等.</p>
<p>10. Foreign Key的可选参数ON DELETE CASCADE <br />
在创建Foreign Key时可以加可选参数: <br />
ON DELETE CASCADE它的含义是如果删除外键主表里的内容，子表里相关的内容将一起被删除. <br />
如果没有ON DELETE CASCADE参数，子表里有内容，父表里的主关键字记录不能被删除掉.</p>
<p>12. 如果数据库表里有不满足的记录存在，建立约束条件将不会成功.</p>
<p>13. 给表创建和删除同义词的例子 <br />
SQL&gt; CREATE SYNONYM d_sum <br />
2 FOR dept_sum_vu;</p>
<p>SQL&gt; CREATE PUBLIC SYNONYM s_dept <br />
2 FOR alice.s_dept;</p>
<p>SQL&gt; DROP SYNONYM s_dept;</p>
<p>十、ORACLE里的数据字典 <br />
1. 什么是数据字典ORACLE的数据字典是数据库的重要组成部分之一，它随着数据库 <br />
的产生而产生, 随着数据库的变化而变化, 体现为sys用户下所有的一些表和视图.</p>
<p>2. 数据字典里存了以下内容：用户信息 <br />
用户的权限信息 <br />
所有数据对象信息表的约束条件统计分析数据库的视图等 <br />
不能手工修改数据字典里的信息.</p>
<p>3. 常用的数据字典 <br />
Dictionary 存放所有数据表，视图，同义词名称和解释 <br />
Dict_columns 数据字典里字段名称的和解释 <br />
Dba_users 用户 Dba_tablespaces 表空间 <br />
Dba_data_files 数据库的文件 Dba_free_space 空闲表空间 <br />
Dba_rollback_segs 回滚段 <br />
User_objects 数据对象 User_constraints 约束条件 <br />
User_sequences 序列号 User_views 视图 <br />
User_indexes 索引 User_synonyms 同义词 <br />
Session_roles 用户的角色 User_role_privs 用户的角色权限 <br />
User_sys_privs 用户的系统权限 User_tab_privs 用户的表级权限 <br />
V$session 实时用户情况 V$sysstat 实时系统统计 <br />
V$sesstat 实时用户统计 V$sgastat 实时SGA使用 <br />
V$locked_object 实时锁 V$controlfile 控制文件 <br />
V$logfile 日志文件 V$parameter 参数文件</p>
<p>4. 数据字典的分类 <br />
数据字典四大类别 <br />
User_ 用户下所有数据库对象 <br />
All_ 用户权限范围内所有的数据库对象 <br />
Dba_ 所有的数据库对象 <br />
V$ 统计分析数据库的视图 赋于oem_monitor权限非DBA用户也可查询V$*视图</p>
<p>5. 查询数据字典 <br />
SQL&gt; select * from dictionary where instr(comments,'index')&gt;0; <br />
SQL&gt; select constraint_name, constraint_type, <br />
2 search_condition, r_constraint_name <br />
3 from user_constraints <br />
4 where table_name = &#8216;&amp;table_name';</p>
<p>十一. 控制数据 <br />
1 、INSERT(往数据表里插入记录的语句) <br />
SQL&gt; insert into 表名(字段名1, 字段名2, &#8230;&#8230;) values ( 值1, 值2, &#8230;&#8230;); <br />
SQL&gt; insert into 表名(字段名1, 字段名2, &#8230;&#8230;) select (字段名1, 字段名2, &#8230;&#8230;) <br />
from 另外的表名 where 条件; <br />
可以用&amp;标记变量的方法多次输入记录</p>
<p>快速插入数据的方法, 一般用于大于128M的数据转移 <br />
SQL&gt; insert /*+ append */ into 表名 <br />
select * from 另外的用户名 .另外的表名 WHERE 条件; <br />
SQL&gt; commit; </p>
<p>注意事项： <br />
用INSERT /*+ APPEND */ 的方法会对target_tablename产生级别为6的独占锁， <br />
如果运行此命令时还有对target_tablename的DML操作会排队在它后面, <br />
对OLTP系统在用的表操作是不合适的。</p>
<p>2. 插入字符串类型的字段的注意事项: <br />
字符串类型的字段值必须用单引号括起来, 例如: &#8217;GOOD DAY&#8217; <br />
如果字段值里包含单引号&#8217; 需要进行字符串转换, 我们把它替换成两个 单引号&#8217; &#8217; <br />
字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验 <br />
&#8216;&#8217; 标记是NULL, user 标明当前用户 <br />
日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒 <br />
用字符串转换成日期型函数TO_DATE(&#8216;2001-08-01&#8217;,&#8217;YYYY-MM-DD&#8217;) <br />
TO_DATE( )还有很多种日期格式, 可以参看ORACLE DOC. <br />
年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS <br />
INSERT时最大可操作的字符串长度小于等于4000个单字节, <br />
如果要插入更长的字符串, 请考虑字段用CLOB类型, 方法借用ORACLE里自带的DBMS_LOB程序包. </p>
<p>3、UPDATE (修改数据表里记录的语句) <br />
SQL&gt; UPDATE 表名 SET 字段名1=值1, 字段名2=值2, &#8230;&#8230; WHERE 条件; <br />
如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, <br />
最好在修改前进行非空校验; <br />
值N超过定义的长度会出错, 最好在插入前进行长度校验. <br />
新功能，可以修改子查询后的结果集 <br />
例子：SQL&gt; update (select * from s_dept) set id=50 where id=60;</p>
<p>4、DELETE (删除数据表里记录的语句) <br />
SQL&gt; DELETE FROM 表名 WHERE 条件; <br />
注意：删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些 被删除的数据块标成unused. <br />
如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间 <br />
SQL&gt; TRUNCATE TABLE 表名; <br />
此操作不可回退. <br />
<br />
5、 SQL语句的分类 <br />
数据定义语言(DDL)：create、alter、drop（创建、修改结构、删除）（其他：rename） <br />
数据操纵语言(DML)：insert、delete、select、update（增、删、查、改）（其他：truncate） <br />
数据控制语言(DCL)：grant、revoke（授权、回收）、set role <br />
事务控制：commit、rollback、savepoint（其他：lock table、set constraint(s)、set transaction） <br />
审计控制：audit、noaudit <br />
系统控制：alter system 会话控制：alter session <br />
其他语句：comment（添加注释）、explain plan、analyze、validate、call </p>
<p>6、ORACLE里事务控制 <br />
Commit 提交事务 <br />
Rollback 回退事务 <br />
Savepoint 设置断点, 在事务中标记位置, 事务结束, 断点释放 <br />
事务结束的情况遇到commit或者rollback遇到DDL和DCL语句发现错误，如死锁用户退出SQL*PLUS系统重启或崩溃</p>
<p>6、事物控制和SAVEPOINT命令</p>
<p>7. DML操作的注意事项 <br />
以上SQL语句对表都加上了行级锁, 确认完成后, 必须加上事物处理结束的命令COMMIT 才能正式生效, <br />
否则改变不一定写入数据库里.行级锁也未能得到释放. <br />
如果想撤回这些操作, 可以用命令 ROLLBACK 复原. <br />
在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围, <br />
应该把它限定在较小 (一万条记录) 范围内,. 否则ORACLE处理这个事物用到很大的回退段. <br />
程序响应慢甚至失去响应. 如果记录数上十万以上这些操作, <br />
可以把这些SQL语句分段分次完成, 其间加上COMMIT 确认事物处理. <br />
太过频繁的commit不好</p>
<p>十二、改变表和约束条件 <br />
1. 改变表的几种情况(1) 运行时会加表级锁 <br />
改变表的名称 <br />
SQL&gt; RENAME 表名1 TO 表名2; SQL&gt; ALTER TABLE 表名1 RENAME TO 表名2; <br />
在表的后面增加一个字段 <br />
SQL&gt; ALTER TABLE 表名 ADD 字段名 字段名描述 [ DEFAULT expr ][ NOT NULL ][ ,字段名2 &#8230;&#8230;]; <br />
修改表里字段的定义描述 <br />
SQL&gt; ALTER TABLE 表名 MODIFY 字段名1 字段名1描述 [ DEFAULT expr ][ NOT NULL ][ ,字段名2 &#8230;&#8230;]; 记录为空时，可以减少字段长度，改变字段类型修改DEFAULT值只作用于修改后的INSERT和UPDATE的记录修改NOT NULL约束只对现存含非空记录的字段起作用</p>
<p>1. 改变表的几种情况(2) 运行时会加表级锁 <br />
删除表里的某个字段 <br />
SQL&gt; ALTER TABLE 表名 DROP 字段名; <br />
给表里的字段加上/禁止/启用约束条件 <br />
SQL&gt; ALTER TABLE 表名 ADD | DISABLE | ENABLE CONSTRAINT 约束名 PRIMARY KEY (字段名1[,字段名2 &#8230;&#8230;]); <br />
SQL&gt; ALTER TABLE 表名 ADD | DISABLE | ENABLE CONSTRAINT 约束名 UNIQUE (字段名1[,字段名2 &#8230;&#8230;]); <br />
加唯一关键字或者唯一约束条件时自动建立索引 <br />
说明：禁止唯一关键字和唯一约束时索引仍然存在，可以被使用.</p>
<p>1. 改变表的几种情况(3) 运行时会加表级锁 <br />
删除表里的约束条件 <br />
SQL&gt; ALTER TABLE 表名 DROP CONSTRAINTS 约束名 [CASCADE]; <br />
会把约束相关的索引一起删除. CASCADE能同时删去外键的约束条件. <br />
把表放在或取出数据库的内存区 <br />
SQL&gt; ALTER TABLE 表名 CACHE; <br />
SQL&gt; ALTER TABLE 表名 NOCACHE; <br />
改变表存储的表空间 <br />
SQL&gt; ALTER TABLE 表名 MOVE TABLESPACE 表空间名 ; <br />
注意: 如果被转移表空间的表含有索引, 表转移后索引变得不可用. <br />
我们要删除旧索引,建立新索引</p>
<p>2. 删除表及表里的数据 <br />
删除表 <br />
SQL&gt; DROP TABLE 表名 [CASCADE CONSTRAINTS]; <br />
清空表里的记录 <br />
SQL&gt; TRUNCATE TABLE 表名; <br />
按时间清空日志表里的记录，使用重新命名的方法(应用程序可能有短暂出错, 可以选择在不繁忙的时间执行) <br />
按原来表A的建表语句创建新表A1, <br />
把表A重命名为A2（如果表A上有较频繁的DML操作,会对表加上行级锁，重命名过程用递归的方式循环做，直到DML操作结束，命名成功). <br />
把创建新表A1重命名为A <br />
历史记录表A2备份或删除</p>
<p>3. 删除表后应该注意的问题 <br />
删除表后把表里的索引一起删去. <br />
删除表后会结束基于它的悬而未决的事物 <br />
删除表后根据表创建的views,synonym,stored procedure,stored function依然存在，但views,synonym变成非法的. 需要手工找出它们并删除. <br />
如果用了CASCADE CONSTRAINTS会把与它相关的约束一起删除 <br />
此操作不可回退</p>
<p>4. 给表加注释 <br />
加注释的语法 <br />
SQL&gt; COMMENT ON TABLE 表名 | COLUMN表名.字段名 IS &#8216;text&#8216; <br />
加注释的例子 <br />
SQL&gt; comment on table s_emp is &#8216;Enployee information&#8216;; <br />
SQL&gt; comment on column s_emp.last_name is &#8216;&#8216;; <br />
关于注释的数据库字典 <br />
ALL_COL_COMMENTS <br />
USER_COL_COMMENTS <br />
ALL_TAB_COMMENTS <br />
USER_TAB_COMMENTS</p>
<p>十三、创建序列号 <br />
1. 创建序列号里各参数的解释 <br />
SQL&gt; CREATE SEQUENCE name [INCREMENT BY n] <br />
[START WITH n] [{MAXVALUE n | NOMAXVALUE}] <br />
[{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] <br />
[{CACHE n | NOCACHE}] <br />
INCREMENT BY n 一次增长n 个数字 <br />
NOMAXVALUE 缺省值10E+27 <br />
NOMINVALUE 缺省值1 <br />
NOCYCLE 不循环, 常用于唯一关键字 <br />
CACHE n 在内存里缓存n个序列,出错回退时会丢失 <br />
oracle8i里默认的n是20</p>
<p>序列号的名称一般可以采用&#8220;表名_字段名&#8221;的命名规则</p>
<p>2. 插入自动增长序列号字段的方法 <br />
INSERT时如果要用到从1开始自动增长的数字做唯一关键字, 应该先建立一个序列号. <br />
CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 MAXVALUE 99999 NOCYCLE NOCACHE; <br />
其中最大的值按字段的长度来定,比如定义的自动增长的序列NUMBER(6) , 最大值为999999 <br />
INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL <br />
例子: SQL&gt; insert into s_dept(id, name, region_id) values (s_dept_id.nextval, 'finance', 2); <br />
1 row created. <br />
只有运行了序列号的名称. nextval后序列号的名称. currval 才有效才有值.</p>
<p>3. 查询序列号的情况 <br />
SQL&gt; select sequence_name, min_value, max_value, increment_by, last_number from user_sequences; <br />
其中last_number指的是序列号的下一个值.</p>
<p>4. 改变序列号 <br />
SQL&gt; ALTER SEQUENCE sequence [INCREMENT BY n] [{MAXVALUE n | NOMAXVALUE}] <br />
[{MINVALUE n | NOMINVALUE}] <br />
[{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]; <br />
注意: 不能改变它的起始值 <br />
如果要改变序列的起始值, 先把序列号删除掉, 再新建一个. <br />
<br />
5. 删除序列号 <br />
SQL&gt;DROP SEQUENCE sequence;</p>
<p>6. 不能用序列号的nextval和currval的地方</p>
<p>视图的查询 <br />
有distinct的查询 <br />
有group by,having,order by的查询 <br />
有子查询的查询 <br />
表里的缺省值</p>
<p>十四、创建视图 <br />
1. 视图的概念和优点 <br />
视图是基于一个或多个表及视图的一些查询语句, 它象显示数据的视窗, 它本身是不存储数据的. <br />
<br />
视图可以限制数据库的访问, 更好的控制权限 <br />
使用户使用简单的查询语句 <br />
数据的非依赖性 <br />
同一数据的不同表现形式</p>
<p>2. 创建视图的语法 <br />
SQL&gt; CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view[(alias[, alias]...)] <br />
AS subquery <br />
[WITH CHECK OPTION [CONSTRAINT constraint]] <br />
[WITH READ ONLY] <br />
参数解释: <br />
FORCE 表不存在时,视图仍然可以创建成功 <br />
WITH CHECK OPTION 只有符合视图定义的记录才能被插入或修改 <br />
WITH READ ONLY 不允许DML操作</p>
<p>Oracle8i以后创建视图可以用order by</p>
<p>3. 创建修改视图的例子 <br />
SQL&gt; CREATE OR REPLACE VIEW salvu41 AS SELECT id, first_name FIRST, <br />
last_name LAST, salary MONTHLY_SALARY <br />
FROM s_emp WHERE dept_id = 41; <br />
SQL&gt; CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal) AS SELECT d.name, MIN(e.salary), MAX(e.salary), AVG(e.salary) FROM s_emp e, s_dept d WHERE e.dept_id = d.id GROUP BY d.name; <br />
注意: 如果用select * from table_name创建的视图 <br />
table_name的结构改变后 view要重建或compile后才能显示新的字段内容</p>
<p>4. 查询视图的数据字典 <br />
SQL&gt; set long 1600; <br />
SQL&gt; select view_name,text from user_views; <br />
说明: 可以根据视图text_length来设置set long 数字; <br />
User_updatable_columns视图能查询视图里能被修改的字段</p>
<p>5. 简单和复杂的视图对比 <br />
特 性 简单视图 复杂视图 <br />
表的数量 一个 多个 <br />
有函数吗? 没有 有 <br />
有分组操作吗? 没有 有 <br />
有基于视图的DML操作吗? 有 没有 </p>
<p>6. 在视图上可以用DML命令吗? <br />
可以, 但有一定的限制条件 <br />
没有下面的情况, 可以删除view里的记录. group function, group by, distinct <br />
没有上面和下面的情况, 可以修改view里的记录. 字段表达式, <br />
例如: salary*12 含rownum的view <br />
没有上面两种情况, 且view里含基表里所有非空字段的情况, 可以往view里插入记录. <br />
<br />
7. 在视图里使用 WITH CHECK OPTION约束条件 <br />
SQL&gt; create or replace view empvu41 <br />
as select * from s_emp where dept_id = 41 <br />
with check option constraint empvu41_ck; <br />
如果运行下面命令会出错ora-01402 <br />
SQL&gt; update empvu41 set dept_id=42 where id=16; <br />
原因: 视图empvu41里规定只能看部门号为41的记录 修改后会把记录排除在视图empvu41以外 <br />
与它的约束条件冲突</p>
<p>8. 删除视图 <br />
SQL&gt; DROP VIEW view_name;</p>
<p>十五、创建索引</p>
<p>1.索引的概念 <br />
索引是数据库里的一种数据对象 <br />
它利用B*树, hash, bitmap结构直接快速地访问数据 <br />
它和表是分开存放的两个实体 <br />
索引创建好了后, 由系统自动调用和管理</p>
<p>2. 什么时候创建索引? <br />
自动创建的索引:唯一关键字, 唯一的约束条件 <br />
手工需要创建的索引:大表查询时, sql语句where后经常用到的字段或字段组合 <br />
字段内容差别很大有大量NULL值表很大, 返回记录数较少 </p>
<p>3. B*树索引的结构 每个索引由字段值和指针或ROWID组成</p>
<p>4.创建索引的语法 <br />
CREATE INDEX 索引名 ON 表名 ( 字段1, [字段2, &#8230;&#8230;] ) TABLESPACE 表空间名; </p>
<p>5.创建索引的注意事项 <br />
创建索引时会加行级独占锁 <br />
一个表的索引最好不要超过三个 (特殊的大表除外) <br />
最好用单字段索引 <br />
索引最好和表分不同的表空间存放 <br />
结合SQL语句的分析执行情况, 也可以建立多字段的组合索引和基于函数的索引 <br />
大表的索引会占用很大的存储空间 <br />
不要建唯一的索引, 而应该加唯一的约束条件</p>
<p>6.查询索引的方法 <br />
查询数据字典user_indexes和user_ind_columns</p>
<p>例子: <br />
SQL&gt; SELECT ic.index_name, ic.column_name, <br />
2 ic.column_position col_pos,ix.uniqueness <br />
3 FROM user_indexes ix, user_ind_columns ic <br />
4 WHERE ic.index_name = ix.index_name <br />
5 AND ic.table_name = 'S_EMP';</p>
<p>注意: 数据字典里存放的字符都是大写的.</p>
<p>7. 不用索引的地方 <br />
表很小 <br />
where后不经常使用的比较字段 <br />
表被频繁修改 <br />
返回记录数很多 <br />
where后含IS NULL /IS NOT NULL/ like &#8216;%输入符%&#8217;等条件</p>
<p>8. 重建索引的语法 <br />
ALTER INDEX 索引名 REBUILD TABLESPACE 原来表空间名 NOLOGGING; <br />
定期重建索引可以减少索引的碎片, 更有效地使用表空间.</p>
<p>9. 删除索引 <br />
SQL&gt; drop index 索引名; <br />
SQL&gt; alter table 表名 drop constraint 约束名;</p>
<p>十六、控制用户访问 <br />
1.权限的类别 <br />
系统级权限: 针对整个系统操作的权限 <br />
如: 用户名/密码, 使用表空间的限额等 <br />
对象级权限: 针对某个具体object操作的权限 <br />
如: 针对某个表, 视图, 表的某个字段的select, update, delete权限 <br />
2. 查看当前数据库的用户信息 <br />
SQL&gt;select username,default_tablespace,temporary_tablespace from dba_users; <br />
查看在线用户信息 <br />
SQL&gt;select count(*) &#8220;number&#8221;,username &#8220;current username&#8221; from v$session group by username; 用户查看自己的缺省表空间SQL&gt;select username,default_tablespace from user_users;</p>
<p>3. 创建新用户 <br />
SQL&gt; create user username identified by password <br />
default tablespace tablespace_name temporary tablespace temp <br />
quota unlimited on tablespace_name <br />
quota 1k on system <br />
[quota 1k on other_tablespace_name &#8230;&#8230;] ; <br />
给用户赋权限 <br />
SQL&gt; grant connect, resource to username; <br />
查看当前用户的权限角色 <br />
SQL&gt; select * from user_role_privs; <br />
查看当前用户的系统权限和表级权限 <br />
SQL&gt; select * from user_sys_privs;SQL&gt; select * from user_tab_privs;</p>
<p>4 、常用的角色及其权限 <br />
CONNECT 8 privs 连上Oracle,做最基本操作 <br />
RESOURCE 8 privs 具有程序开发最的权限 <br />
DBA 114 privs 数据库管理员所有权限 <br />
EXP_FULL_DATABASE 5 privs 数据库整个备份输出的权限 <br />
IMP_FULL_DATABASE 64 privs 数据库整个备份输入的权限 <br />
查看角色明细的系统权限 <br />
SQL&gt; select * from role_sys_privs;</p>
<p>5、改变老用户 可以改变老用户的密码, 缺省表空间, 临时表空间, 空间限额. <br />
SQL&gt; alter user username identified by password <br />
default tablespace tablespace_name <br />
temporary tablespace temp <br />
quota unlimited on tablespace_name <br />
quota 1k on system <br />
[quota 1k on other_tablespace_name &#8230;&#8230;] ; <br />
撤销用户的角色或权限 <br />
SQL&gt; revoke role_name or priv_name from username; <br />
注意事项 <br />
撤消用户的角色dba时, 同时撤消了用户unlimited tablespace的系统权限, 切记要再次赋予resource角色给此用户 <br />
SQL&gt; grant resource to username;</p>
<p>6、删除用户 <br />
如果用户下没有任何数据对象 <br />
SQL&gt; drop user username; <br />
如果用户下有数据对象 <br />
SQL&gt; drop user username cascade; <br />
注意事项 <br />
如果用户下有含clob,blob字段的表, 应该先删除这些表后,才能用cascade选项完全删除.</p>
<p>7、角色的概念和管理 <br />
角色是命名多个相关权限的组合. 能把它赋于其它的用户或角色我们能创建角色, 使权限管理更容易一些. </p>
<p>8、赋于系统的权限语法和例子 <br />
语法: <br />
SQL&gt; GRANT sys_priv TO {user|role|PUBLIC} [WITH ADMIN OPTION]; <br />
例子: <br />
SQL&gt; GRANT create session TO sue, rich; <br />
SQL&gt; GRANT create table To scott, manager;</p>
<p>注意: 如果用WITH ADMIN OPTION通过中间用户赋于的系统权限 中间用户删除后, 系统权限仍然存在.</p>
<p>9、赋于数据对象级的权限语法和例子 <br />
语法: <br />
SQL&gt; GRANT object_priv [(columns)] ON object TO {user|role|PUBLIC} [WITH GRANT OPTION]; <br />
例子: <br />
SQL&gt; GRANT select ON s_emp TO sue, rich; <br />
SQL&gt; GRANT update (name, region_id) <br />
ON s_dept TO scott, manager;</p>
<p>注意: 如果用WITH GRANT OPTION通过中间用户赋于的对象权限 中间用户删除后,对象权限就不存在了. </p>
<p>原文：<a href="http://www.cnblogs.com/Actuping/archive/2007/04/04/699878.html">http://www.cnblogs.com/Actuping/archive/2007/04/04/699878.html</a></p>
</div>
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1265438.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42132/" target="_blank">[新闻]Google 10周岁生日</a>]]></description></item><item><title>导出excel的另外一种方法 </title><link>http://www.cnblogs.com/GavinCome/archive/2008/08/11/1265285.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Mon, 11 Aug 2008 07:42:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/08/11/1265285.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1265285.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/08/11/1265285.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1265285.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1265285.html</trackback:ping><description><![CDATA[摘要: 据我现在所知excel有四种方法：1.自己写的excel接口，客户端不需要装excel，见灵感之源的blog:http://www.cnblogs.com/unruledboy/archive/2004/07/07/22093.aspx2.把web上的DataGrid直接导入到excelpublicvoidExportToExcel(System.Web.UI.Controlctl){boolCu&nbsp;&nbsp;<a href='http://www.cnblogs.com/GavinCome/archive/2008/08/11/1265285.html'>阅读全文</a><img src ="http://www.cnblogs.com/GavinCome/aggbug/1265285.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42132/" target="_blank">[新闻]Google 10周岁生日</a>]]></description></item><item><title>[转].NET 程序员十种必备工具 - 目录</title><link>http://www.cnblogs.com/GavinCome/archive/2008/08/04/1259782.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Mon, 04 Aug 2008 03:42:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/08/04/1259782.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1259782.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/08/04/1259782.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1259782.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1259782.html</trackback:ping><description><![CDATA[<p>从 MSDN 中看到这篇文章，觉得不错转了过来，对于我这样的.NET新手来说每个工具都是提高效率的好开始。将这十款软件的介绍重新格式化一下，方便以后查阅。以&#8220;.NET 程序员十种必备工具&#8221;开头的10篇文章都是从这篇文章中分离出来，每篇文章就不分别注明版权和出处了。</p>
<p>本文自发布以来已经增加了新信息。请参阅下面的编辑更新。<br />
<br />
除非您使用能够获得的最佳工具，否则您无法期望生成一流的应用程序。除了像 Visual Studio?.NET 这样的著名工具以外，还可以从 .NET 社区获得许多小型的、不太为人所知的工具。在本文中，我将向您介绍一些目前可以获得的、面向 .NET 开发的最佳免费工具。我将引导您完成一个有关如何使用其中每种工具的快速教程 — 一些工具在许多时候可以使您节约一分钟，而另一些工具则可能彻底改变您编写代码的方式。因为我要在本篇文章中介绍如此之多的不同工具，所以我无法详尽讨论其中每种工具，但您应该了解到有关每种工具的足够信息，以便判断哪些工具对您的项目有用。 </p>
本文讨论： <a name="top"></a>
<div class="blockquote"><a href="http://blog.csdn.net/zhumi/archive/2004/07/22/49118.aspx"><font color="#003366">用于编写单元测试的 NUnit</font></a><br />
<a href="http://blog.csdn.net/zhumi/archive/2004/07/22/49131.aspx"><font color="#003366">用于创建代码文档资料的 NDoc</font></a><br />
<a href="http://blog.csdn.net/zhumi/archive/2004/07/22/49134.aspx"><font color="#003366">用于生成解决方案的 NAnt</font></a><br />
<a href="http://blog.csdn.net/zhumi/archive/2004/07/22/49102.aspx"><font color="#003366">用于生成代码的 CodeSmith</font></a><br />
<a href="http://blog.csdn.net/zhumi/archive/2004/07/22/49123.aspx"><font color="#003366">用于监视代码的 FxCop</font></a><br />
<a href="http://blog.csdn.net/zhumi/archive/2004/07/22/49079.aspx"><font color="#003366">用于编译少量代码的 Snippet Compiler</font></a><br />
<a href="http://blog.csdn.net/zhumi/archive/2004/07/22/49144.aspx"><font color="#003366">用于转换的工具I ASP.NET Version Switcher</font></a><br />
<a href="http://blog.csdn.net/zhumi/archive/2004/07/22/49151.aspx"><font color="#003366">用于转换的工具II Visual Studio Converter </font></a><br />
<a href="http://blog.csdn.net/zhumi/archive/2004/07/22/49094.aspx"><font color="#003366">用于生成正则表达式的 Regulator</font></a><br />
<a href="http://blog.csdn.net/zhumi/archive/2004/07/22/49127.aspx"><font color="#003366">用于分析程序集的 .NET Reflector</font></a><br />
</div>
<p>本文使用了下列技术： </p>
<p>.NET、C# 或 Visual Basic .NET、Visual Studio .NET</p>
<p>小结</p>
<p>本文采用走马观花的方式介绍了上述工具，但我已经试图起码向您提供足够的信息以激起您的好奇心。我相信本文已经让您在某种程度上领悟了几个免费工具，您可以立即开始使用这些工具来编写更好的项目。同时，我还要敦促您确保自己拥有所有其他可以获得的合适工具，无论是最新版本的 Visual Studio、功能强大的计算机还是免费的实用工具。拥有合适的工具将使一切变得大不相同。</p>
<p><strong>James Avery</strong> 是一位使用 .NET 和其他 Microsoft 技术的顾问。他已经撰写了许多书籍和文章，他的最新著作是《ASP.NET Setup and Configuration Pocket Reference》(Microsoft Press, 2003)。您可以通过 <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#106;&#97;&#118;&#101;&#114;&#121;&#64;&#105;&#110;&#102;&#111;&#122;&#101;&#114;&#107;&#46;&#99;&#111;&#109;" target="_blank">javery@infozerk.com</a> 向他发送电子邮件，并且在 <a href="http://www.dotavery.com/blog" target="_blank">http://www.dotavery.com/blog</a> 阅读他的网络日记。</p>
<p>本文摘自 <a href="http://msdn.microsoft.com/msdnmag/default.aspx" target="_blank">MSDN Magazine</a> 的 <a href="http://msdn.microsoft.com/msdnmag/issues/04/07/default.aspx" target="_blank">2004 年 7 月</a>刊。</p>
<p>该杂志可在各地的报摊购买，也可以<a href="http://msdn.microsoft.com/msdnmag/subscribe.aspx" target="_blank"><em>订阅</em></a>。 </p>
<p><a href="http://msdn.microsoft.com/msdnmag/issues/04/07/MustHaveTools/default.aspx" target="_blank">转到原英文页面</a></p>
<p><a href="http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/TenMHToolEDevShouDN.mspx">转到原中文页面</a></p>
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1259782.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42131/" target="_blank">[新闻]祝Google 10周岁生日快乐</a>]]></description></item><item><title>初识CodeSmith</title><link>http://www.cnblogs.com/GavinCome/archive/2008/08/04/1259533.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Sun, 03 Aug 2008 18:01:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/08/04/1259533.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1259533.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/08/04/1259533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1259533.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1259533.html</trackback:ping><description><![CDATA[<p>06年就听说了这个工具，当时听到我就流口水!</p>
<p>&nbsp;</p>
<p>一直想在项目中用，但到单位后一直做维护性的项目，所以也一直没有用上，工作也忙，也没有时间来关注学习CodeSmith。</p>
<p>&nbsp;</p>
<p>最近终于闲了下来。</p>
<p>&nbsp;</p>
<p>看了看。嘿嘿!</p>
<p>&nbsp;</p>
<p>感觉，虽然写模板需要不少时间,可是写完模板后发现一按按钮就可以生成大量的代码,这感觉真是爽呆了啊.</p>
<p>&nbsp;</p>
<p>从今天开始一定好好学习，为以后做项目，减少写重复代码的时间!嘿嘿</p>
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1259533.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42131/" target="_blank">[新闻]祝Google 10周岁生日快乐</a>]]></description></item><item><title>ActiveX控件的打包发布[无证书发布](一)</title><link>http://www.cnblogs.com/GavinCome/archive/2008/08/02/1258905.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Sat, 02 Aug 2008 10:22:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/08/02/1258905.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1258905.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/08/02/1258905.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1258905.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1258905.html</trackback:ping><description><![CDATA[<p>[转自<a href="http://blog.csdn.net/hnwanghb/archive/2005/03/24/329193.aspx">ActiveX控件的打包发布[无证书发布](一)</a>&nbsp; ］</p>
<p>最近为了解决一个ActiveX的技术问题，用VB做了一个ActiveX控件，什么功能都没有， </p>
<p>就是测试一下ActiveX的发布，以及版本更新！折腾了两天，总算搞明白其中的一些过程！</p>
<p>顺便记一下，免得忘记！看过一篇文章，介绍了用C#来开发ActiveX的功能，但是C#只能</p>
<p>做托管的程序，需要.net framework在客户端安装后，才能运行！所以，我最终开发，还是</p>
<p>用VB6,VC++6来开发。</p>
<h4>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#993300"> 从制作测试ActiveX控件、打包装、发布的步骤如下：</font></h4>
<h5>&nbsp;&nbsp;&nbsp;&nbsp;<font color="#0000ff">&nbsp;</font><font color="#ff0000">VB开发ActiveX控件步骤：</font></h5>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 1、创建一个ActiveX Control的项目</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 2、绘制ActiveX控件的操作界面，并且编写代码</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 3、特别注意：在项目的属性上的Make页，有一个Version Number区域，需要你写当前控件的</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 版本号，这个地方和自动下载有密切关系！当你远端的Web浏览器检查到本机的控件版本号</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 和服务器上不一样的时候，浏览器就会自动从服务器下载新版本控件进行安装，所以你编译</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 的新版本控件一定要改版本号！否则可能导致远程无法更新。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、编译ActiveX控件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size="2"><strong><font color="#0000ff">&nbsp;</font><font color="#ff0000">ActiveX控件打包步骤：</font></strong></font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本例子以Studio 6.0自带的打包工具为例。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、选择当前选用的VB ActiveX项目进行打包。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、其中在选择Package Type的时候有3个选项：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)Standard setup package</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)Internet Package</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3)Dependency File</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff" size="2">选择第二个！</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、到选择File Source的时候有3个选项：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1)Include in this cab</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2)download from microsoft web site</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3)download from alternate web site</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上选项是针对程序包含的每一个相关dll,ocx的，所以，如果你要修改参数，需要一个个文件设置！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000ff" size="2">我建议是都选择第一项！</font>因为有些控件从外部更新，可能会遇见证书之类的问题，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可能导致你的程序无法使用，因此，全部使用本地的是最省心的选择！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打包过程的其他步骤，没有特别说明的，全部用默认设置！</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、在发布控件的网站根目录下建一个目录，就叫ActiveX吧，把打包装后的Package目录中的所有文件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 复制到ActiveX目录。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、打包完成后修改测试例子htm文件：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打包完成后，工具会自动产生一个和项目名称一样的htm文件，里面代码如下：</p>
<p><font color="#339966">&lt;HTML&gt;<br />
&lt;HEAD&gt;<br />
&lt;TITLE&gt;WebActiveX.CAB&lt;/TITLE&gt;<br />
&lt;/HEAD&gt;<br />
&lt;BODY&gt;<br />
&lt;!--&nbsp;If any of the controls on this page require licensing, you must<br />
&nbsp;create a license package file. Run LPK_TOOL.EXE to create the<br />
&nbsp;required LPK file. LPK_TOOL.EXE can be found on the ActiveX SDK,<br />
&nbsp;</font><a href="http://www.microsoft.com/intdev/sdk/sdk.htm"><font color="#339966">http://www.microsoft.com/intdev/sdk/sdk.htm</font></a><font color="#339966">. If you have the Visual<br />
&nbsp;Basic 6.0 CD, it can also be found in the \Tools\LPK_TOOL directory.</font></p>
<p><font color="#339966">&nbsp;The following is an example of the Object tag:</font></p>
<p><font color="#339966">&lt;OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331"&gt;<br />
&nbsp;&lt;PARAM NAME="LPKPath" VALUE="LPKfilename.LPK"&gt;<br />
&lt;/OBJECT&gt;<br />
--&gt;</font></p>
<p><font color="#339966">&lt;OBJECT ID="ActiveXDrive"<br />
CLASSID="CLSID:F68EC215-0F14-416F-B680-FF8C772A0B47"<br />
<strong><font color="#ff0000" size="2">CODEBASE="WebActiveX.CAB#version=1,1,0,0"&gt;</font></strong></font></p>
<p><font color="#339966"><strong><font color="#ff0000" size="2">修改为：</font></strong></font></p>
<p><font color="#339966"><strong><font color="#ff0000" size="2">CODEBASE="http://130.50.26.221/ActiveX/WebActiveX.CAB#version=1,1,0,0"&gt;</font></strong><br />
&lt;/OBJECT&gt;<br />
&lt;/BODY&gt;<br />
&lt;/HTML&gt;</font></p>
<p><font size="2">注意上面红色字体部分。</font></p>
<h5><font color="#ff0000">客户端IE设置：</font></h5>
<p>1、打开IE-&gt;Internet 选项-&gt;安全-&gt;internet，把安全级设置为低！要注意&#8220;自定级别&#8221;里面，</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有没有对ActiveX的限制，要是有全放开！</p>
<p>2、要是安装有防火墙软件的，要注意这些软件对http访问有没有限制，要是有全放开！</p>
<p>&nbsp;</p>
<p><font size="2">最后一步：嘿嘿，在另一台电脑上访问发布ActiveX控件的服务器。应该成功了吧！</font></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1258905.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42130/" target="_blank">[新闻]Google十年市值达1500亿美元 创造奇迹</a>]]></description></item><item><title>一些很酷的.Net技巧 （转） </title><link>http://www.cnblogs.com/GavinCome/archive/2008/08/01/1257784.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Thu, 31 Jul 2008 17:36:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/08/01/1257784.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1257784.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/08/01/1257784.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1257784.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1257784.html</trackback:ping><description><![CDATA[摘要: 原作出处：http://www.codeproject.com/useritems/tips.asp?df=100一．.Net Framework1．如何获得系统文件夹使用System.Envioment类的GetFolderPath方法；例如：Environment.GetFolderPath( Environment.SpecialFolder.Personal )2．如何获得正在执行的exe&nbsp;&nbsp;<a href='http://www.cnblogs.com/GavinCome/archive/2008/08/01/1257784.html'>阅读全文</a><img src ="http://www.cnblogs.com/GavinCome/aggbug/1257784.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42129/" target="_blank">[新闻]GMail:回过头来支持IE6</a>]]></description></item><item><title>什么是XSL</title><link>http://www.cnblogs.com/GavinCome/archive/2008/07/21/1247615.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Mon, 21 Jul 2008 05:31:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/07/21/1247615.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1247615.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/07/21/1247615.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1247615.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1247615.html</trackback:ping><description><![CDATA[<div id="intro">
<p><strong>它起始于 XSL，结束于 XSLT、XPath 以及 XSL-FO。</strong></p>
</div>
<div>
<h2>起始于 XSL</h2>
<p>XSL 指扩展样式表语言（<em>E</em>Xtensible <em>S</em>tylesheet <em>L</em>anguage）。</p>
<p>万维网联盟 (W3C) 开始发展 XSL 的原因是：存在着对于基于 XML 的样式表语言的需求。</p>
</div>
<div>
<h2>CSS = HTML 样式表</h2>
<p>HTML 使用预先定义的标签，标签的意义<em>很容易被理解</em>。</p>
<p>HTML 元素中的 &lt;table&gt; 元素定义表格 - 并且浏览器清楚<em>如何显示它</em>。</p>
<p>向 HTML 元素添加样式是很容易的。通过 CSS，很容易告知浏览器用特定的字体或颜色显示一个元素。</p>
</div>
<div>
<h2>XSL = XML 样式表</h2>
<p>XML 不使用预先定义的标签（我们可以使用任何喜欢的标签名），并且这些标签的意义<em>并不都那么容易被理解</em>。</p>
<p>&lt;table&gt; 元素意味着一个 HTML 表格，一件家具，或是别的什么东西 - 浏览器<em>不清楚如何显示它</em>。</p>
<p>XSL 可<em>描述</em>如何来显示 XML 文档！</p>
</div>
<div>
<h2>XSL - 不仅仅是样式表语言</h2>
<h3>XSL 包括三部分：</h3>
<dl class="define">
<dt>XSLT
<dd>一种用于转换 XML 文档的语言。
<dt>XPath
<dd>一种用于在 XML 文档中导航的语言。
<dt>XSL-FO
<dd>一种用于格式化 XML 文档的语言。 </dd></dl></div>
<div>
<h2>本教程的主要内容是 XSLT</h2>
<p>本教程的其余部分是 XSLT - 用来转换 XML 文档的语言。</p>
<p>你也可以学习我们的《<a title="XPath教程" href="http://www.w3school.com.cn/xpath/index.asp">XPath 教程</a>》和《<a title="XSL-FO教程" href="http://www.w3school.com.cn/xslfo/index.asp">XSL-FO 教程</a>》。</p>
</div>
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1247615.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42128/" target="_blank">[新闻]Google十年大变样</a>]]></description></item><item><title>asp和客户端调用.NET的webservice</title><link>http://www.cnblogs.com/GavinCome/archive/2008/07/19/1246462.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Fri, 18 Jul 2008 18:58:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/07/19/1246462.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1246462.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/07/19/1246462.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1246462.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1246462.html</trackback:ping><description><![CDATA[<p><font face="Verdana">最近碰到的一个问题，需要在asp和客户端调用.NET的webservice，也就是说需要用vbscript或javascript来调用webservice。在网上看了看，大多数方案都是利用SOAP Toolkit，但是因为SOAP Toolkit在今年就会被停止后续的支持了，并且要使用soapclient需要专门安装SOAP Toolkit，这对客户端来说不具有通用性，因此想到了使用xmlhttp，利用xmlhttp来和webservice交互。 </p>
<p><font color="#ff0000"><strong>客户端代码如下：</strong></font><br />
<font color="#448cbb">&lt;script language="vbscript"&gt;<br />
Set objHTTP = CreateObject("MSXML2.XMLHTTP")<br />
Set xmlDOC =CreateObject("MSXML.DOMDocument")<br />
strWebserviceURL = "</font><a href="http://localhost/possible/Service1.asmx/add"><font color="#448cbb">http://localhost/possible/Service1.asmx/add</font></a><font color="#448cbb">"<br />
<font color="#ff0000">'设置参数及其值</font><br />
strRequest = "x=2&amp;y=3"<br />
objHTTP.Open "POST", strWebserviceURL, False<br />
<font color="#ff0000">'设置这个Content-Type很重要<br />
</font>objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"<br />
objHTTP.Send(strRequest)<br />
bOK = xmlDOC.load(objHTTP.responseXML)<br />
<font color="#ff0000">'看看状态值</font><br />
msgBox objHTTP.Status<br />
msgbox objHTTP.StatusText<br />
<font color="#ff0000">'objHTTP.Status=200,这里就可以处理返回的xml片段了<br />
'如果需要,可以替换返回的xml字符串当中的&amp;lt;和&amp;gt;</font><br />
xmlStr = xmlDOC.xml<br />
xmlStr = Replace(xmlStr,"&amp;lt;","&lt;",1,-1,1)<br />
xmlStr = Replace(xmlStr,"&amp;gt;","&gt;",1,-1,1)<br />
msgbox xmlStr<br />
&lt;/script&gt;</font></p>
<p><strong><font color="#ff0000">改为服务器端的asp代码为：</font></strong><br />
<font color="#0066ff">&lt;%<br />
Set objHTTP = Server.CreateObject("MSXML2.XMLHTTP")<br />
Set xmlDOC =Server.CreateObject("MSXML.DOMDocument")<br />
strWebserviceURL = "</font><a href="http://localhost/possible/Service1.asmx/add"><font color="#0066ff">http://localhost/possible/Service1.asmx/add</font></a><font color="#0066ff">"<br />
<font color="#ff0000">'设置参数及其值</font><br />
strRequest = "x=2&amp;y=3"<br />
objHTTP.Open "POST", strWebserviceURL, False<br />
<font color="#ff0000">'设置这个Content-Type很重要</font><br />
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"<br />
objHTTP.Send(strRequest)<br />
bOK = xmlDOC.load(objHTTP.responseXML)<br />
<font color="#ff0000">'看看状态值</font><br />
if objHTTP.Status=200 then<br />
xmlStr = xmlDOC.xml<br />
xmlStr = Replace(xmlStr,"&amp;lt;","&lt;",1,-1,1)<br />
xmlStr = Replace(xmlStr,"&amp;gt;","&gt;",1,-1,1)<br />
&nbsp; Response.Write xmlStr<br />
else<br />
&nbsp; Response.Write objHTTP.Statu&amp;"&lt;br&gt;"<br />
&nbsp; Response.Write objHTTP.StatusText<br />
end if<br />
%&gt;<br />
<br />
</font>&nbsp;&nbsp;&nbsp; 以上代码在本地测试都没有问题（在部署webservice的本地机器上测试的），然而把strWebserviceURL = "<a href="http://localhost/possible/Service1.asmx/add">http://localhost/possible/Service1.asmx/add</a>"改为部署在其他机器上的webservice时，却出了问题，结果一直是返回500错误，即objHTTP.Status一直都为500。<br />
&nbsp;&nbsp;&nbsp; 原因在于.Net Framework1.1默认不支持HttpGet和HttpPost。如果修改webservice里的web.config增加<br />
<font color="#0033ff">&nbsp;&lt;webServices&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;protocols&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;add name="HttpPost"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&lt;add name="HttpGet"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/protocols&gt;<br />
&nbsp;&lt;/webServices&gt;</font><br />
后，上代码就可以调用远程机器上的webservice了。<br />
&nbsp;&nbsp;&nbsp; 而利用SOAP发送在默认情况下即可得到.Net Framework1.1的支持，因此用构造Soap请求的xml字符串给xmlhttp对象来send的方法就对远程服务器的web.config没有要求了，于是根据local显示的例子构造了一个soapRequest的string,发送给了即将部署的远程主机,结果返回了200的status code,并且可以顺利取得responseXML.类似代码如下：</p>
<p><strong><font color="#ff0000">客户端代码如下：</font></strong><br />
<font color="#0033ff">&lt;script language="vbscript"&gt;<br />
Dim url,xmlhttp,dom,node,xmlDOC<br />
<font color="#ff0000">'根据webservice的测试页不同的方法构造不同的soap request<br />
</font>SoapRequest = "&lt;?xml version="&amp;CHR(34)&amp;"1.0"&amp;CHR(34)&amp;" encoding="&amp;CHR(34)&amp;"utf-8"&amp;CHR(34)&amp;"?&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp; "&lt;soap:Envelope xmlns:xsi="&amp;CHR(34)&amp;"</font><a href='http://www.w3.org/2001/XMLSchema-instance"&amp;CHR(34'><font color="#0033ff">http://www.w3.org/2001/XMLSchema-instance"&amp;CHR(34</font></a><font color="#0033ff">)&amp;" "&amp; _<br />
&nbsp;&nbsp;&nbsp; "xmlns:xsd="&amp;CHR(34)&amp;"</font><a href='http://www.w3.org/2001/XMLSchema"&amp;CHR(34'><font color="#0033ff">http://www.w3.org/2001/XMLSchema"&amp;CHR(34</font></a><font color="#0033ff">)&amp;" "&amp; _<br />
&nbsp;&nbsp;&nbsp; "xmlns:soap="&amp;CHR(34)&amp;"</font><a href='http://schemas.xmlsoap.org/soap/envelope/"&amp;CHR(34'><font color="#0033ff">http://schemas.xmlsoap.org/soap/envelope/"&amp;CHR(34</font></a><font color="#0033ff">)&amp;"&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp; "&lt;soap:Body&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp; "&lt;add xmlns="&amp;CHR(34)&amp;"</font><a href='http://localhost"&amp;chr(34/'><font color="#0033ff">http://localhost"&amp;CHR(34</font></a><font color="#0033ff">)&amp;"&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp;&nbsp; "&lt;x&gt;3&lt;/x&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp;&nbsp; "&lt;y&gt;4&lt;/y&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp; "&lt;/add&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/soap:Body&gt;"&amp; _<br />
&nbsp;&nbsp; "&lt;/soap:Envelope&gt;" <br />
url = "</font><a href="http://www.xxxx.com/Service1.asmx?methodname=Add"><font color="#0033ff">http://www.xxxx.com/Service1.asmx?methodname=Add</font></a><font color="#0033ff">"<br />
Set xmlDOC =CreateObject("MSXML.DOMDocument")<br />
xmlDOC.loadXML(SoapRequest)<br />
Set xmlhttp = CreateObject("Msxml2.XMLHTTP")<br />
xmlhttp.Open "POST",url,false<br />
xmlhttp.setRequestHeader "Content-Type", "text/xml;charset=utf-8"<br />
<font color="#ff0000">'SOAPAction这个Header头同样可以在sample中找到</font><br />
xmlhttp.setRequestHeader "SOAPAction", "</font><a href="http://localhost/add"><font color="#0033ff">http://localhost/add</font></a><font color="#0033ff">"<br />
xmlhttp.setRequestHeader "Content-Length",LEN(SoapRequest)<br />
xmlhttp.Send(xmlDOC)<br />
msgbox xmlhttp.Status<br />
msgbox xmlhttp.StatusText<br />
msgbox xmlhttp.responseText<br />
If xmlhttp.Status = 200 Then<br />
&nbsp;xmlDOC.load(xmlhttp.responseXML)<br />
&nbsp;msgbox "执行结果为："&amp;xmlDOC.getElementsByTagName("addResult")(0).text<br />
else<br />
&nbsp;msgbox "failed"<br />
end if<br />
&lt;/script&gt;</font></p>
<p><strong><font color="#ff0000">改为服务器端的asp代码为：</font></strong><br />
<font color="#0033ff">&lt;%<br />
Dim url,xmlhttp,dom,node,xmlDOC<br />
<font color="#ff0000">'根据webservice的测试页不同的方法构造不同的soap request<br />
</font>SoapRequest = "&lt;?xml version="&amp;CHR(34)&amp;"1.0"&amp;CHR(34)&amp;" encoding="&amp;CHR(34)&amp;"utf-8"&amp;CHR(34)&amp;"?&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp; "&lt;soap:Envelope xmlns:xsi="&amp;CHR(34)&amp;"</font><a href='http://www.w3.org/2001/XMLSchema-instance"&amp;CHR(34'><font color="#0033ff">http://www.w3.org/2001/XMLSchema-instance"&amp;CHR(34</font></a><font color="#0033ff">)&amp;" "&amp; _<br />
&nbsp;&nbsp;&nbsp; "xmlns:xsd="&amp;CHR(34)&amp;"</font><a href='http://www.w3.org/2001/XMLSchema"&amp;CHR(34'><font color="#0033ff">http://www.w3.org/2001/XMLSchema"&amp;CHR(34</font></a><font color="#0033ff">)&amp;" "&amp; _<br />
&nbsp;&nbsp;&nbsp; "xmlns:soap="&amp;CHR(34)&amp;"</font><a href='http://schemas.xmlsoap.org/soap/envelope/"&amp;CHR(34'><font color="#0033ff">http://schemas.xmlsoap.org/soap/envelope/"&amp;CHR(34</font></a><font color="#0033ff">)&amp;"&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp; "&lt;soap:Body&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp; "&lt;add xmlns="&amp;CHR(34)&amp;"</font><a href='http://localhost"&amp;chr(34/'><font color="#0033ff">http://localhost"&amp;CHR(34</font></a><font color="#0033ff">)&amp;"&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp;&nbsp; "&lt;x&gt;3&lt;/x&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp;&nbsp; "&lt;y&gt;4&lt;/y&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp; "&lt;/add&gt;"&amp; _<br />
&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/soap:Body&gt;"&amp; _<br />
&nbsp;&nbsp; "&lt;/soap:Envelope&gt;" <br />
url = "</font><a href="http://www.xxxx.com/Service1.asmx?methodname=Add"><font color="#0033ff">http://www.xxxx.com/Service1.asmx?methodname=Add</font></a><font color="#0033ff">"<br />
Set xmlDOC =server.CreateObject("MSXML.DOMDocument")<br />
xmlDOC.loadXML(SoapRequest)<br />
Set xmlhttp = server.CreateObject("Msxml2.XMLHTTP")<br />
xmlhttp.Open "POST",url,false<br />
xmlhttp.setRequestHeader "Content-Type", "text/xml;charset=utf-8"<br />
xmlhttp.setRequestHeader "SOAPAction", "</font><a href="http://localhost/add"><font color="#0033ff">http://localhost/add</font></a><font color="#0033ff">"<br />
xmlhttp.setRequestHeader "Content-Length",LEN(SoapRequest)<br />
xmlhttp.Send(xmlDOC)<br />
If xmlhttp.Status = 200 Then<br />
&nbsp;xmlDOC.load(xmlhttp.responseXML)<br />
&nbsp; Response.Write xmlhttp.Status&amp;"&lt;br&gt;"<br />
&nbsp; Response.Write xmlhttp.StatusText&amp;"&lt;br&gt;执行结果为："<br />
&nbsp;Response.Write xmlDOC.getElementsByTagName("addResult")(0).text<br />
else<br />
&nbsp; Response.Write xmlhttp.Status&amp;"&lt;br&gt;"<br />
&nbsp; Response.Write xmlhttp.StatusText<br />
end if<br />
%&gt;</font></p>
<p>以上用的都是vbscript的，对于javascript基本上都是一样的，只需要做一些小的改动，具体代码这里就省略了。<br />
<br />
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</p>
<p><strong><font color="#ff0000">附：</font></strong><br />
测试时用的webservice文件Service1.asmx的代码：<br />
<font color="#bb44bb">using System;<br />
using System.Collections;<br />
using System.ComponentModel;<br />
using System.Data;<br />
using System.Diagnostics;<br />
using System.Web;<br />
using System.Web.Services;</font></p>
<p><font color="#bb44bb">namespace possible<br />
{<br />
&nbsp;/// &lt;summary&gt;<br />
&nbsp;/// Service1 的摘要说明。<br />
&nbsp;/// &lt;/summary&gt;<br />
&nbsp;[WebService(Description="my web service",Name="myService",Namespace="</font><a href="http://localhost/"><font color="#bb44bb">http://localhost</font></a><font color="#bb44bb">")] <br />
&nbsp;public class myService : System.Web.Services.WebService<br />
&nbsp;{<br />
&nbsp;&nbsp;public myService()<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;//CODEGEN: 该调用是 ASP.NET Web 服务设计器所必需的<br />
&nbsp;&nbsp;&nbsp;InitializeComponent();<br />
&nbsp;&nbsp;}</font></p>
<p><font color="#bb44bb">&nbsp;&nbsp;#region 组件设计器生成的代码<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;//Web 服务设计器所必需的<br />
&nbsp;&nbsp;private IContainer components = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;/// &lt;summary&gt;<br />
&nbsp;&nbsp;/// 设计器支持所需的方法 - 不要使用代码编辑器修改<br />
&nbsp;&nbsp;/// 此方法的内容。<br />
&nbsp;&nbsp;/// &lt;/summary&gt;<br />
&nbsp;&nbsp;private void InitializeComponent()<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;}</font></p>
<p><font color="#bb44bb">&nbsp;&nbsp;/// &lt;summary&gt;<br />
&nbsp;&nbsp;/// 清理所有正在使用的资源。<br />
&nbsp;&nbsp;/// &lt;/summary&gt;<br />
&nbsp;&nbsp;protected override void Dispose( bool disposing )<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;if(disposing &amp;&amp; components != null)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;components.Dispose();<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;base.Dispose(disposing);&nbsp;&nbsp;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;#endregion</font></p>
<p><font color="#bb44bb">&nbsp;&nbsp;[WebMethod(Description="返回两整数之和")]<br />
&nbsp;&nbsp;public int add(int x,int y)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;return x+y;<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
}</font></p>
</font>
<p><font face="Verdana">[转自]http://blog.csdn.net/possible_Y/archive/2004/02/18/16241.aspx</font></p>
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1246462.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42127/" target="_blank">[新闻]谷歌十年创新路</a>]]></description></item><item><title>固定表头和列</title><link>http://www.cnblogs.com/GavinCome/archive/2008/07/17/1245395.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Thu, 17 Jul 2008 11:01:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/07/17/1245395.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1245395.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/07/17/1245395.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1245395.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1245395.html</trackback:ping><description><![CDATA[摘要: 1&lt;html&gt;2&lt;head&gt;3&lt;metahttp-equiv="Content-Type"content="text/html;charset=gb2312"&gt;4&lt;title&gt;固定表头和列&lt;/title&gt;5&lt;style&gt;6.FixedTitleRow7{}{8position:relative;9top:expression(&nbsp;&nbsp;<a href='http://www.cnblogs.com/GavinCome/archive/2008/07/17/1245395.html'>阅读全文</a><img src ="http://www.cnblogs.com/GavinCome/aggbug/1245395.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42126/" target="_blank">[新闻]十年回顾：Google的互联网经济</a>]]></description></item><item><title>oracle的表注释，列注释在哪里添加？</title><link>http://www.cnblogs.com/GavinCome/archive/2008/07/17/1245105.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Thu, 17 Jul 2008 04:35:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/07/17/1245105.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1245105.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/07/17/1245105.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1245105.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1245105.html</trackback:ping><description><![CDATA[查询列注释:select &nbsp; * &nbsp; from &nbsp; user_col_comments&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
修改列注释:comment &nbsp; on &nbsp; column &nbsp; 表.字段 &nbsp; is &nbsp; '注释';<br />
表注释：comment &nbsp; on &nbsp; table &nbsp; tab_name &nbsp; is &nbsp; '表名';<br />
你可以用Oracle工具来修改,例如PL/Sql &nbsp; Developer,TOAD
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1245105.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42126/" target="_blank">[新闻]十年回顾：Google的互联网经济</a>]]></description></item><item><title>VS2005快捷键（加快我们的效率）</title><link>http://www.cnblogs.com/GavinCome/archive/2008/07/15/1243728.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Tue, 15 Jul 2008 15:38:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/07/15/1243728.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1243728.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/07/15/1243728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1243728.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1243728.html</trackback:ping><description><![CDATA[<div class="Content-body" id="logcontent_240" style="table-layout: fixed; word-break: break-all">
<p>快捷键 功能<br />
CTRL + SHIFT + B生成解决方案<br />
CTRL + F7 生成编译<br />
CTRL + O 打开文件<br />
CTRL + SHIFT + O打开项目<br />
CTRL + SHIFT + C显示类视图窗口<br />
F4 显示属性窗口<br />
SHIFT + F4显示项目属性窗口<br />
CTRL + SHIFT + E显示资源视图<br />
F12 转到定义<br />
CTRL + F12转到声明<br />
CTRL + ALT + J对象浏览<br />
CTRL + ALT + F1帮助目录<br />
CTRL + F1 动态帮助&nbsp;<br />
F1 帮助<br />
SHIFT + F1当前窗口帮助<br />
CTRL + ALT + F3帮助-搜索<br />
SHIFT + ALT + ENTER全屏显示<br />
CTRL + -向后定位<br />
CTRL + SHIFT + -向前定位<br />
CTRL + F4关闭文档窗口<br />
CTRL + PAGE DOWN光标定位到窗口上方<br />
CTRL + PAGE UP光标定位到窗口下方<br />
CTRL + F6<br />
CTRL + TAB下一个文档窗口<br />
CTRL + SHIFT + F6<br />
CTRL + SHIFT + TAB上一个文档窗口<br />
ALT + F6下一个面板窗口<br />
CTRL + K, CTRL + L取消remark<br />
CTRL + K, CTRL + C注释选择的代码<br />
CTRL + K, CTRL + U取消对选择代码的注释<br />
CTRL + M, CTRL + O折叠代码定义<br />
CTRL + M, CTRL + L展开代码定义<br />
CTRL + DELETE删除至词尾<br />
CTRL + BACKSPACE删除至词头<br />
SHIFT + TAB取消制表符<br />
CTRL + U转小写<br />
CTRL + SHIFT + U转大写<br />
CTRL + SHIFT + END选择至文档末尾<br />
CTRL + SHIFT + HOME选择至文档末尾开始<br />
SHIFT + END选择至行尾<br />
SHIFT + HOME选择至行开始处<br />
SHIFT + ALT + END垂直选择到最后尾<br />
SHIFT + ALT + HOME垂直选择到最前面<br />
CTRL + A全选<br />
CTRL + W选择当前单词<br />
CTRL + SHIFT + PAGE UP选择至本页前面<br />
CTRL + SHIFT + PAGE DOWN选择至本页后面<br />
CTRL + END文档定位到最后<br />
CTRL + HOME文档定位到最前<br />
CTRL + G转到&#8230;<br />
CTRL + K, CTRL + P上一个标签<br />
CTRL + K, CTRL + N下一个标签<br />
ALT + F10调试-ApplyCodeChanges&nbsp;<br />
CTRL + ALT+ Break停止调试<br />
CTRL + SHIFT + F9 取消所有断点<br />
CTRL + F9允许中断<br />
CTRL + SHIFT + F5调试-重新开始<br />
F5运行调试<br />
CTRL + F5运行不调试<br />
F10跨过程序执行<br />
F11单步逐句执行<br />
CTRL + J列出成员&nbsp;<br />
CTRL + PAGE DOWN下一个视图<br />
CTRL + B格式-粗体<br />
CTRL + SHIFT + T格式-文字缩进&nbsp;</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><br />
编辑快捷键</p>
<p>Shift+Alt+Enter: 切换全屏编辑<br />
Ctrl+B,T / Ctrl+K,K: 切换书签开关<br />
Ctrl+B,N / Ctrl+K,N: 移动到下一书签<br />
Ctrl+B,P: 移动到上一书签<br />
Ctrl+B,C: 清除全部标签<br />
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: 查找符号(列出所有查找结果)<br />
Ctrl+Shift+V: 剪贴板循环<br />
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+鼠标左按钮: 选择矩形文本<br />
Ctrl+Shift+U: 全部变为大写<br />
Ctrl+U: 全部变为小写</p>
<p>代码快捷键</p>
<p>Ctrl+J / Ctrl+K,L: 列出成员<br />
Ctrl+Shift+空格键 / Ctrl+K,P: 参数信息<br />
Ctrl+K,I: 快速信息<br />
Ctrl+E,C / Ctrl+K,C: 注释选定内容<br />
Ctrl+E,U / Ctrl+K,U: 取消选定注释内容<br />
Ctrl+K,M: 生成方法存根<br />
Ctrl+K,X: 插入代码段<br />
Ctrl+K,S: 插入外侧代码<br />
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: 文档大纲<br />
Ctrl+D,B: 断点窗口<br />
Ctrl+D,I: 即时窗口<br />
Ctrl+Tab: 活动窗体切换<br />
Ctrl+Shift+N: 新建项目<br />
Ctrl+Shift+O: 打开项目<br />
Ctrl+Shift+S: 全部保存<br />
Shift+Alt+C: 新建类<br />
Ctrl+Shift+A: 新建项</p>
<p><br />
VS2005的隐藏快捷键&nbsp;<br />
&nbsp;<br />
这里我将会把一些无意中发现的VS2005中没有明确指出的快捷键共享出来，并不是所有的快捷键，或者常见的一些快捷键。<br />
1、Ctrl+Space直接完成类或函数（本来这个并不算隐藏的快捷键，但是因为中文输入法抢占这个快捷键，所以。。。，替代的快捷键是Alt+Right）<br />
2、Shift+Delete整行删除，并且将这一行放到剪贴板（这时候不能选中一段内容）<br />
3、Shift+Insert粘贴，有点匪夷所思，Ctrl+V就可以了，大概是为了和Shift+Delete对应吧<br />
4、Ctrl+Up，Ctrl+Down滚动编辑器，但尽量不移动光标，光标保证在可见范围内<br />
5、Ctrl+BackSpace，Ctrl+Delete整词删除，有的时候很有用<br />
6、Ctrl+Left，Ctrl+Right按整词移动光标（不算隐藏，和前面几条加起来就是Ctrl光标控制套件了）<br />
7、Alt+Shift+F10打开执行改名，实现接口和抽象类的小窗口（还可以用Ctrl+.，不过有的中文输入法用到这个）<br />
8、Shift+F9调试是打开QuickWatch，内容是当前光标所在处的内容<br />
9、F12转跳到定义，很有用的快捷键<br />
10、Shift+F12查找所有引用<br />
11、Ctrl+F10=F5，开始Debug<br />
12、Ctrl+F6循环察看代码窗口，有点Ctrl+Tab的感觉<br />
13、Ctrl+F3查找当前光标选中的内容，可以和F3配合使用<br />
14、Ctrl+F2将焦点转移到类的下拉框上<br />
15、Alt+F7=Ctrl+Tab<br />
16、Alt+F11新开VS2005并编辑宏<br />
17、Alt+F12查找=Ctrl+F</p>
</div>
<div class="Content-body"><img style="margin: 0px 2px -4px 0px" alt="" src="http://tmsoft.lsxy.com/images/icon_trackback.gif" /><strong>引用通告地址:</strong> <span id="tbURL" title="点击复制到剪贴板" style="cursor: pointer" onclick="CopyText(document.all.tbURL)">http://tmsoft.lsxy.com/trackback.php?tbID=240&amp;extra=8e301f</span><br />
</div>
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1243728.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42123/" target="_blank">[新闻]Google 10周年大事记</a>]]></description></item><item><title>自已动手制作寸照</title><link>http://www.cnblogs.com/GavinCome/articles/1242988.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Mon, 14 Jul 2008 15:32:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/articles/1242988.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1242988.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/articles/1242988.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1242988.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1242988.html</trackback:ping><description><![CDATA[<p>毕业在即，学校动不动就给张单子，说，添了他，贴照片别忘。苦于我对镜头不感冒，照出来的相片很难看，真的没有本人好看。而且在照证明相的时候都不会笑了，脸很僵硬，不像平时的照片那么活泼。这就叫做&#8216;不上镜&#8217;吧。所以，在网上一顿搜怎么制作。嘿嘿，还真被我搜到了。。。</p>
<p>准备工作：照片一张，像素要高点；在就是软件Photoshop啦，其实很简单。</p>
<p>1寸制作过程：</p>
<p align="left">1.首先选择&#8220;裁切工具&#8221;，调整宽度和高度分别为：3cm，4cm（2.7cm，3.6cm）。</p>
<p align="center"><img style="display: block; margin: 0px auto 10px; text-align: center" alt="" src="http://1812.img.pp.sohu.com.cn/images/blog/2008/6/15/16/14/11b30440a83.jpg" border="0" /></p>
<p align="left">2.然后新建一张宽9cm高13cm的照片</p>
<p align="center"><img style="display: block; margin: 0px auto 10px; text-align: center" alt="" src="http://1802.img.pp.sohu.com.cn/images/blog/2008/6/15/16/13/11b304b0139.jpg" border="0" /></p>
<p>3.单击截图，Ctrl+A，Ctrl+C复制到新建照片中。这个时候，就会在新的里边添加一个图层。当然可以粘贴8次，便会有8个图层。如果想旋转，Ctrl+T则可以自由变换了，90度、180度都可以。</p>
<p><img style="display: block; margin: 0px auto 10px; text-align: center" alt="" src="http://1822.img.pp.sohu.com.cn/images/blog/2008/6/15/16/18/11b305b32f7.jpg" border="0" /></p>
<p>4.这样就可以洗一张5寸的照片，实际上获得是8张一寸照片。自己动手丰衣足食。相当省钱，关键好看。</p>
<p>2寸制作过程：</p>
<p>1.和一寸一样，宽度和高度设置为：4cm，6cm（3.6cm，5.4cm）</p>
<p>2.同样创建的是5寸照片，当然可以创建6寸的（15*10）</p>
<p>3.进行排版，5寸的只能这样排了。但是6寸的好像可以排的多点。</p>
<p><img style="display: block; margin: 0px auto 10px; text-align: center" alt="" src="http://1832.img.pp.sohu.com.cn/images/blog/2008/6/15/16/29/11b304bfc24.jpg" border="0" /></p>
<p>哈哈，不错吧，还挺满意的。。。。[原址]<font face="Verdana">http://dlhazel85.blog.sohu.com/90179056.html?act=1216049293744#comment</font></p>
<img src ="http://www.cnblogs.com/GavinCome/aggbug/1242988.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42122/" target="_blank">[新闻]Google上下二十年</a>]]></description></item><item><title>gzip压缩算法</title><link>http://www.cnblogs.com/GavinCome/archive/2008/07/13/1242056.html</link><dc:creator>赖文华(SWPU小赖)</dc:creator><author>赖文华(SWPU小赖)</author><pubDate>Sun, 13 Jul 2008 14:40:00 GMT</pubDate><guid>http://www.cnblogs.com/GavinCome/archive/2008/07/13/1242056.html</guid><wfw:comment>http://www.cnblogs.com/GavinCome/comments/1242056.html</wfw:comment><comments>http://www.cnblogs.com/GavinCome/archive/2008/07/13/1242056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/GavinCome/comments/commentRss/1242056.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/GavinCome/services/trackbacks/1242056.html</trackback:ping><description><![CDATA[<center class="aTitle">gzip压缩算法</center>
<table width="100%">
    <tbody>
        <tr>
            <td width="600"><br />
            </td>
            <td>
            作者：<span id="AuthorLabel"> 网络收集<br />
            </span></td>
        </tr>
    </tbody>
</table>
<span id="ContentBody" class="content" style="padding: 0px 10px; display: block;">
<div><span style="font-size: 9pt; color: black;"><br />
</span><span style="font-size: 9pt; color: black;">　　</span><span style="font-size: 9pt; color: black;"> 1 gzip</span><span style="font-size: 9pt; color: black;">所使用压缩算法的基本原理</span><span style="font-size: 9pt; color: black;"> <br />
<br />
</span><span style="font-size: 9pt; color: black;">　　</span><span style="font-size: 9pt; color: black;"> gzip </span><span style="font-size: 9pt; color: black;">对于要压缩的文件，首先使用</span><span style="font-size: 9pt; color: black;">lz77</span><span style="font-size: 9pt; color: black;">算法进行压缩，对得到的结果再使用</span><span style="font-size: 9pt; color: black;">huffman</span><span style="font-size: 9pt; color: black;">编码的方法进行