[原创]ASP.NET MVC默认首页Default.aspx指向修改

mikel阅读(1345)

由于业务需要网站有三个子站点,网站首页需要指向到第三个子站点的页面,于是进行了Default.aspx页面的修改,涉及到两个文件是站点根目录下:Default.aspx.cs和Global.asax文件,下面修改内容如下:

  1. Global.asax文件定义了ASP.NET MVC的URL路由规则,默认是/Home/Index,现在修改为/Ezine/Index,修改内容如下:
                routes.MapRoute(
                    "Default",                                              // Route name
                    "{controller}/{action}/{id}",                           // URL with parameters
                    new { controller = "Ezine", action = "Index", id = "" }  // Parameter defaults
                );
    
  2. Default.aspx.cs文件是ASP.NET MVC默认寻找的首页文件,在OnLoad事件中写入了重定向代码,于是也要修改为:
            public void Page_Load(object sender, System.EventArgs e)
            {
                Response.Redirect("~/Ezine");
            }
    

[转载]asp.net基于jquery的ajax二级联动

mikel阅读(1080)

[转载]asp.net基于jquery的ajax二级联动.
页面代码:

index.aspx

<script src="../ADMIN/js/jquery.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function() {

//预先加载第一个select,加载品牌,看好加载的的页面BrandHandler.ashx

        $.post('BrandHandler.ashx', {}, function(data) { $("#carbrand").html(data) }, 'html');

//当选择品牌的时候加载二级车系,构成联动
        $("#carbrand").change(function() {
        $.post('TypeHandler.ashx', { cartype: $(this).val() }, function(data) { $("#cartype").empty().html(data) }, 'html');
        });
    });
</script>
<table  width="950" height="35" border="0" cellpadding="0" cellspacing="0" class="left_tb">
  <tr>
    <td width="70" align="right" background="../IMAGES/b_4.gif"><img src="../IMAGES/serch_so.gif" width="59" height="17" /></td>
    <td width="100" background="../IMAGES/b_4.gif">
        <select id="carbrand" name="carbrand" >
            <option value="-1">--选择品牌--</option>
        </select>
        </td>
    <td width="105" background="../IMAGES/b_4.gif">
        <select id="cartype" name="cartype" >
            <option value="-1">--选择车系--</option>
        </select>
        </td>
    <td background="../IMAGES/b_4.gif" style="width:80px">
        &nbsp;
       <a href="###" id="search_type"><img  src="../IMAGES/serch.gif" alt="搜索" style="border:0px"/></a>
       </td>
    <td width="120" background="../IMAGES/b_4.gif">
        <input id="TextKeys" type="text"   />
        </td>
    <td width="100" align="left" background="../IMAGES/b_4.gif">
   <a href="###" id="search_news"> <img alt="新闻资讯" src="../IMAGES/serch.gif"  style="border:0"/></a>
    </td>
  </tr>
</table>

Hanlder异步处理页面代码:

using System;   
using System.Web;   
using System.Data;   
using System.Text;   
using System.Data.SqlClient;   
using Tools;   
public class BrandHandler : IHttpHandler {   
       
    public void ProcessRequest (HttpContext context) {   
        context.Response.ContentType = "text/plain";   
        string ssql = "select * from D_CARS_BRAND_TYPE where CARS_BRAND_TYPE>=-1 order by ORDER_NO asc";   
        SqlDataReader dr = (SqlDataReader)DataBase.GetDataReader(ssql);   
        StringBuilder st = new StringBuilder();   
        while(dr.Read())   
        {   
            st.Append("<option value=\"" + dr&#91;"CARS_BRAND_TYPE"&#93;.ToString() + "\">" + dr["CARS_BRAND_TYPE_NAME"].ToString() + "</option>\n");   
        }   
        dr.Close();   
        context.Response.Write(st.ToString());   
    }   
    
    public bool IsReusable {   
        get {   
            return false;   
        }   
    }   
}

using System;   
using System.Web;   
using System.Data;   
using System.Text;   
using System.Data.SqlClient;   
using Tools;   
public class TypeHandler : IHttpHandler   
{   
    public void ProcessRequest(HttpContext context)   
    {   
        context.Response.ContentType = "text/plain";   
        context.Response.Clear();   
        int cartype = 0;   
        if (int.TryParse(context.Request.Form["cartype"].ToString(), out cartype))   
        {   
            string ssql = "select * from D_CARS_TYPE where CARS_BRAND_TYPE=" + cartype + " order by ORDER_NO asc";   
            SqlDataReader dr = (SqlDataReader)DataBase.GetDataReader(ssql);   
            StringBuilder st = new StringBuilder();   
            while (dr.Read())   
            {   
                st.Append("<option value=\"" + dr&#91;"CARS_TYPE"&#93;.ToString() + "\">" + dr["CARS_TYPE_NAME"].ToString() + "</option>\n");   
            }   
            dr.Close();   
            context.Response.Write(st.ToString());   
        }   
        else  
            context.Response.Write("<option value='1'>--出现错误--</option>");   
    }   
    public bool IsReusable   
    {   
        get  
        {   
            return false;   
        }   
    }   
}  
  

[转载]C#文章抓取(含源码下载)

mikel阅读(1328)

[转载]文章抓取(含源码下载) – sharpCode – 博客园.

最近都左做一些资源采集的工作,比如采集新闻,flash,图片等,下面我们通过一个小例子,来详细的说明一下我采集资源的步骤,希望各位能提点建议,不胜感激。

下面就开始吧!我们这次要采集的是这个少儿英语动画故事  http://www.ebigear.com/reslist-92-1.html,虽然只有6页,但是已经对与这个例子来说已经足够了。

1.首先当然是要下载这个网页。

string seed = "http://www.ebigear.com/reslist-92-1.html";
HttpWebRequest wRequest=(HttpWebRequest)HttpWebRequest.Create(seed);
WebResponse wResponse = wRequest.GetResponse();
Stream stream = wResponse.GetResponseStream();
StreamReader streamReader = new StreamReader(stream);
string html = streamReader.ReadToEnd();

得到下面的字符串


少儿英语动画故事-英语听力-list-大耳朵英语 - 免费在线英语学习 口语练习 四级听力资料 在线翻译 网络课堂 英语社区

<script src="/script/20080806/jquery.js"></script> <script src="/script/20080806/jquery.form.js"></script>

<script src="/script/20080806/jquery.cookie.js"></script> <script src="/script/20080806/common.js"></script><script src="/script/20080806/res.js"></script> <script src="http://cbjs.baidu.com/js/m.js" type="text/javascript"></script> <script type="text/javascript">// <!&#91;CDATA&#91;
 BAIDU_CLB_addSlot("105486"); BAIDU_CLB_addSlot("105492"); BAIDU_CLB_addSlot("105494"); BAIDU_CLB_addSlot("105510"); BAIDU_CLB_addSlot("105511"); BAIDU_CLB_addSlot("121937"); BAIDU_CLB_addSlot("184421"); BAIDU_CLB_addSlot("184423"); BAIDU_CLB_addSlot("184428"); BAIDU_CLB_enableAllSlots(); BAIDU_CLB_preloadSlots("105486", "105492", "105494", "105510", "105511", "121937","184421","184423","184428");
// &#93;&#93;></script>
<div id="ChannelPublicTopBar">
<div id="loginInfo">
<div><form action="/?module=member&amp;act=login" method="post">会员:<input id="LoginMemberName" name="MemberName" size="10" type="text" />密码:<input id="LoginPwd" name="Pwd" size="10" type="password" /><input id="loginButton" class="submit" type="submit" value="登 录" /></form><a href="/register.html" target="_blank">注册会员</a><a href="/forgetpwd.html" target="_blank">忘记密码?</a><!-- <a href="http://bbs.ebigear.com/forum-3-1.html" mce_href="http://bbs.ebigear.com/forum-3-1.html" target="_blank">网站帮助</a> --><a style="color: #0166ce; font-weight: bold;" href="/?module=member&amp;act=visit&amp;MemberID=0" target="_blank">我浏览过的资料</a>

</div>
</div>
<div id="favoriteInfo">
<div><img src="http://images.cnblogs.com/headertophome.gif" alt="" /><a onclick="SetHome(this,'http://www.ebigear.com');" href="javascript://">设为首页</a><img src="http://images.cnblogs.com/headertopfav.gif" alt="" /><a onclick="AddFavorite(document.location.href,document.title)" href="javascript://">加入收藏夹</a><img src="http://images.cnblogs.com/headertopmark.gif" alt="" /><a onclick="window.open('http://shuqian.qq.com/post?from=3&amp;title='+encodeURIComponent(document.title)+'&amp;uri='+encodeURIComponent(document.location.href)+'&amp;jumpback=2&amp;noui=1','favit','width=930,height=470,left=50,top=50,toolbar=no,menubar=no,location=no,scrollbars=yes,status=yes,resizable=yes');" href="javascript://">加入QQ书签</a></div>
</div>
</div>
<div id="ChannelPublicTopNavi">
<div id="ChannelPublicLeft"><a href="/"><img id="logo" src="http://images.cnblogs.com/logo.gif" alt="" /></a></div>
<div id="ChannelPublicRight">
<ul>
	<li><a href="http://www.ebigear.com/news-index.html" target="_blank"><strong>文章阅读</strong></a></li>
	<li><a href="http://www.ebigear.com/newslist-109-1.html" target="_blank">英语新闻</a></li>
	<li><a href="http://www.ebigear.com/newslist-104-1.html" target="_blank">英文剧本</a></li>
	<li><a href="http://www.ebigear.com/newslist-92-1.html" target="_blank">英语考试</a></li>
	<li><a href="http://www.ebigear.com/newslist-48-1.html" target="_blank">英语文库</a></li>
	<li><a href="http://www.ebigear.com/reslist-3-1.html" target="_blank">歌曲</a> <a href="http://www.ebigear.com/reslist-4-1.html" target="_blank">电影</a></li>
	<li><a href="http://www.ebigear.com/reslist-1380-1.html" target="_blank">电子书籍</a></li>
	<li><a href="http://www.ebigear.com/reslist-679-1.html" target="_blank">小语种</a></li>
	<li><a style="color: red;" href="http://oral.ebigear.com/" target="_blank">口语训练</a></li>
	<li><a href="http://oral.ebigear.com/class.html" target="_blank">网络课堂</a></li>
	<li><a style="color: red;" href="http://word.ebigear.com/" target="_blank">背单词</a></li>
	<li class="gtEnd"><a href="http://bbs.ebigear.com/" target="_blank">社区</a> <a href="http://home.ebigear.com" target="_blank">家园</a></li>
</ul>
<ul>
	<li><a href="http://www.ebigear.com/res-index.html" target="_blank"><strong>英语听力</strong></a></li>
	<li><a href="http://www.ebigear.com/reslist-394-1.html" target="_blank">考试</a> <a href="http://www.ebigear.com/reslist-236-1.html" target="_blank">教材</a></li>
	<li><a href="http://www.ebigear.com/reslist-437-1.html" target="_blank">英语口语</a></li>
	<li><a href="http://www.ebigear.com/reslist-207-1.html" target="_blank">品牌听力</a></li>
	<li><a href="http://www.ebigear.com/reslist-81-1.html" target="_blank">广播听力</a></li>
	<li><a style="color: red;" href="http://topic.ebigear.com/" target="_blank">英语专题</a></li>
	<li><a href="http://www.ebigear.com/reslist-1-1.html" target="_blank">试题</a> <a href="http://www.ebigear.com/paper-index.html" target="_blank">试卷</a></li>
	<li><a href="http://kids.ebigear.com" target="_blank">少儿</a> <a href="http://primary.ebigear.com" target="_blank">小学</a></li>
	<li><a href="http://junior.ebigear.com" target="_blank">初中</a> <a href="http://senior.ebigear.com" target="_blank">高中</a></li>
	<li><a style="font-weight: bold; color: red;" href="http://writing.ebigear.com/" target="_blank">写作</a> <a style="color: red;" href="http://desktop.ebigear.com" target="_blank">桌面</a></li>
	<li><a href="http://dict.ebigear.com/" target="_blank">查词</a> <a href="http://fy.ebigear.com" target="_blank">翻译</a></li>
	<li class="gtEnd"><a href="http://qq.ebigear.com/" target="_blank">英语QQ群</a></li>
</ul>
</div>
</div>
<div id="nav">
<div id="banner"><script type="text/javascript">// <!&#91;CDATA&#91;
 BAIDU_CLB_fillSlot("105486");
// &#93;&#93;></script></div>
<div id="hotnews">
<div id="text"><script type="text/javascript">// <!&#91;CDATA&#91;
 BAIDU_CLB_fillSlot("105492");
// &#93;&#93;></script><script type="text/javascript">// <!&#91;CDATA&#91;
 BAIDU_CLB_fillSlot("105494");
// &#93;&#93;></script><script type="text/javascript">// <!&#91;CDATA&#91;
 BAIDU_CLB_fillSlot("105510");
// &#93;&#93;></script><script type="text/javascript">// <!&#91;CDATA&#91;
 BAIDU_CLB_fillSlot("105511");
// &#93;&#93;></script></div>
</div>
</div>
<div id="smallnavi">
<div><span style="border-left: 0px;"><a href="/" target="_blank">首页</a></span><span><a href="/res-daily.html" target="_blank">每天学英语</a></span><span><a href="http://nce.ebigear.com" target="_blank">新概念</a></span><span><a href="http://word.ebigear.com" target="_blank">背单词</a></span><span><a href="/reslist-897-1.html" target="_blank">走遍美国</a></span><span><a href="/reslist-422-1.html" target="_blank">音标</a></span><span><a href="http://cihui.ebigear.com/" target="_blank">词汇</a></span><span><a href="http://yufa.ebigear.com/" target="_blank">语法</a></span><span><a href="/reslist-418-1.html" target="_blank">研究生</a></span><span><a href="/reslist-415-1.html" target="_blank">大学</a></span><span><a href="http://senior.ebigear.com" target="_blank">高中</a></span><span><a href="http://junior.ebigear.com" target="_blank">初中</a></span><span><a href="http://primary.ebigear.com" target="_blank">小学</a></span><span><a href="http://kids.ebigear.com" target="_blank">少儿</a></span><span><a href="/reslist-413-1.html" target="_blank">演讲</a></span><span><a href="/reslist-962-1.html" target="_blank">有声圣经</a></span><span><a href="/reslist-192-1.html" target="_blank">VOA</a></span><span><a href="/reslist-78-1.html" target="_blank">商务</a></span><span><a href="http://ielts.ebigear.com" target="_blank">雅思</a></span></div>
</div>
<div id="nowpsn">
<p id="position">您所在的位置: <a href="/">大耳朵首页</a> &gt; <a href="/res-index.html">听力资料</a> &gt; <a href="/reslist-2-1.html">在线视听资料</a> &gt;...&gt; <a href="/reslist-93-1.html">国外儿童英语</a> &gt; 少儿英语动画故事列表</p>

<form action="/" method="get"><input name="module" type="hidden" value="search" /><input name="act" type="hidden" value="index" />
<p id="Soso">站内搜索:<input id="s" class="sosoin" maxlength="60" name="s" size="12" value="英语语法" /><input class="sosobutton" onclick="this.form.submit();" type="button" /></p>

</form></div>
<div style="width: 960px; margin: 0pt auto;"><script type="text/javascript">// <!&#91;CDATA&#91;
 BAIDU_CLB_fillSlot("184428");
// &#93;&#93;></script></div>
<div id="cntMain">
<div id="cntL">
<div id="cntLeft">
<div class="nodelist commbox">
<div class="nodechannel">
<div class="nodechannelleft fl">少儿英语动画故事</div>
<div class="nodechannelright fr"><img src="http://images.cnblogs.com/shareresicon.jpg" alt="" /><a href="/?module=help&amp;act=upload" target="_blank">贡献资料</a> <img src="http://images.cnblogs.com/contentfeed.jpg" alt="" /><a href="#">Res feeds</a></div>
</div>
<div class="nodelistli" style="display: none; height: 20px;"></div>
</div>
<div class="contentlist commbox">
<div class="contentrecom">
<div class="contentrecomleft fl"><script type="text/javascript">// <!&#91;CDATA&#91;
						 var focus_width=290;
						 var focus_height=230;
						 var text_height=0;
						 var swf_height = focus_height+text_height;
						 var pics='http://www.ebigear.com/images/pictures/2011/07/20110704162502yiGz.jpg|http://www.ebigear.com/images/pictures/2011/07/20110704173742GDMW.jpg';
						 var links='http://www.hiknow.com/children/sessions.html?uid=ebigear4|http://www.hiknow.com/children/sessions.html?uid=ebigear4';
						 var texts='乐知少儿英语免费试听|乐知少儿英语免费试听';

						 document.write('<span class="mceItemObject"  classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+ focus_width +'" height="'+ swf_height +'">');						 document.write('
<span  name="allowScriptAccess" value="sameDomain" class="mceItemParam"></span>
<span  name="movie" value="/images/list_focus.swf" class="mceItemParam"></span>
<span  name="quality" value="high" class="mceItemParam"></span>
<span  name="bgcolor" value="#F0F0F0" class="mceItemParam"></span>');						 document.write('
<span  name="menu" value="false" class="mceItemParam"></span>
<span  name=wmode value="opaque" class="mceItemParam"></span>');						 document.write('
<span  name="FlashVars" value="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+focus_width+'&borderheight='+focus_height+'&textheight='+text_height+'" class="mceItemParam"></span>');						 document.write('<span class="mceItemEmbed"  src="http://images.cnblogs.com/list_focus.swf" wmode="opaque" FlashVars="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+focus_width+'&borderheight='+focus_height+'&textheight='+text_height+'" menu="false" bgcolor="#F0F0F0" quality="high" width="'+ focus_width +'" height="'+ focus_height +'" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></span>');  document.write('<\/object>');
// &#93;&#93;></script></div>
<div class="contentrecomright fr">
	<li>
<div><strong><a href="/res-736-7777700055331.html" target="_blank">The Seven Eve--Chinese Valentine's Day</a></strong></div>
<div class="contentintro">The Seven Eve—Chinese Valentine’s DayMost people...</div></li>
	<li>
<div><strong><a href="/res-1674-7777700113692.html" target="_blank">英文歌曲 JLS - Everybody in Love</a></strong></div>
<div class="contentintro">Everybody in love, go on put your hands up恋爱中的人,...</div></li>
	<li>
<div><strong><a href="/res-1674-7777700109966.html" target="_blank">英文歌曲 Katy Perry --thinking of you</a></strong></div>
<div class="contentintro">国籍: 美国 出生地: 加州圣巴巴拉 出生日期: 1984年10月25日 身高:170c...</div></li>
</div>
</div>
<div class="gg600form"><script src="/script/20080806/google_reslist_ad.js"></script><script type="text/javascript">// <!&#91;CDATA&#91;
 google_ad_channel = '3161437116';google_ad_type = 'text';
// &#93;&#93;></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div>
<ul>
	<li>
<div><strong><a title="国外英语动画故事-A Country Road" href="/res-92-7777700001981.html" target="_blank">国外英语动画故事-A Country Road</a></strong></div>
<div class="contentintro">A Country Road(中英文对照) 英文:A Country RoadVery far away from the city lived a poor ...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>8108</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001981&amp;ObjectType=rs" target="_blank">一个月前</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-A Hot Air Balloon" href="/res-92-7777700001982.html" target="_blank">国外英语动画故事-A Hot Air Balloon</a></strong></div>
<div class="contentintro">英文:A Hot Air BalloonIf I had a hot air balloon,I would fly around the world and see ...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>1263</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001982&amp;ObjectType=rs" target="_blank">2天前</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-A Lion and a mouse" href="/res-92-7777700001983.html" target="_blank">国外英语动画故事-A Lion and a mouse</a></strong></div>
<div class="contentintro">A Lion and a mouse  One fine day in spring, a mouse came out to the lawn and enjoyed the...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>4035</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001983&amp;ObjectType=rs" target="_blank">18天前</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-A Quiet Quiz" href="/res-92-7777700001984.html" target="_blank">国外英语动画故事-A Quiet Quiz</a></strong></div>
<div class="contentintro">感谢大耳朵网友"大耳朵usa"提供的听力原文A Quiet QuizPlease, be quiet. This is a quiz.Q...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>7191</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001984&amp;ObjectType=rs" target="_blank">11/04/28</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-A wolf and shadow" href="/res-92-7777700001985.html" target="_blank">国外英语动画故事-A wolf and shadow</a></strong></div>
<div class="contentintro">A wolf and his shadow	狼和它的影子When it was getting dark a wolf was walking along the road.	...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>5719</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001985&amp;ObjectType=rs" target="_blank">11/05/01</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-Allen’s Fear" href="/res-92-7777700001986.html" target="_blank">国外英语动画故事-Allen’s Fear</a></strong></div>
<div class="contentintro">英文:Allen’s FearAllen does not like high places.Allen would never climb a ladder....</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>3021</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001986&amp;ObjectType=rs" target="_blank">10/07/15</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-An animal hospital nurse" href="/res-92-7777700001987.html" target="_blank">国外英语动画故事-An animal hospital nurse</a></strong></div>
<div class="contentintro">感谢大耳朵网友"dingxiang6"提供的听力原文Who is it ? A kangaroo nurse. She works all day. ...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>4299</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001987&amp;ObjectType=rs" target="_blank">一个月前</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-Annie the Detective" href="/res-92-7777700001988.html" target="_blank">国外英语动画故事-Annie the Detective</a></strong></div>
<div class="contentintro">Annie the Detective1.Annie and her family were enjoying dessert. Everyone loved Mother’s...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>2554</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001988&amp;ObjectType=rs" target="_blank">10/02/17</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-At Night" href="/res-92-7777700001989.html" target="_blank">国外英语动画故事-At Night</a></strong></div>
<div class="contentintro">英文:At NightThe horse sleeps in the stable.The pig sleeps in the pen.The squirrel...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>3910</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001989&amp;ObjectType=rs" target="_blank">11/03/14</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-Autumn’s Coming" href="/res-92-7777700001990.html" target="_blank">国外英语动画故事-Autumn’s Coming</a></strong></div>
<div class="contentintro">Autumn’s ComingIt’s a autumn,it’s fall,can you hear the call?The leaves are falling,...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>3759</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001990&amp;ObjectType=rs" target="_blank">一个月前</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-Ball Goes on a Picnic" href="/res-92-7777700001991.html" target="_blank">国外英语动画故事-Ball Goes on a Picnic</a></strong></div>
<div class="contentintro">英文:Ball Goes on a PicnicIt’s a nice fall day.So today, Ball is going on a picnic....</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>7994</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001991&amp;ObjectType=rs" target="_blank">10/08/03</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-Blue Cow in the Playground" href="/res-92-7777700001992.html" target="_blank">国外英语动画故事-Blue Cow in the Playground</a></strong></div>
<div class="contentintro">...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>8144</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001992&amp;ObjectType=rs" target="_blank">10/01/26</a></div></li>
	<li>
<div><strong><a title="国外英语动画故事-Bob Goes to the Dentist" href="/res-92-7777700001993.html" target="_blank">国外英语动画故事-Bob Goes to the Dentist</a></strong></div>
<div class="contentintro">英文:Bob Goes to the DentistToday is my first dentist appointment.I really do not wa...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>3087</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001993&amp;ObjectType=rs" target="_blank">10/12/30</a></div></li>
	<li style="border: 0;">
<div><strong><a title="国外英语动画故事-Bremen Town Musicians" href="/res-92-7777700001994.html" target="_blank">国外英语动画故事-Bremen Town Musicians</a></strong></div>
<div class="contentintro">感谢大耳朵网友"大耳朵usa"提供的听力原文 Bremen Town Musicians Once upon a time, a donkey ...</div>
<div class="listauthor"><img src="http://images.cnblogs.com/icon/s_flash.gif" alt="" />作者:<a href="/member-702.html" target="_blank">little ear</a> 点击:<span>7587</span> 发布时间:<span>05/05/28</span> 最后评论:<a href="/?module=review&amp;act=lists&amp;ObjectID=7777700001994&amp;ObjectType=rs" target="_blank">2天前</a></div></li>
</ul>
<div class="pageno">
<div class="page_here">
<div class="jump">转到第<input id="goto2" class="page_input" type="text" />页<input class="page_go" style="cursor: pointer;" onclick="window.location.href='/reslist-92-'+$('#goto2').val()+'.html'" type="button" value="GO" /></div>
<table border="0" cellspacing="1" cellpadding="0" align="right">
<tbody>
<tr>
<td class="page_now">1</td>
<td><a title="第2页" href="reslist-92-2.html">2</a></td>
<td><a title="第3页" href="reslist-92-3.html">3</a></td>
<td><a title="第4页" href="reslist-92-4.html">4</a></td>
<td><a title="第5页" href="reslist-92-5.html">5</a></td>
<td><a title="第6页" href="reslist-92-6.html">6</a></td>
<td><a title="下一页" href="reslist-92-2.html">&gt;</a></td>
<td><a title="尾页" href="reslist-92-6.html">&gt;|</a></td>
<td class="page_sort">1/6</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div style="margin-top: 15px; border-bottom: 1px dotted #ccd;"><script type="text/javascript">// <!&#91;CDATA&#91;
  				cpro_client='ebigear_cpr';				cpro_at='text_image'; 				cpro_161=3; 				cpro_flush=2; 				cpro_w=580; 				cpro_h=90; 				cpro_template='text_default_580_90'; 				cpro_cbd='#FFFFFF'; 				cpro_cbg='#FFFFFF'; 				cpro_ctitle='#0066CC'; 				cpro_cdesc='#444444'; 				cpro_curl='#008000'; 				cpro_cflush='#e10900'; 				cpro_uap=1;				cpro_cad=1;				cpro_channel=11065;
// &#93;&#93;></script> <script src="http://cpro.baidu.com/cpro/ui/cp.js" type="text/javascript"></script></div>
<div class="sendlink"><strong>赚金币提示:</strong>把下面的链接地址复制分发给您的朋友或其他网站,每个点击就赚10金币! <span style="color: red; font-size: 15px;">http://www.ebigear.com/reslistclick-92-0.html</span> <input class="button" onclick="window.clipboardData.clearData();window.clipboardData.setData('Text','http://www.ebigear.com/reslistclick-92-0.html');" type="button" value="复制地址" /><a href="http://bbs.ebigear.com/thread-1877-1-1.html" target="_blank">点击这里查看详细规则</a></div>
<div class="visithistory">
<div class="visithistorytitle boxtitle">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="2"><img src="http://images.cnblogs.com/boxtitleleft.gif" alt="" /></td>
<td class="boxtitlename" width="70" align="center">浏览记录</td>
<td width="2"><img src="http://images.cnblogs.com/boxtitleright.gif" alt="" /></td>
<td class="boxtitleright" width="557"></td>
</tr>
</tbody>
</table>
</div>
<div class="visithistorycontent commbox">
<ul class="fl">
	<li>您没有浏览历史</li>
</ul>
<ul class="fr">
	<li>您没有浏览历史</li>
</ul>
</div>
</div>
</div>
<div id="cntMiddle"><img class="middleicon" src="http://images.cnblogs.com/contentmiddleicon.jpg" alt="" />
<div>少儿英语动画故事</div>
<img src="http://images.cnblogs.com/contentmiddledot.jpg" alt="" />
<div>高瞻远瞩</div>
<div>放眼全球</div>
<div id="floatbar"><a href="/?module=help&amp;act=upload" target="_blank"><img src="http://images.cnblogs.com/contentmiddleshare.jpg" alt="" /></a></div>
</div>
</div>
<div id="cntRight">
<div class="rightrecomtitle boxtitle">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="2"><img src="http://images.cnblogs.com/boxtitleleft.gif" alt="" /></td>
<td class="boxtitlename" width="70">推荐资源</td>
<td width="2"><img src="http://images.cnblogs.com/boxtitleright.gif" alt="" /></td>
<td class="boxtitleright" width="226"></td>
</tr>
</tbody>
</table>
</div>
<div class="rightrecom commbox">
<ul>
	<li>
<div><a style="color: red;" title="大耳朵免费英语网络课堂" href="http://oral.ebigear.com/class.html" target="_blank">大耳朵免费英语网络课堂</a></div></li>
	<li>
<div><a title="英语入门 从abc学起" href="http://abc.ebigear.com" target="_blank">英语入门 从abc学起</a></div></li>
	<li>
<div><a title="少儿英语 资料教程" href="http://kids.ebigear.com" target="_blank">少儿英语 资料教程</a></div></li>
	<li>
<div><a title="英语初学者 四大宝典" href="http://begin.ebigear.com" target="_blank">英语初学者 四大宝典</a></div></li>
	<li>
<div><a style="color: red;" title="免费订阅每日英语课堂" href="http://www.adshidai.com/click.php?eos_sn=2002-14-54-0-1" target="_blank">免费订阅每日英语课堂</a></div></li>
	<li>
<div><a title="流行教材 新概念英语" href="http://nce.ebigear.com" target="_blank">流行教材 新概念英语</a></div></li>
	<li>
<div><a title="初中英语 学习资料" href="http://junior.ebigear.com/" target="_blank">初中英语 学习资料</a></div></li>
	<li>
<div><a title="高中英语 学习资料" href="http://senior.ebigear.com/" target="_blank">高中英语 学习资料</a></div></li>
	<li>
<div><a title="大学六级CET6历年考试" href="/reslist-562-1.html" target="_blank">大学六级CET6历年考试</a></div></li>
	<li>
<div><a title="初三英语课本同步听力" href="http://www.ebigear.com/topic/Junior_3/" target="_blank">初三英语课本同步听力</a></div></li>
	<li>
<div><a style="font-weight: bold; color: green;" title="高一英语课本同步听力" href="http://www.ebigear.com/topic/Senior_1/" target="_blank">高一英语课本同步听力</a></div></li>
	<li>
<div><a title="在线英语语法词典大全" href="/newslist-132-1.html" target="_blank">在线英语语法词典大全</a></div></li>
	<li>
<div><a title="高二英语课本同步听力" href="http://www.ebigear.com/topic/Senior_2/" target="_blank">高二英语课本同步听力</a></div></li>
	<li>
<div><a style="color: red;" title="免费下载英语电子书" href="/reslist-1380-1.html" target="_blank">免费下载英语电子书</a></div></li>
</ul>
</div>
<div style="text-align: left; margin-top: 10px;"><script src="/script/20080806/google_right_ad.js"></script> <script type="text/javascript">// <!&#91;CDATA&#91;
 google_ad_channel = '1227074352';google_ad_type = 'text,image,html,flash';google_image_size = '300x250';
// &#93;&#93;></script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script></div>
<div class="dailyenglish">
<div class="dailyenglishtitle boxtitle">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="2"><img src="http://images.cnblogs.com/boxtitleleft.gif" alt="" /></td>
<td class="boxtitlename" width="81" align="center">每天学英语</td>
<td width="2"><img src="http://images.cnblogs.com/boxtitleright.gif" alt="" /></td>
<td class="boxtitleright" width="215"><a href="/dailyenglish.html" target="_blank">更多</a></td>
</tr>
</tbody>
</table>
</div>
<div class="dailyenglishcontent commbox">
<div class="dailyenglishname">想进步,请坚持参与每天学英语活动!</div>
<ul style="height: 205.8px;">
	<li>
<div><a title="英文聊天" href="http://bbs.ebigear.com/forum-188-1.html" target="_blank">英文聊天</a></div></li>
	<li>
<div><a title="你问我答" href="http://bbs.ebigear.com/forum-97-1.html" target="_blank">你问我答</a></div></li>
	<li>
<div><a title="人在职场" href="http://bbs.ebigear.com/forum-184-1.html" target="_blank">人在职场</a></div></li>
	<li>
<div><a title="桌面英语" href="http://desktop.ebigear.com/" target="_blank">桌面英语</a></div></li>
	<li>
<div><a title="影视佳句" href="http://bbs.ebigear.com/thread-203886-1-1.html" target="_blank">影视佳句</a></div></li>
	<li>
<div><a title="美味屋" href="http://bbs.ebigear.com/thread-205103-1-1.html" target="_blank">美味屋</a></div></li>
	<li>
<div><a title="话题讨论" href="http://bbs.ebigear.com/thread-204687-1-1.html" target="_blank">话题讨论</a></div></li>
	<li>
<div><a title="听写擂台" href="http://bbs.ebigear.com/thread-205110-1-1.html" target="_blank">听写擂台</a></div></li>
	<li>
<div><a title="实用口语" href="http://bbs.ebigear.com/thread-205170-1-1.html" target="_blank">实用口语</a></div></li>
	<li>
<div><a title="英文写作" href="http://bbs.ebigear.com/thread-205093-1-1.html" target="_blank">英文写作</a></div></li>
	<li>
<div><a title="阅读理解" href="http://bbs.ebigear.com/thread-205095-1-1.html" target="_blank">阅读理解</a></div></li>
	<li>
<div><a title="单词超市" href="http://bbs.ebigear.com/thread-204924-1-1.html" target="_blank">单词超市</a></div></li>
	<li>
<div><a title="词汇讲解" href="http://bbs.ebigear.com/thread-205133-1-1.html" target="_blank">词汇讲解</a></div></li>
	<li>
<div><a title="语法学习" href="http://bbs.ebigear.com/thread-205122-1-1.html" target="_blank">语法学习</a></div></li>
	<li>
<div><a title="诚心找茬" href="http://bbs.ebigear.com/thread-193286-1-1.html" target="_blank">诚心找茬</a></div></li>
	<li>
<div><a title="新闻翻译" href="http://bbs.ebigear.com/thread-204965-1-1.html" target="_blank">新闻翻译</a></div></li>
	<li>
<div><a title="英译汉" href="http://bbs.ebigear.com/thread-205059-1-1.html" target="_blank">英译汉</a></div></li>
	<li>
<div><a title="汉译英" href="http://bbs.ebigear.com/thread-205107-1-1.html" target="_blank">汉译英</a></div></li>
	<li>
<div><a title="英译新闻" href="http://bbs.ebigear.com/thread-205108-1-1.html" target="_blank">英译新闻</a></div></li>
	<li>
<div><a title="英文谚语" href="http://bbs.ebigear.com/thread-204927-1-1.html" target="_blank">英文谚语</a></div></li>
	<li>
<div><a title="绕口令" href="http://bbs.ebigear.com/thread-204879-1-1.html" target="_blank">绕口令</a></div></li>
	<li>
<div><a title="寓言故事" href="http://bbs.ebigear.com/thread-205089-1-1.html" target="_blank">寓言故事</a></div></li>
	<li>
<div><a title="英文电影" href="http://bbs.ebigear.com/thread-205061-1-1.html" target="_blank">英文电影</a></div></li>
	<li>
<div><a title="经典歌曲" href="http://bbs.ebigear.com/thread-204970-1-1.html" target="_blank">经典歌曲</a></div></li>
	<li>
<div><a title="双语笑话" href="http://bbs.ebigear.com/thread-205084-1-1.html" target="_blank">双语笑话</a></div></li>
	<li>
<div><a title="图片笑话" href="http://bbs.ebigear.com/thread-205132-1-1.html" target="_blank">图片笑话</a></div></li>
	<li>
<div><a title="四级考题" href="http://bbs.ebigear.com/thread-204880-1-1.html" target="_blank">四级考题</a></div></li>
	<li>
<div><a title="四级听力" href="http://bbs.ebigear.com/thread-202276-1-1.html" target="_blank">四级听力</a></div></li>
	<li>
<div><a title="六级试题" href="http://bbs.ebigear.com/thread-205088-1-1.html" target="_blank">六级试题</a></div></li>
	<li>
<div><a title="六级听力" href="http://bbs.ebigear.com/thread-204662-1-1.html" target="_blank">六级听力</a></div></li>
	<li>
<div><a title="专四试题" href="http://bbs.ebigear.com/thread-205094-1-1.html" target="_blank">专四试题</a></div></li>
	<li>
<div><a title="中考试题" href="http://bbs.ebigear.com/frame.php?frameon=yes&amp;referer=http%3A//bbs.ebigear.com/thread-177484-1-1.html" target="_blank">中考试题</a></div></li>
	<li>
<div><a title="高考试题" href="http://bbs.ebigear.com/thread-204439-1-1.html" target="_blank">高考试题</a></div></li>
	<li>
<div><a title="考研英语" href="http://bbs.ebigear.com/thread-204660-1-1.html" target="_blank">考研英语</a></div></li>
	<li>
<div><a title="托业考试" href="http://bbs.ebigear.com/thread-204749-1-1.html" target="_blank">托业考试</a></div></li>
	<li>
<div><a title="托福资料" href="http://bbs.ebigear.com/thread-204928-1-1.html" target="_blank">托福资料</a></div></li>
	<li>
<div><a title="雅思资料" href="http://bbs.ebigear.com/thread-201371-1-1.html" target="_blank">雅思资料</a></div></li>
	<li>
<div><a title="美文欣赏" href="http://bbs.ebigear.com/thread-205040-1-1.html" target="_blank">美文欣赏</a></div></li>
	<li>
<div><a title="英文诗歌" href="http://bbs.ebigear.com/thread-205097-1-1.html" target="_blank">英文诗歌</a></div></li>
	<li>
<div><a title="英文猜谜" href="http://bbs.ebigear.com/thread-204931-1-1.html" target="_blank">英文猜谜</a></div></li>
	<li>
<div><a title="新闻听写" href="http://bbs.ebigear.com/thread-205114-1-1.html" target="_blank">新闻听写</a></div></li>
	<li>
<div><a title="视频新闻" href="http://bbs.ebigear.com/thread-205113-1-1.html" target="_blank">视频新闻</a></div></li>
	<li>
<div><a title="趣味俚语" href="http://bbs.ebigear.com/thread-197581-1-1.html" target="_blank">趣味俚语</a></div></li>
	<li>
<div><a title="VOA听写" href="http://bbs.ebigear.com/thread-160606-1-1.html" target="_blank">VOA听写</a></div></li>
	<li>
<div><a href="/dailyenglish.html" target="_blank">更多&gt;&gt;</a></div></li>
</ul>
<div class="dailyenglishname">每天一词:<input id="wordtr" size="20" type="text" /><input onclick="tranWord()" type="button" value="在线查词" /></div>
<a style="font-weight: bold; color: blue;" href="/?module=business&amp;act=click&amp;id=30&amp;url=aHR0cDovL3d3dy5hZHNoaWRhaS5jb20vY2xpY2sucGhwP2Vvc19zbj0yMDAyLTE0LTU0LTAtMQ==" target="_blank">免费订阅每日英语课堂</a></div>
</div>
<div class="rightpicadbottom"><script type="text/javascript">// <!&#91;CDATA&#91;
 BAIDU_CLB_fillSlot("121937");
// &#93;&#93;></script></div>
<div class="latestreviewtitle boxtitle">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="2"><img src="http://images.cnblogs.com/boxtitleleft.gif" alt="" /></td>
<td class="boxtitlename" width="160">最新社区精华帖子</td>
<td width="2"><img src="http://images.cnblogs.com/boxtitleright.gif" alt="" /></td>
<td class="boxtitleright" width="136"><a href="http://www.ebigear.com/?module=member&amp;act=digestthread" target="_blank">更多&gt;&gt;</a></td>
</tr>
</tbody>
</table>
</div>
<div class="latestreview commbox">
<ul>
	<li>
<div><a title="清凉夏日的一份礼物!" href="http://bbs.ebigear.com/thread-205173-1-1.html" target="_blank">清凉夏日的一份礼物!</a></div>
<span style="color: #ff0000;">16:36</span></li>
	<li>
<div><a title="8-6-2011口语讲解:周末档【商务口语】第13期" href="http://bbs.ebigear.com/thread-205170-1-1.html" target="_blank">8-6-2011口语讲解:周末档【商务口语】第13期</a></div>
<span style="color: #ff0000;">16:36</span></li>
	<li>
<div><a title="听力场景题型“听听他在哪”常用特征语(4)之银行" href="http://bbs.ebigear.com/thread-203115-1-1.html" target="_blank">听力场景题型“听听他在哪”常用特征语(4)之银行</a></div>
<span style="color: #ff0000;">10:51</span></li>
	<li>
<div><a title="【布】七夕美文---1℃的爱情" href="http://bbs.ebigear.com/thread-205135-1-1.html" target="_blank">【布】七夕美文---1℃的爱情</a></div>
<span style="color: #ff0000;">10:51</span></li>
	<li>
<div><a title="争分夺秒的“电梯游说”--时代新词盘点231" href="http://bbs.ebigear.com/thread-205026-1-1.html" target="_blank">争分夺秒的“电梯游说”--时代新词盘点231</a></div>
<span style="color: #ff0000;">11:14</span></li>
	<li>
<div><a title="英语词汇构词知识词根篇166:fund,found" href="http://bbs.ebigear.com/thread-205025-1-1.html" target="_blank">英语词汇构词知识词根篇166:fund,found</a></div>
<span style="color: #ff0000;">11:14</span></li>
	<li>
<div><a title="8-5-2011口语讲解:研学走遍美国【34】" href="http://bbs.ebigear.com/thread-205015-1-1.html" target="_blank">8-5-2011口语讲解:研学走遍美国【34】</a></div>
<span style="color: #ff0000;">09:53</span></li>
	<li>
<div><a title="历史上的今天----8月4日" href="http://bbs.ebigear.com/thread-204779-1-1.html" target="_blank">历史上的今天----8月4日</a></div>
<span>21:26</span></li>
	<li>
<div><a title="8-4-2011口语讲解:研学走遍美国【33】" href="http://bbs.ebigear.com/thread-204878-1-1.html" target="_blank">8-4-2011口语讲解:研学走遍美国【33】</a></div>
<span>09:50</span></li>
	<li>
<div><a title="网络口碑--时代新词盘点230" href="http://bbs.ebigear.com/thread-204744-1-1.html" target="_blank">网络口碑--时代新词盘点230</a></div>
<span>14:28</span></li>
</ul>
</div>
<div class="rightstudymethodtitle boxtitle">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="2"><img src="http://images.cnblogs.com/boxtitleleft.gif" alt="" /></td>
<td class="boxtitlename" width="96">经典学习方法</td>
<td width="2"><img src="http://images.cnblogs.com/boxtitleright.gif" alt="" /></td>
<td class="boxtitleright" width="208"><a href="/newslist-24-1.html" target="_blank">更多&gt;&gt;</a></td>
</tr>
</tbody>
</table>
</div>
<div class="rightstudymethod commbox">
<div class="rightstudymethodtext">
	<li>
<div><a title="如何备考BEC(剑桥商务英语)" href="/news-194-72077.html" target="_blank">如何备考BEC(剑桥商务英语)</a></div></li>
	<li>
<div><a title="李开复:怎样背单词" href="/news-25-62692.html" target="_blank">李开复:怎样背单词</a></div></li>
	<li>
<div><a style="color: purple;" title="四点建议,单词记住不再忘" href="/news-25-61233.html" target="_blank">四点建议,单词记住不再忘</a></div></li>
	<li>
<div><a title="英语学习者的十句经典名言" href="/news-25-1028.html" target="_blank">英语学习者的十句经典名言</a></div></li>
	<li>
<div><a title="英语四六级口语考试及其学习方法" href="/news-155-59023.html" target="_blank">英语四六级口语考试及其学习方法</a></div></li>
	<li>
<div><a title="浅谈高中英语常规教学之高三教学思路" href="/news-193-60104.html" target="_blank">浅谈高中英语常规教学之高三教学思路</a></div></li>
	<li>
<div><a style="color: red;" title="英语应该这样去学" href="/news-193-57524.html" target="_blank">英语应该这样去学</a></div></li>
	<li>
<div><a title="一个人的PETS5的经验" href="/news-193-59098.html" target="_blank">一个人的PETS5的经验</a></div></li>
	<li>
<div><a title="这样去看英语电影定让你英语进步飞速" href="/news-25-59051.html" target="_blank">这样去看英语电影定让你英语进步飞速</a></div></li>
	<li>
<div><a title="关于英语四六级口语考试及其学习方法" href="/news-155-59023.html" target="_blank">关于英语四六级口语考试及其学习方法</a></div></li>
	<li>
<div><a title="10大建议帮你轻松学外语" href="/news-193-58957.html" target="_blank">10大建议帮你轻松学外语</a></div></li>
	<li>
<div><a title="雅思口语应试四大窍门" href="/news-188-58305.html" target="_blank">雅思口语应试四大窍门</a></div></li>
	<li>
<div><a title="多听、多说、多读,打造英语达人" href="/news-25-58206.html" target="_blank">多听、多说、多读,打造英语达人</a></div></li>
	<li>
<div><a title="口译听力绝招:应对新闻听力十法" href="/news-193-58203.html" target="_blank">口译听力绝招:应对新闻听力十法</a></div></li>
	<li>
<div><a title="学习英文词汇的十个超有用的技巧" href="/news-193-58202.html" target="_blank">学习英文词汇的十个超有用的技巧</a></div></li>
	<li>
<div><a title="教育专家揭秘中美教育误差" href="/news-25-58199.html" target="_blank">教育专家揭秘中美教育误差</a></div></li>
</div>
</div>
<div class="rightpicadmiddle"><script type="text/javascript">// <!&#91;CDATA&#91;
 BAIDU_CLB_fillSlot("184423");
// &#93;&#93;></script></div>
<div class="NewsTop">
<div id="NewsTop_tit">
<p class="topTit">听力排行</p>
<p class="topC0">试题</p>
<p class="topC0">视听</p>
<p class="topC0">歌曲</p>
<p class="topC0">电影</p>

</div>
<div id="NewsTop_cnt"><span> </span> <span> <a href="/res-177-7777700003481.html" target="_blank">初中中考模拟训练一09</a>
<a href="/res-267-7777700006319.html" target="_blank">初中中考模拟训练五44-45</a>
<a href="/res-256-7777700005806.html" target="_blank">2006年高考听力模拟0202</a>
<a href="/res-357-7777700009106.html" target="_blank">四级试点考试听力新题型18</a>
<a href="/res-177-7777700003480.html" target="_blank">初中中考模拟训练一08</a>
<a href="/res-114-7777700002570.html" target="_blank">2003年北京西城区中考听力16-20</a>
<a href="/res-357-7777700009358.html" target="_blank">四级试点考试听力新题型29-31</a>
<a href="/res-15-7777700000280.html" target="_blank">初中英语长对话理解</a>
<a href="/res-259-7777700005835.html" target="_blank">2006年高考听力模拟0317-20</a>
<a href="/res-294-7777700006432.html" target="_blank">2005年全国卷高考英语听力10-12</a>
</span> <span> <a href="/res-1394-7777700044748.html" target="_blank">《新概念英语》(美音)III-58</a>
<a href="/res-400-7777700010598.html" target="_blank">初中英语词汇初一(字母)上 a-h</a>
<a href="/res-1752-7777700081943.html" target="_blank">新东方美国口语 01</a>
<a href="/res-488-7777700004147.html" target="_blank">新概念英语第二册13-01</a>
<a href="/res-1488-7777700045662.html" target="_blank">高二英语第三学期听力U01 Words and expressions</a>
<a href="/res-1937-7777700064367.html" target="_blank">第十届21世纪杯全国英语演讲比赛冠军——夏鹏</a>
<a href="/res-496-7777700003845.html" target="_blank">新概念英语第一册578h版09-3</a>
<a href="/res-1392-7777700049530.html" target="_blank">《新概念英语》(美音)I-115</a>
<a href="/res-1393-7777700044658.html" target="_blank">《新概念英语》(美音)II-64</a>
<a href="/res-1395-7777700044770.html" target="_blank">《新概念英语》(美音)IV-04</a>
</span> <span> <a href="/res-1674-7777700106999.html" target="_blank">Lady GaGa -Bad Romance</a>
<a href="/res-1674-7777700104116.html" target="_blank">sophie zelmani -- I can't change</a>
<a href="/res-1076-7777700027956.html" target="_blank">015插曲interlude - timi yuro </a>
<a href="/res-873-7777700088534.html" target="_blank">周华健 - 萍水相逢 -英文版</a>
<a href="/res-1674-7777700115641.html" target="_blank">Greatest-Lady GaGa</a>
<a href="/res-1674-7777700122460.html" target="_blank">Hayley Sales - more than you know</a>
<a href="/res-1102-7777700058053.html" target="_blank">法语歌曲 Deux pieds</a>
<a href="/res-1476-7777700054562.html" target="_blank">Don’t U Walk Away-Kay B</a>
<a href="/res-204-7777700001050.html" target="_blank">英文歌曲欣赏 casablanca - bertie higgins</a>
<a href="/res-204-7777700007007.html" target="_blank">经典英文歌曲收藏take me home,country road</a>
</span> <span> <a href="/res-134-7777700005306.html" target="_blank">英文爱情片傲慢与偏见 A</a>
<a href="/res-1401-7777700120105.html" target="_blank">动画学英语:芭比公主之梦幻仙境节选</a>
<a href="/res-1843-7777700107370.html" target="_blank">第一段susan的婚礼</a>
<a href="/res-134-7777700005318.html" target="_blank">英文爱情片简.爱 A</a>
<a href="/res-134-7777700005294.html" target="_blank">英文爱情片乱世佳人 A</a>
<a href="/res-2144-7777700126722.html" target="_blank">《料理鼠王》 讲解5</a>
<a href="/res-1120-7777700030463.html" target="_blank">难以忽略的真相2</a>
<a href="/res-134-7777700005909.html" target="_blank">英文爱情片鬼马小精灵 1</a>
<a href="/res-134-7777700005307.html" target="_blank">英文爱情片傲慢与偏见 B</a>
<a href="/res-134-7777700005297.html" target="_blank">英文爱情片乱世佳人 D</a>
</span></div>
</div>
<div class="rightpicadtop"><script type="text/javascript">// <!&#91;CDATA&#91;
 BAIDU_CLB_fillSlot("184421");
// &#93;&#93;></script></div>
<div class="rightgoodnewstitle boxtitle">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="2"><img src="http://images.cnblogs.com/boxtitleleft.gif" alt="" /></td>
<td class="boxtitlename" width="70">英语阅读</td>
<td width="2"><img src="http://images.cnblogs.com/boxtitleright.gif" alt="" /></td>
<td class="boxtitleright" width="226"><a href="/newslist-92-1.html" target="_blank">考试</a> <a href="/newslist-24-1.html" target="_blank">经验</a> <a href="/newslist-124-1.html" target="_blank">好文</a> <a href="/newslist-50-1.html" target="_blank">谚语</a> <a href="/newslist-59-1.html" target="_blank">寓言</a> <a href="/newslist-55-1.html" target="_blank">名著</a> <a href="/newslist-104-1.html" target="_blank">剧本</a></td>
</tr>
</tbody>
</table>
</div>
<div class="rightgoodnewscontent commbox">
<div class="rightgoodnewstext">
<div class="rightgoodnewspic fl"><a href="/newslist-132-1.html" target="_blank"><img src="http://www.ebigear.com/images/pictures/2007/10/20071020000544kJJ5.jpg" alt="" />
<span>在线语法精讲</span></a> <a href="/newslist-116-1.html" target="_blank"><img src="http://www.ebigear.com/images/pictures/2007/10/20071020001149QcPt.jpg" alt="" />
<span>英文笑话幽默</span></a></div>
<div class="rightgoodnewslist fr">
	<li>
<div><a href="/news-42-75222.html" target="_blank">女人吸烟:潜移默化让你变丑</a></div></li>
	<li>
<div><a style="color: red;" href="/news-39-75201.html" target="_blank">今年十月底全球人口将达70亿</a></div></li>
	<li>
<div><a href="/news-39-75184.html" target="_blank">早餐要吃鸡蛋的7个原因</a></div></li>
	<li>
<div><a href="/news-39-75181.html" target="_blank">哲理美文:生活就像自助餐</a></div></li>
	<li>
<div><a style="font-weight: bold; color: blue;" href="/news-29-75148.html" target="_blank">天下老板没好人?英国职场冷暴力加剧</a></div></li>
	<li>
<div><a href="/news-38-75147.html" target="_blank">默多克四面楚歌 传媒帝国或遭瓦解</a></div></li>
	<li>
<div><a style="color: green;" href="/news-194-75009.html" target="_blank">生命中最重要的一天</a></div></li>
	<li>
<div><a href="/news-538-75243.html" target="_blank">要做母亲的麦当娜</a></div></li>
</div>
</div>
</div>
<script type="text/javascript">// <!&#91;CDATA&#91;
			var Tags=document.getElementById('NewsTop_tit').getElementsByTagName('p'); 			var TagsCnt=document.getElementById('NewsTop_cnt').getElementsByTagName('span'); 			var len=Tags.length; 			var flag=1;//修改默认值			for(i=1;i<len;i++)			{				Tags&#91;i&#93;.value = i;				Tags&#91;i&#93;.onmouseover=function(){changeNav(this.value)}; 				TagsCnt&#91;i&#93;.className='undis';				}			Tags&#91;flag&#93;.className='topC1';			TagsCnt&#91;flag&#93;.className='dis';			function changeNav(v)			{					Tags&#91;flag&#93;.className='topC0';				TagsCnt&#91;flag&#93;.className='undis';				flag=v;					Tags&#91;v&#93;.className='topC1';				TagsCnt&#91;v&#93;.className='dis';			}
// &#93;&#93;></script>

</div>
</div>
<div class="nodedir">
<div class="nodedirtitle boxtitle">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td width="2"><img src="http://images.cnblogs.com/boxtitleleft.gif" alt="" /></td>
<td class="boxtitlename" width="128">听力资料目录导航</td>
<td width="2"><img src="http://images.cnblogs.com/boxtitleright.gif" alt="" /></td>
<td class="boxtitleright" width="828"></td>
</tr>
</tbody>
</table>
</div>
<div class="nodedircontent commbox">
<table>
<tbody>
<tr class="bignodetitle">
<td><a href="/reslist-1-1.html" target="_blank">听力测试</a></td>
<td><a href="/reslist-399-1.html" target="_blank">英语词汇</a></td>
<td><a href="/reslist-437-1.html" target="_blank">英语口语</a></td>
<td><a href="/reslist-394-1.html" target="_blank">考试英语</a></td>
<td><a href="/reslist-207-1.html" target="_blank">品牌英语</a></td>
<td><a href="/reslist-415-1.html" target="_blank">大学教材</a></td>
<td><a href="/reslist-236-1.html" target="_blank">其他教材</a></td>
<td><a href="/reslist-78-1.html" target="_blank">商务英语</a></td>
<td><a href="/reslist-81-1.html" target="_blank">广播英语</a></td>
<td><a href="/reslist-29-1.html" target="_blank">儿童英语</a></td>
</tr>
<tr>
<td><a href="/reslist-142-1.html" target="_blank">历年中考听力</a>
<a href="/reslist-176-1.html" target="_blank">初中中考模拟</a>
<a href="/reslist-89-1.html" target="_blank">历年高考听力</a>
<a href="/reslist-280-1.html" target="_blank">高考听力模拟</a>
<a href="/reslist-115-1.html" target="_blank">历年四级听力</a>
<a href="/reslist-100-1.html" target="_blank">历年六级听力</a>
<a href="/reslist-296-1.html" target="_blank">四级听力模拟</a></td>
<td><a href="/reslist-772-1.html" target="_blank">小学</a> <a href="/reslist-400-1.html" target="_blank">初中</a>
<a href="/reslist-401-1.html" target="_blank">高中</a> <a href="/reslist-460-1.html" target="_blank">四级</a>
<a href="/reslist-460-1.html" target="_blank">六级</a> <a href="/reslist-461-1.html" target="_blank">考研</a>
<a href="/reslist-739-1.html" target="_blank">托福</a> <a href="/reslist-700-1.html" target="_blank">GRE</a>
<a href="/reslist-462-1.html" target="_blank">星火记忆单词</a>
<a href="/reslist-645-1.html" target="_blank">用Mp3背单词</a>
<a href="/reslist-720-1.html" target="_blank">刘毅词汇记忆</a></td>
<td><a href="/reslist-856-1.html" target="_blank">情景英语口语</a>
<a href="/reslist-630-1.html" target="_blank">4+1听力口语</a>
<a href="/reslist-438-1.html" target="_blank">出国实用会话</a>
<a href="/reslist-445-1.html" target="_blank">英语口语8000句</a>
<a href="/reslist-696-1.html" target="_blank">新东方900句</a>
<a href="/reslist-738-1.html" target="_blank">美语听力与发音</a>
<a href="/reslist-842-1.html" target="_blank">ABC到流利口语</a></td>
<td><a href="/reslist-676-1.html" target="_blank">口译考试</a>
<a href="/reslist-707-1.html" target="_blank">剑桥考试</a>
<a href="/reslist-430-1.html" target="_blank">中高考考试</a>
<a href="/reslist-431-1.html" target="_blank">大学四六级考试</a>
<a href="/reslist-395-1.html" target="_blank">研究生考试</a>
<a href="/reslist-780-1.html" target="_blank">公共英语考试</a>
<a href="/reslist-784-1.html" target="_blank">英语专业考试</a></td>
<td><a href="/reslist-65-1.html" target="_blank">新概念</a> <a href="/reslist-896-1.html" target="_blank">六人行</a>
<a href="/reslist-317-1.html" target="_blank">赖世雄</a> <a href="/reslist-895-1.html" target="_blank">许国璋</a>
<a href="/reslist-897-1.html" target="_blank">走遍美国</a> <a href="/reslist-874-1.html" target="_blank">越狱</a>
<a href="/reslist-894-1.html" target="_blank">疯狂英语</a> <a href="/reslist-225-1.html" target="_blank">沛沛</a>
<a href="/reslist-468-1.html" target="_blank">语法讲座</a> <a href="/reslist-563-1.html" target="_blank">动感</a>
<a href="/reslist-233-1.html" target="_blank">大山英语</a> <a href="/reslist-167-1.html" target="_blank">探索</a>
<a href="/reslist-397-1.html" target="_blank">千万别学英语</a></td>
<td><a href="/reslist-237-1.html" target="_blank">大学英语听力</a>
<a href="/reslist-239-1.html" target="_blank">大学英语精读</a>
<a href="/reslist-238-1.html" target="_blank">全新版</a> <a href="/reslist-285-1.html" target="_blank">21世纪</a>
<a href="/reslist-358-1.html" target="_blank">新视野</a> <a href="/reslist-370-1.html" target="_blank">实用综</a>
<a href="/reslist-804-1.html" target="_blank">大学体验</a> <a href="/reslist-471-1.html" target="_blank">新编</a>
<a href="/reslist-304-1.html" target="_blank">成人</a><a href="/reslist-803-1.html" target="_blank">自考</a> <a href="/reslist-624-1.html" target="_blank">step</a>
<a href="/reslist-388-1.html" target="_blank">Listen this way</a></td>
<td><a href="/reslist-536-1.html" target="_blank">广州版小学英语</a>
<a href="/reslist-525-1.html" target="_blank">广州版初中英语</a>
<a href="/reslist-655-1.html" target="_blank">剑桥少儿英语</a>
<a href="/reslist-849-1.html" target="_blank">朗文3L看听学</a>
<a href="/reslist-664-1.html" target="_blank">Goforit新目标</a>
<a href="/reslist-283-1.html" target="_blank">高中英语课本</a>
<a href="/reslist-572-1.html" target="_blank">进阶听说教程</a></td>
<td><a href="/reslist-765-1.html" target="_blank">商务英语300句 </a>
<a href="/reslist-420-1.html" target="_blank">VOA商务英语</a>
<a href="/reslist-210-1.html" target="_blank">商业英语视频</a>
<a href="/reslist-884-1.html" target="_blank">中级商务英语</a>
<a href="/reslist-702-1.html" target="_blank">初级剑桥证书 </a>
<a href="/reslist-760-1.html" target="_blank">新编剑桥英语</a>
<a href="/reslist-79-1.html" target="_blank">剑桥英语精华版</a></td>
<td><a href="/reslist-822-1.html" target="_blank">2007年VOA慢速</a>
<a href="/reslist-421-1.html" target="_blank">VOA中级美语</a>
<a href="/reslist-574-1.html" target="_blank">美国习惯用语</a>
<a href="/reslist-648-1.html" target="_blank">VOA流行美语</a>
<a href="/reslist-171-1.html" target="_blank">澳广播英语讲座 </a>
<a href="/reslist-82-1.html" target="_blank">在线大学课堂</a>
<a href="/reslist-877-1.html" target="_blank">VOA视频节目</a></td>
<td><a href="/reslist-32-1.html" target="_blank">宝宝ABC</a>
<a href="/reslist-31-1.html" target="_blank">棒棒英语</a>
<a href="/reslist-33-1.html" target="_blank">哈哈美语</a>
<a href="/reslist-30-1.html" target="_blank">LittleFox儿歌</a>
<a href="/reslist-88-1.html" target="_blank">英语儿童故事</a>
<a href="/reslist-672-1.html" target="_blank">380英语小故事</a>
<a href="/reslist-875-1.html" target="_blank">1035个英语单词</a></td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="ajaxReport" style="display: none;">
<table cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td id="resultTitle">
<div style="float: right; color: #fff; font-weight: bold; cursor: pointer;" onclick="$('#ajaxReport').hide();">×</div>
执行信息</td>
</tr>
<tr>
<td id="resultTd"></td>
</tr>
</tbody>
</table>
</div>
<table id="CopyRight" border="0" cellspacing="0" cellpadding="0" width="960" align="center">
<tbody>
<tr>
<td height="25" align="center">站务客服QQ群:<strong>19012993</strong> 联系客服<a href="http://wpa.qq.com/msgrd?V=1&amp;Uin=4366056&amp;Exe=QQ&amp;Site=www.ebigear.com&amp;Menu=Yes" target="_blank"><img src="/images/qqtalk.gif" border="0" alt="给我发消息" /></a> 站长信箱:ebigear@gmail.com  <a href="http://bbs.ebigear.com/thread-1889-1-1.html" target="_blank">英语交流QQ群</a> <a href="http://bbs.ebigear.com/forum-145-1.html" target="_blank">捐助贫困儿童</a></td>
</tr>
<tr>
<td style="display: none;"></td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="0" width="960" align="center">
<tbody>
<tr>
<td align="center">免责声明:本站只提供资源播放平台,如果站内部分资源侵犯您的权益,请您告知,站长会立即处理。</td>
</tr>
<tr>
<td align="center">Copyright © 2003-2011 大耳朵英语  <a href="http://www.miibeian.gov.cn/" target="_blank">京ICP备10010568号</a></td>
</tr>
</tbody>
</table>
<div style="display: none;"><script src="http://s97.cnzz.com/stat.php?id=2013619&amp;web_id=2013619"></script></div>
<script src="http://www.ebigear.com/script/winpop_common.js"></script>
<div id="rbnotice">
<div class="rbborder">
<p class="caption"><span id="rbtool"><label id="toMin" title="最小化"> </label><label id="toMax" title="最大化"> </label><label id="toClose" title="关闭"> </label></span><span class="title">大耳朵在线聊天</span></p>

<div id="rbnoticecon"><object id="obj_1304475781156" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="260" height="320" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="wmode" value="transparent" /><param name="AllowScriptAccess" value="always" /><param name="AllowNetworking" value="all" /><param name="AllowFullScreen" value="true" /><param name="flashvars" value="cid=1304475781156&amp;a=CCCCCC&amp;b=60&amp;f=50&amp;l=999999&amp;p=12&amp;q=999999&amp;r=100&amp;s=1&amp;v=0&amp;w=0&amp;ab=0&amp;t=0" /><param name="src" value="http://ebigear.chatango.com/group" /><param name="allowfullscreen" value="true" /><embed id="obj_1304475781156" type="application/x-shockwave-flash" width="260" height="320" src="http://ebigear.chatango.com/group" flashvars="cid=1304475781156&amp;a=CCCCCC&amp;b=60&amp;f=50&amp;l=999999&amp;p=12&amp;q=999999&amp;r=100&amp;s=1&amp;v=0&amp;w=0&amp;ab=0&amp;t=0" allowfullscreen="true" allownetworking="all" allowscriptaccess="always" wmode="transparent"> </embed></object></div>
</div>
</div>
<script src="http://v1.jiathis.com/code/jiathis_r.js?type=left&amp;move=0&amp;btn=l3.gif&amp;uid=1511403" type="text/javascript"></script>

2. 我们来分析一下要抓取的文章的链接

<a title="国外英语动画故事-A Country Road" href="/res-92-7777700001981.html" target="_blank">国外英语动画故事-A Country Road</a>
<a title="国外英语动画故事-A Hot Air Balloon" href="/res-92-7777700001982.html" target="_blank">国外英语动画故事-A Hot Air Balloon</a>

经过分析,可以得到 获取链接的正则表达式
/res-92[^\”]+html

得到了我们所需要的链接,如下图

3.得到了所需要的链接,接下来我们就可以进行下一步了。

Regex rg1 = new Regex("/res-92[^\"]+html", RegexOptions.Compiled |RegexOptions.IgnoreCase);
MatchCollection mc=rg1.Matches(html);
foreach (Match a in mc)
{
/*在这里处理每一个链接*/
string catchUrl = @"http://www.ebigear.com" + a.Value;
wRequest = (HttpWebRequest)HttpWebRequest.Create(catchUrl);
wResponse = wRequest.GetResponse();
stream = wResponse.GetResponseStream();
streamReader = new StreamReader(stream);
html = streamReader.ReadToEnd();   //跟之前那样先获取该网页的源代码
Regex rgN = new Regex("\n|\r|\t");
Regex rgReplace = new Regex(""");
Regex rgContent = new Regex("(?&lt;=
).*?(?=

)",RegexOptions.IgnoreCase|RegexOptions.Multiline);
//上面是获取当前网页中文章的内容的正则。
ShowBox.Text+= rgContent.Match(rgReplace.Replace( rgN.Replace(html,""),"\"")).Value+"\n\n\n\n\n"; //要先去掉\n\t\r,不然正则没效果
}

4.结果展示

5.后期格式处理。

这里就不处理了,把<br/> 替换一下就可以了。

就到这里吧,谢谢,睡觉去了。

源码下载

[转载]什么时候使用存储过程比较适合?

mikel阅读(961)

[转载]什么时候使用存储过程比较适合? – 真正的鳄鱼 – 博客园.

当一个事务涉及到多个SQL语句时或者涉及到对多个表的操作时就要考虑用存储过程;当在一个事务的完成需要很复杂的商业逻辑时(比如,对多个数据的操作,对多个状态的判断更改等)要考虑;还有就是比较复杂的统计和汇总也要考虑,但是过多的使用存储过程会降低系统的移植性。

为了系统的控制方便,例如当系统进行调整时,这是只需要将后台存储过程进行更改,而不需要更改客户端程序。也无需重新安装客户端应用程序。

存储过程不仅仅适用于大型项目,对于中小型项目,使用存储过程也是非常有必要的。其威力和优势主要体现在:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行 Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。这些操作,如果用程序来完成,就变成了一条条的 SQL 语句,可能要多次连接数据库。而换成存储,只需要连接一次数据库就可以了。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。

优点:
1.速度快。尤其对于较为复杂的逻辑,减少了网络流量之间的消耗
我有的过程和函数达到了几百行,一个微型编译器,相信用程序就更麻烦了。
2.写程序简单,采用存储过程调用类,调用任何存储过程都只要1-2行代码。
(我不知道别人怎么调用,我是深受其益)
3.升级、维护方便
4.调试其实也并不麻烦,可以用查询分析器
5.如果把所有的数据逻辑都放在存储过程中,那么ASP.NET只需要负责界面的显示阿什么的,出错的可能性最大就是在存储过程。我碰到的就一般是这种情况。

缺点:
1.可移植性差,我一直采用sql server开发,可是如果想卖自己的东西,发现自己简直就是在帮ms卖东西,呵呵。想换成mysql,确实移植麻烦。
2.采用存储过程调用类,需要进行两次调用操作,一次是从sql server中取到过程的参数信息,并且建立参数;第二次才是调用这个过程。多了一次消耗。
不过这个缺点可以在项目开发完成,过程参数完全确定之后,把所有过程参数信息倒入到一个xml文件中来提高性能。

当一个业务同时对多个表进行处理的时候采用存储过程比较合适。

  1. 使用存储过程在一般情况下会提高性能,因为数据库优化了存储过程的数据访问计划并应用缓存方便以后的查询;
  2. 存储过程单独保护存在于数据库中。客户端可以获取权限执行存储过程,而不需要对底层的具体表设置其他的访问权限;
  3. 存储过程会使得维护起来更加方便,因为通常修改一个存储过程要比在一个已经发布的组件中修改SQL语句更加方便;
  4. 存储过程给底层数据格式增添了额外的抽象层。使得使用存储过程的客户端对存储过程的实现细节以及对底层数据格式是隔离独立的;
  5. 存储过程能够缓解网络带宽,因为可以批量执行SQL语句而不是从客户端发送超负载的请求。

复杂的数据处理用存储过程,如有些报表处理

多条件多表联合查询,并做分页处理

[转载]如何利用百度地图API制作房产酒店地图?

mikel阅读(1091)

[转载]如何利用【百度地图API】,制作房产酒店地图? – 酸奶小妹 – 博客园.

摘要:

想亲手制作一张酷讯、去哪儿、安居客、链接地产那样的房产、酒店地图麼?那赶快来学习吧。(以酷讯为例,如下图)

更多成功案例请点击:http://dev.baidu.com/wiki/map/index.php?title=%E6%88%90%E5%8A%9F%E6%A1%88%E4%BE%8B

——————————————————————————————————————————

准备知识:

0、如何创建一张百度地图?   最简单地图的示例:http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&0_0#0&0

1、如何找到百度坐标?    坐标拾取工具:http://dev.baidu.com/wiki/static/map/API/tool/getPoint/

2、如何制作自定义覆盖物 自定义覆盖物示例:http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&3_12#3&12

3、如果填写信息窗口内容?   信息窗口支持html语句:http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&4_2#4&2

4、如何打开信息窗口?    方法:openInfoWindow

——————————————————————————————————————————

教学开始~

0、如何创建百度地图?

打开记事本,拷贝以下代码,并把文件保存为htm格式。比如map.htm。然后双击图标运行。点击这里运行

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>百度地图的Hello, World</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>
</head>
<body>
<div style="width:520px;height:340px;border:1px solid gray" id="container"></div>
</body>
</html>
<script type="text/javascript">
var map = new BMap.Map("container");            // 创建Map实例
var point = new BMap.Point(116.404, 39.915);    // 创建点坐标
map.centerAndZoom(point,15);                     // 初始化地图,设置中心点坐标和地图级别。

</script>

1、如何找到百度坐标?

利用百度提供的坐标拾取工具(网址:http://dev.baidu.com/wiki/static/map/API/tool/getPoint/)获取10个坐标点。

如下图,我输入“酒店”,在右侧会出现一些酒店的经纬度。也可直接在地图上点击,获取经纬度!

这样,我获取了10个经纬度,并把它们保存到一个数组里。我把获取的坐标全部罗列出来。

var point = [   //10个坐标点
new BMap.Point(116.411776,39.942833),
new BMap.Point(116.320791,40.003682),
new BMap.Point(116.275186,39.896095),
new BMap.Point(116.425098,39.946249),
new BMap.Point(116.359823,39.984761),
new BMap.Point(116.316479,39.98323),
new BMap.Point(116.385986,39.946124),
new BMap.Point(116.427545,40.00796),
new BMap.Point(116.446965,39.911603),
new BMap.Point(116.454579,39.946652)];

利用这些点创建标注,并且打到地图上。为了让大家看得清楚,这里就不使用循环了。如下:

var marker1 = new BMap.Marker(point[1]);  // 创建10个标注
var marker2 = new BMap.Marker(point[2]);
var marker3 = new BMap.Marker(point[3]);
var marker4 = new BMap.Marker(point[4]);
var marker5 = new BMap.Marker(point[5]);
var marker6 = new BMap.Marker(point[6]);
var marker7 = new BMap.Marker(point[7]);
var marker8 = new BMap.Marker(point[8]);
var marker9 = new BMap.Marker(point[9]);
var marker10 = new BMap.Marker(point[0]);

map.addOverlay(marker1);              // 将标注添加到地图中
map.addOverlay(marker2);
map.addOverlay(marker3);
map.addOverlay(marker4);
map.addOverlay(marker5);
map.addOverlay(marker6);
map.addOverlay(marker7);
map.addOverlay(marker8);
map.addOverlay(marker9);
map.addOverlay(marker10);

这里,一定要记得,如何给地图添加了标注,又没有调整到合适的地图视野,那些标注是看不见的。需要调整视野

map.setViewport(point);         //调整地图的最佳视野为显示标注数组point

2、自定义覆盖物

如果你不满意标注图标,可以自己选择1)改变icon,或者2)自定义覆盖物。

1)改变icon

var myIcon = new BMap.Icon("http://dev.baidu.com/wiki/static/map/API/examples/images/Mario.png", new BMap.Size(32, 70), {    //小车图片
//offset: new BMap.Size(0, -5),    //相当于CSS精灵
imageOffset: new BMap.Size(0, 0)    //图片的偏移量。为了是图片底部中心对准坐标点。
});

var carMk = new BMap.Marker(point[0],{icon:myIcon});  //创建标注
map.addOverlay(carMk);    //添加marker到地图上

2)自定义覆盖物的示例:http://dev.baidu.com/wiki/static/map/API/examples/?v=1.2&3_12#3&12

到现在为止,你的地图会显示成这个样子。记得第一个标注麼?它已经被你设置成超级马里奥了!!

3、信息窗口内容

信息窗口里支持任意的htm代码。你可以这样来创建一个信息窗口。记住,要先定义opts,再定义信息窗口。简单的代码如下:

var opts = {
width : 250,     // 信息窗口宽度
height: 100,     // 信息窗口高度
title : "Hello"  // 信息窗口标题
}
var infoWindow = new BMap.InfoWindow("World", opts);  // 创建信息窗口对象

复杂信息窗口的内容这样写,如下:

var opts1 = {title : '<span style="font-size: 14px; color: #0a8021;">如家快捷酒店</span>'};

var infoWindow1 = new BMap.InfoWindow("
<div style="line-height: 1.8em; font-size: 12px;"><strong>地址:</strong>北京市朝阳区高碑店小学旁
<strong>电话:</strong>010-59921010
<strong>口碑:</strong><img src="http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png" alt="" /><img src="http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png" alt="" /><img src="http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png" alt="" /><img src="http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png" alt="" /><img src="http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png" alt="" /><a style="text-decoration: none; color: #2679ba; float: right;" href="#">详情&gt;&gt;</a></div>
", opts1);  // 创建信息窗口对象,引号里可以书写任意的html语句。

4、打开信息窗口

给标注添加鼠标事件,当鼠标滑过标注的时候,打开信息窗口。

marker.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow);});

所以,到现在为止,你的地图应该呈现这样一幅景象。

本案例全部代码如下:


酷讯酒店地图
<script src="http://api.map.baidu.com/api?v=1.2" type="text/javascript"></script>
 <script type="text/javascript">// <![CDATA[
var map = new BMap.Map("container");
var point = new BMap.Point(116.404, 39.915);
map.centerAndZoom(point, 14);

var myIcon = new BMap.Icon("http://dev.baidu.com/wiki/static/map/API/examples/images/Mario.png", new BMap.Size(32, 70), {    //小车图片
    offset: new BMap.Size(0, -5),    //相当于CSS精灵
    imageOffset: new BMap.Size(0, 0)    //图片的偏移量。为了是图片底部中心对准坐标点。
  });

var point = [new BMap.Point(116.411776,39.942833),new BMap.Point(116.320791,40.003682),new BMap.Point(116.275186,39.896095),new BMap.Point(116.425098,39.946249),new BMap.Point(116.359823,39.984761),new BMap.Point(116.316479,39.98323),new BMap.Point(116.385986,39.946124),new BMap.Point(116.427545,40.00796),new BMap.Point(116.446965,39.911603),new BMap.Point(116.454579,39.946652)];   //10个坐标点

var marker1 = new BMap.Marker(point[1],{icon:myIcon});  // 创建10个标注
var marker2 = new BMap.Marker(point[2],{icon:myIcon});
var marker3 = new BMap.Marker(point[3],{icon:myIcon});
var marker4 = new BMap.Marker(point[4],{icon:myIcon});
var marker5 = new BMap.Marker(point[5],{icon:myIcon});
var marker6 = new BMap.Marker(point[6],{icon:myIcon});
var marker7 = new BMap.Marker(point[7],{icon:myIcon});
var marker8 = new BMap.Marker(point[8],{icon:myIcon});
var marker9 = new BMap.Marker(point[9],{icon:myIcon});
var marker0 = new BMap.Marker(point[0],{icon:myIcon});

map.addOverlay(marker1);              // 将标注添加到地图中
map.addOverlay(marker2);
map.addOverlay(marker3);
map.addOverlay(marker4);
map.addOverlay(marker5);
map.addOverlay(marker6);
map.addOverlay(marker7);
map.addOverlay(marker8);
map.addOverlay(marker9);
map.addOverlay(marker0);

map.setViewport(point);         //调整地图的最佳视野为显示标注数组point

var opts1 = {title : '<span style="font-size:14px;color:#0A8021">如家快捷酒店</span>'};
var opts2 = {title : '<span style="font-size:14px;color:#0A8021">昆仑大厦</span>'};
var opts3 = {title : '<span style="font-size:14px;color:#0A8021">华夏银行</span>'};
var opts4 = {title : '<span style="font-size:14px;color:#0A8021">成都小吃</span>'};
var opts5 = {title : '<span style="font-size:14px;color:#0A8021">锦绣大饭店</span>'};
var opts6 = {title : '<span style="font-size:14px;color:#0A8021">七天快捷酒店</span>'};
var opts7 = {title : '<span style="font-size:14px;color:#0A8021">中央民族大学</span>'};
var opts8 = {title : '<span style="font-size:14px;color:#0A8021">昌平汽车专修学院</span>'};
var opts9 = {title : '<span style="font-size:14px;color:#0A8021">百度大厦</span>'};
var opts0 = {title : '<span style="font-size:14px;color:#0A8021">海尔电器销售点</span>'};

var infoWindow1 = new BMap.InfoWindow("
<div style='line-height:1.8em;font-size:12px;'><b>地址:</b>北京市朝阳区高碑店小学旁</br><b>电话:</b>010-59921010</br><b>口碑:</b><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><a style='text-decoration:none;color:#2679BA;float:right' href='#'>详情>></a></div>
", opts1);  // 创建信息窗口对象,引号里可以书写任意的html语句。
var infoWindow2 = new BMap.InfoWindow("
<div style='line-height:1.8em;font-size:12px;'><b>地址:</b>北京市海淀区紫竹院123号</br><b>电话:</b>010-59921010</br><b>口碑:</b><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><a style='text-decoration:none;color:#2679BA;float:right' href='#'>详情>></a></div>
", opts2);
var infoWindow3 = new BMap.InfoWindow("
<div style='line-height:1.8em;font-size:12px;'><b>地址:</b>北京市海淀区紫竹院123号</br><b>电话:</b>010-59921010</br><b>口碑:</b><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><a style='text-decoration:none;color:#2679BA;float:right' href='#'>详情>></a></div>
", opts3);
var infoWindow4 = new BMap.InfoWindow("
<div style='line-height:1.8em;font-size:12px;'><b>地址:</b>北京市海淀区紫竹院123号</br><b>电话:</b>010-59921010</br><b>口碑:</b><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><a style='text-decoration:none;color:#2679BA;float:right' href='#'>详情>></a></div>
", opts4);
var infoWindow5 = new BMap.InfoWindow("
<div style='line-height:1.8em;font-size:12px;'><b>地址:</b>北京市朝阳区高碑店小学旁</br><b>电话:</b>010-59921010</br><b>口碑:</b><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><a style='text-decoration:none;color:#2679BA;float:right' href='#'>详情>></a></div>
", opts5);
var infoWindow6 = new BMap.InfoWindow("
<div style='line-height:1.8em;font-size:12px;'><b>地址:</b>北京市大钟寺沧澜大厦</br><b>电话:</b>010-59921010</br><b>口碑:</b><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><a style='text-decoration:none;color:#2679BA;float:right' href='#'>详情>></a></div>
", opts6);
var infoWindow7 = new BMap.InfoWindow("
<div style='line-height:1.8em;font-size:12px;'><b>地址:</b>北京市朝阳区高碑店小学旁</br><b>电话:</b>010-59921010</br><b>口碑:</b><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><a style='text-decoration:none;color:#2679BA;float:right' href='#'>详情>></a></div>
", opts7);
var infoWindow8 = new BMap.InfoWindow("
<div style='line-height:1.8em;font-size:12px;'><b>地址:</b>北京市哇哈哈路鲜鱼一条街</br><b>电话:</b>010-59921010</br><b>口碑:</b><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><a style='text-decoration:none;color:#2679BA;float:right' href='#'>详情>></a></div>
", opts8);
var infoWindow9 = new BMap.InfoWindow("
<div style='line-height:1.8em;font-size:12px;'><b>地址:</b>北京市朝阳区高碑店小学旁</br><b>电话:</b>010-59921010</br><b>口碑:</b><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><a style='text-decoration:none;color:#2679BA;float:right' href='#'>详情>></a></div>
", opts9);
var infoWindow0 = new BMap.InfoWindow("
<div style='line-height:1.8em;font-size:12px;'><b>地址:</b>北京市朝阳区高碑店小学旁</br><b>电话:</b>010-59921010</br><b>口碑:</b><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><img src='http://cdn2.iconfinder.com/data/icons/diagona/icon/16/031.png' /><a style='text-decoration:none;color:#2679BA;float:right' href='#'>详情>></a></div>
", opts0);

marker1.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow1);});
marker2.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow2);});
marker3.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow3);});
marker4.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow4);});
marker5.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow5);});
marker6.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow6);});
marker7.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow7);});
marker8.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow8);});
marker9.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow9);});
marker0.addEventListener("mouseover", function(){this.openInfoWindow(infoWindow0);});
// ]]></script>

[转载]【高效程序员系列】2、别做机器人——让工作自动化

mikel阅读(947)

[转载]【高效程序员系列】2、别做机器人——让工作自动化 – Alex Leo – 博客园.

每天打开电脑,首先要做的是打开最常用的软件:要和朋友联系,你打开了QQ;要收邮件, 你打开了Outlook;要听音乐,你打开了酷狗……但是你不想做机器人,每天重复的打开这些软件,于是你让它们开机启动。恭喜,你有不做机器人的基本思 想。这些简单重复的操作扔给电脑吧,你需要把宝贵的精力用来做其他更有价值的事。但是聪明的你有没有想过,日常工作中有没有其他事也可以丢给电脑,让你摆 脱机械的操作?下面分享一下我的经验,如果你也有相关的经验,希望也拿出来和大家一起分享!

1、VS代码段的使用和定义

在使用Visual Studio编程的时候,你肯定会喜欢智能提示,还有代码段的功能。比如输入foreach:

clip_image001

按下Tab,就出来了一个固定格式的代码段:

clip_image002

在编辑器中按下Ctrl+K,Ctrl+X,就可以查看代码段定义了,如下图:

clip_image003

如果你正在使用VS2008,可以在菜单中找到代码段管理器:

clip_image004

其中列出了系统自带的代码段(不明白为什么VB的那么多,C#的那么少。其实现在VB和C#没多大区别,代码段上也应该做到平等。):

clip_image005

clip_image006

相信你应该对一些常用的代码段应用非常熟练了,比如prop,for,if,try。其实代码段也是可以自己定义的,废话少说,下面就介绍一下代码段的定义。

这里介绍三个工具(都是免费的):

(1)Snippet Editor(下载地址

这是一个独立的软件,而且是绿色版的。解压之后运行SnippetEditor.exe即可。来看一下它的界面:

clip_image007

它会自动识别当前机器上安装的VS版本,然后在左上角列出来。选择不同的版本,左边的树控件会列出该版本的代码段定义。双击代码段文件,左边的编辑 区列出编辑的信息。而在状态栏会显示出当前编辑文件的路径。要创建代码段,单击工具栏上的“New”按钮即可。下面针对编辑区的操作进行讲解:

【Properties】
Title 标题,必须输入,就是显示在树控件中的节点名称
Description 描述,对代码段的详细解释,在VS中输入代码段时会提示
Author 作者,写上自己的大名吧
Shortcut 缩写,在编辑器中输入定义的Shortcut,按下Tab键,即可输入代码段
Language 编程语言,可选HTML、JScript、Visual Basic、Visual C#、Visual J#、XML
Kind 代码段类型,可选Class declaration、Member declaration、Member body、Unspecified,一般选择默认Unspecified即可
Help Url 帮助URL,如果有就输入
【Code】

该区域包含两部分,上面是文本编辑框,下面是参数编辑框。现在文本编辑框中输入代码模板,然后将光标定位在需要变动的地方,点击下方工具栏上面的 “新增”按钮,软件会在文本编辑框中插入一段格式为“$NewLiteral$”的文本,其中NewLiteral即模板参数的名称,根据自己的需要修改 即可。下面列出模板参数的属性解释:

ID 模板参数的名称,在一个模板里不重复即可
Defaults to 该参数的默认值,定义为最常用的默认值,在输入的时候就可以不用再输入了,比如字符串就定义为””,数字就定义为0
Kind 参数类型,可选Literal、Object,一般选择默认的Literal即可
Type 参数的数据类型,一般不需要输入。如果Kind选择为Object,则最好输入参数的数据类型。
Tooltip 提示信息
Function 生成代码的方法,一般不需要输入。在一些特殊场合需要,比如switch代码段中,它会自动列出枚举的值。
Editable 是否可以编辑

定义代码段没什么难度,参考系统中默认的代码段就可以写出自己代码段,可以大大提高输入代码的速度。这里有两个特殊的模板常 量,$end$和$selected$。“$end$”是用来定义在VS中输入完代码段之后,光标定位在什么地方。“$selected$”一般用于多行 代码,我分析了一下系统代码段,感觉没什么实际用途。

【References】

该区域是用来记录要添加哪些dll引用,但是它并不会真的自动去引用,这里只是记录。

【Imports】

该区域是用来记录要在代码中添加哪些命名空间,它也不会真正去添加命名空间。

编辑完成之后点击“Save”按钮保存,然后把该文件放到自定义代码段文件夹中。该文件夹位于“%我的文档%\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets”或者“D:\Program Files\Microsoft Visual Studio 10.0\VC#\Snippets\2052\My Snippets”,根据自己安装的路径和编程语言查找。将定义的代码段文件放到该文件夹中,再打开VS,输入快捷键然后按下Tab,你定义的代码段就可 以被输入了。

(2)SnippetDesignerSetup-For VS2008.msi(下载地址

这个是给VS2008使用的插件,解压之后安装即可。然后新建一个后缀名的.snippet的文件,用VS2008打开,则会调用安装的插件来编辑代码段。

clip_image008

个人更喜欢第一种方法,所以在此对插件方法不做详细介绍,如果需要了解详细操作步骤可以参考http://snippetdesigner.codeplex.com/wikipage?title=createFromScratch&referringTitle=Documentation,英文的。

(3)SnippetDesigner-For VS2010.vsix(下载地址

这是针对VS2010的扩展,和VS2008不一样,不在需要安装到系统中,双击后会添加到VS2010的扩展中。装好装好会在VS2010中会添加一个文件模板,可以直接在VS2010中新建一个snippet文件:

clip_image009

顺便提一句,VS2010有很多扩展,可以联网下载,打开扩展管理器即可:

clip_image010

2、代码段编译Snippet Compiler

Snippet Compiler(下载地址) 是一个基于 Windows 的小型应用程序,你可以通过它来编写、编译和运行代码。如果你具有较小的代码段,并且你不想创建完整的 Visual Studio .NET 项目(以及该项目附带的所有文件),则该工具会很有用。用一句话概括它的功能:它是一个支持多种编程语言、多个版本的.NET框架、多个代码文件、带智能 提示的编辑和编译软件。下面是它的界面,如果需要详细了解,可以参考:http://www.cnblogs.com/conexpress/archive/2011/07/24/2115308.html

clip_image011

3、SQL智能提示和代码段

上面提到了在VS中可以使用智能提示和代码段输入功能,另一个最常用的软件就是SQL Server。但是这么多年了,SQL Server一直没有智能提示功能,直到SQL Server 2008才加入了字段提示功能,但是和VS的智能提示相比,相差十万八千里。如果你还在吭哧吭哧一个一个字段敲SQL代码的话,这里强烈推荐你使用SQL Prompt。它不仅可以提示字段,还能插入代码段,而且代码段还能自己定义……关于它的种种好处这里就不详述了,当你掌握它之后,效率提高不止一两倍。 具体的用法可以参考http://www.cnblogs.com/conexpress/archive/2011/07/28/2120432.html#

clip_image012

4、代码自动生成

作为.NET开发人员,手边有一款代码生成工具必不可少。最出名的代码生成工具就要算是CodeSmith了,它功能强大,简单易懂,很容易上手。如果你还不会用CodeSmith,那就赶紧去学习吧。可以参考TerryLee的系列文章:http://terrylee.cnblogs.com/archive/2005/12/28/306254.aspx

clip_image013

CodeSmith是一款商业软件,需要花钱购买的。如果你很尊重版权,又不想花钱购买,推荐你另一款同样强大的免费工具:MyGeneration,也是完全基于模板引擎进行代码生成的,功能上并不比CodeSmith差。可以到http://sourceforge.net/projects/mygeneration/ 下载,也可以参考http://www.docin.com/p-83919214.html 学习如何使用。

clip_image014

5、脚本工具

脚本工具Au3、AHK、Python、Ruby、Windows Power Shell等

虽然现在的工具都有很好的IDE界面,但是有时候脚本工具却能带来更高的效率。而且有些功能用脚本语言很容易实现,但是换成其他语言就比较麻烦了。

(1)Au3

Au3的全名是AutoIt3,它是一种类似于VB的脚本语言,设计的初衷就是为了让工作自动化。下面列举一下它的特点:

语法类似VB,很容易理解。

编辑器带智能提示,感觉这一点比VB6强大,有点像VS2005之后的代码编辑器。

可以很方便的操作鼠标和键盘,也可以录制操作过程,类似于宏。

可以设置快捷键,组合Ctrl、Alt、Shift、Win和其他键,按下快捷键即可执行对应的操作。

可以编译成exe文件独立运行,而且支持Win7。

有类似于VB的界面设计器,可以设计具有Windows界面的应用程序。

具有强大的扩展库,很容易的操作系统、Win32API、网络、文件、数据库、注册表、ini文件……

如下图,可以用类似C语言的#include引入扩展文件,代码可以折叠,甚至有类似于C#的#Region折叠。

clip_image015

界面设计器,感觉和VB6的设计器差不多,还能插入Win32控件。

clip_image016

它包含强大的扩展库,涉及到文件、GDI+、界面、网络、数学、进程、内存、数据库、Office、音频、视频……如下图:

clip_image017

至于它的应用场景就很广泛了,最常用的就是执行大量重复的操作,用Au3记录下这些操作之后,就可以代替人工执行了,比如批量安装软件、实现游戏外 挂、热键功能等等。你甚至可以把它看成是一种比VB6更强大的语言,因为它可以编译成exe文件,可以设计具有Windows界面的程序,不需要运行时支 持,copy到别的机器就可以运行,还支持Win7。而且它的很多操作都只需要一个方法即可实现,比如从网络下载文件用 InetGet(url,filePath),打开文件或执行程序Run(filePath),点击鼠标MouseClick(key,x,y),移动鼠 标MouseMove(x,y),发送击键Send(key),关闭窗体WinClose(title)……其中最常用的一个方法就是 HotKeySet(hotkey,method),就是注册热键。比如HotKeySet(“#q”,”MyMethod”)的意思是注册Win+Q键 运行MyMethod方法,当按下Windows键和Q键时,就会调用MyMethod方法。

详细的用法这里就不介绍了,有需要的可以通过如下网址了解:

华军软件园-Au3汉化版(推荐使用,内含中文帮助文档):http://www.onlinedown.net/soft/54314.htm#down

AutoIt中文论坛:http://www.autoit.net.cn/

AutoIt官方网站http://www.autoitscript.com/site/autoit/

新版Au3教程:http://wenku.baidu.com/view/b0915d1fb7360b4c2e3f6460.html

Let’s AutoIt电子书:http://wenku.baidu.com/view/3418a0cfa1c7aa00b52acb6d.html

另外一个和Au3类似的脚本语言叫AHK,全称是AutoHotKey,据说是从Au3开发组分离出去的一部分人开发的,功能和Au3类似,但是语法有点类似C。有需要的也可以到如下网址了解:

AHK下载:http://www.onlinedown.net/soft/39219.htm

小众软件AHK分类:http://www.appinn.com/category/autohotkey

AHK中文论坛:http://ahk.5d6d.com/

煎蛋-AHK快餐店(适合入门):http://jandan.net/2007/10/21/ahk-fast-food-restaurant-advance-notice.html

(2)Windows PowerShell

这个是微软的脚本语言。之前微软只注重界面,命令行方面非常欠缺。特别是对于系统管理人员,有些操作用命令行比界面更快捷。Unix和Linux中 的Shell命令非常强大,微软决定在自己的Windows系统上也开发一种强大的Shell命令。下面是PowerShell的介绍:

PowerShell是一款基于对象的shell, 建立在.Net框架之上, 目前支持.Net Framework 2.0. 能够运行在Windows XP SP2, Windows Vista, Windows 7,Windows 2003操作系统上. 能够同时支持WMI, COM, ADO, ADSI等已有的Windows管理模型.

在SQL Server2008中也添加了对PowerShell的支持,如下图:

clip_image018

使用PowerShell也很简单,和cmd用法一样,在运行中输入powershell即可,如下图,在其中也可以输入cmd命令。

clip_image019

如果对PowerShell命令不熟悉,可以考虑使用PowerShellAnalyzer,它也具有智能提示功能。官方网站http://www.powershellanalyzer.com/

clip_image020

下面举个例子来展示PowerShell的便利。比如新招聘一批员工,需要在服务器上给他们每个人创建一个文件夹。一般人都会想到的是:新建文件 夹,重命名,接着再新建重命名。几个人还可以接受,但是如果好几十个人,估计谁都会有点烦。如果用PowerShell则可以很容易解决问题。首先在一个 文本文件中输入每个人的名字,每个名字占一行。然后打开PowerShell输入如下命令即可,是不是觉得很方便呢。

clip_image021

在园子里找了这么一个PowerShell的系列文章,可以参考一下:http://www.cnblogs.com/brooks-dotnet/tag/PowerShellV2/

(3)其他脚本语言

通过上面的介绍,是不是觉得有时候脚本语言更方便呢。其他比较流行的脚本语言还有Python、Ruby等,大家可以根据自己的喜好学习。

6、自动化测试工具

大家在软件开发过程中,肯定需要进行反复测试。但是有的时候测试只是一些重复的鼠标键盘操作,花大量时间来人工完成实在是对人力的浪费。这里推荐给大家一个非常强大的自动化测试工具:Selenium。

先看一下对它的介绍:

Selenium也是一个用于Web应用程序测试的工具。Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla和Firefox等。这个工具的主要功能包括:测试与浏览器的 兼容性–测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能–创建衰退测试检验软件功能和用户需求。支持自动录制动作, 和自动生成。Net、Java、Perl等不同语言的测试脚本。Selenium 是 ThoughtWorks 专门为 Web 应用程序编写的一个验收测试工具。

如果你想摆脱一步步机械的操作,等待最后验证结果的测试过程,那么就好好学一下Selenium吧。以下是一些参考资料:

Selenium私房菜系列:http://www.cnblogs.com/hyddd/archive/2009/05/30/1492536.html

利用Selenium自动化Web测试:http://www.oschina.net/question/12_15377

ASP.NET单元测试工具Selenium:http://www.cnblogs.com/ljzforever/archive/2009/05/20/1467801.html

Selenium IDE实践:http://qiuguangchun.blog.163.com/blog/static/126221212010213114517993/

Selenium中文论坛:http://seleniumcn.cn/

本文就写到这里了,涉及的东西比较多,没法很详细的展开介绍,给大家提供了一些参考资料,有需要的可以自己详细学习。

如果你有什么能避免重复操作,提高工作效率的好方法,希望能拿出来和大家共享,让大家能有更多时间去做更有意义的事,谢谢!

Author:Alex Leo Email:alexleo321@hotmail.com

[转载]如何安装Node.js

mikel阅读(895)

[转载]如何安装Node.js.

下面分别介绍在Mac, Ubuntu,Centos以及Windows下安装Node.js.

Mac

在Mac下,如果你喜欢用homebrew,那么只用一行就可以装好:

brew install node

否则,只能考虑手工安装了,步骤如下:

    1. 安装Xcode
    2. 安装git
    3. 运行下面的命令行编译node.js
      git clone git://github.com/joyent/node.git
      cd node
      ./configure
      make
      sudo make install

Ubuntu

    1. 安装依赖包
      sudo apt-get install g++ curl libssl-dev apache2-utils
      sudo apt-get install git-core
    2. 运行下面的命令行:
      git clone git://github.com/joyent/node.git
      cd node
      ./configure
      make
      sudo make install

Windows

用cygwin来安装node,步骤如下:

    1. 安装cygwin
    2. 在cygwin的目录下,运行setup.exe安装下面列表中的包
      • devel → openssl
      • devel → g++-gcc
      • devel → make
      • python → python
      • devel → git
    3. 运行cygwin
    4. 运行下面的命令行:
      git clone git://github.com/joyent/node.git
      cd node
      ./configure
      make
      sudo make install

Centos

yum install gcc-c++ openssl-devel
wget --no-check-certificate https://github.com/joyent/node/tarball/v0.3.3
tar -xzvf ry-node-v0.3.3-0-g57544ba.tar.gz
cd ry-node-v0.3.3-0-g57544bac1
./configure
make
make install

Hello Node.js!

写一段小程序例如hello_node.js来验证安装是否正确:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Node.jsn');
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');

用node来运行这段代码

node hello_node.js
Server running at http://127.0.0.1:8124/

现在,用浏览器打开 http://127.0.0.1:8124/ , 应该能够看到一条好消息。

参考文档

How to Install Node.js

Update

  • 补充了在centos上安装Node.js的步骤

[转载]SQL点滴22—性能优化没有那么神秘

mikel阅读(978)

[转载]SQL点滴22—性能优化没有那么神秘 – nd – 博客园.

经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做。很早的时候我在网上看到一位高手写的博客,介绍了SQL优 化的问题,从这些内容来看,优化并不都是一些很复杂的问题,掌握了基本的知识之后也可以尝试优化自己的SQL程序,甚至是其他相关的程序。优化是一些工作 积累之后的经验总结和代码意识,只要平时注意积累,你也可以做优化的工作。这一篇随笔是转载,不过我强烈推荐给所有对数据库优化有兴趣的博友,读了这一篇 之后下一次别人谈论优化的时候我们这些小菜就可以跟别人侃侃而谈了,不至于面面相觑,不知所措。首先给出地址:http://blog.csdn.net/haiwer/article/details/2826881

始终认为,一个系统的性能的提高,不单单是试运行或者维护阶段的性能调优的任务,也不单单是开发阶段的事情,而是在整个软件生命周期都需要注意,进行有效工作才能达到的。所以我希望按照软件生命周期的不同阶段来总结数据库性能优化相关的注意事项。

一、分析阶段

一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性、可用性、可靠性、安全性需求往往吸引了我们大部分的注意力,但是,我们必须注 意,性能是很重要的非功能性需求,必须根据系统的特点确定其实时性需求、响应时间的需求、硬件的配置等。最好能有各种需求的量化的指标。另一方面,在分析 阶段应该根据各种需求区分出系统的类型,大的方面,区分是OLTP(联机事务处理系统)和OLAP(联机分析处理系统)。

二、设计阶段

设计阶段可以说是以后系统性能的关键阶段,在这个阶段,有一个关系到以后几乎所有性能调优的过程—数据库设计。在数据库设计完成后,可以进行初步的索引设计,好的索引设计可以指导编码阶段写出高效率的代码,为整个系统的性能打下良好的基础。

以下是性能要求设计阶段需要注意的:

1、数据库逻辑设计的规范化

数据库逻辑设计的规范化就是我们一般所说的范式,我们可以这样来简单理解范式:

第1规范:没有重复的组或多值的列,就是一个表中的列不可再分,这是数据库设计的最低要求。

第2规范: 每个非关键字段必须依赖于主关键字,不能依赖于一个组合式主关键字的某些组成部分。就是说一个表中的行可以唯一标识。消除
部分依赖,大部分情况下,数据库设计都应该达到第二范式。

第3规范: 一个非关键字段不能依赖于另一个非关键字段。消除传递依赖,达到第三范式应该是系统中大部分表的要求,除非一些
特殊作用的表。

更高的范式要求这里就不再作介绍了,个人认为,如果全部达到第二范式,大部分达到第三范式,系统会产生较少的列和较多的表,因而减少了数据冗余,也利于性能的提高。

2、合理的冗余

完全按照规范化设计的系统几乎是不可能的,除非系统特别的小,在规范化设计后,有计划地加入冗余是必要的。

冗余可以是冗余数据库、冗余表或者冗余字段,不同粒度的冗余可以起到不同的作用。

冗余可以是为了编程方便而增加,也可以是为了性能的提高而增加。从性能角度来说,冗余数据库可以分散数据库压力,冗余表可以分散数据量大的表的并发压力,也可以加快特殊查询的速度,冗余字段可以有效减少数据库表的连接,提高效率。

3、主键的设计

主键是必要的,SQL SERVER的主键同时是一个唯一索引,而且在实际应用中,我们往往选择最小的键组合作为主键,所以主键往往适合作为表的聚集索引。聚集索引对查询的影响是比较大的,这个在下面索引的叙述。

在有多个键的表,主键的选择也比较重要,一般选择总的长度小的键,小的键的比较速度快,同时小的键可以使主键的B树结构的层次更少。主键的选择还要 注意组合主键的字段次序,对于组合主键来说,不同的字段次序的主键的性能差别可能会很大,一般应该选择重复率低、单独或者组合查询可能性大的字段放在前 面。

4、外键的设计

外键作为数据库对象,很多人认为麻烦而不用,实际上,外键在大部分情况下是很有用的,理由是:外键是最高效的一致性维护方法,数据库的一致性要求,依次可以用外键、CHECK约束、规则约束、触发器、客户端程序,一般认为,离数据越近的方法效率越高。

谨慎使用级联删除和级联更新,级联删除和级联更新作为SQL SERVER 2000当年的新功能,在2005作了保留,应该有其可用之处。我这里说的谨慎,是因为级联删除和级联更新有些突破了传统的关于外键的定义,功能有点太过 强大,使用前必须确定自己已经把握好其功能范围,否则,级联删除和级联更新可能让你的数据莫名其妙的被修改或者丢失。从性能看级联删除和级联更新是比其他 方法更高效的方法。

5、字段的设计

字段是数据库最基本的单位,其设计对性能的影响是很大的。需要注意如下:

A、数据类型尽量用数字型,数字型的比较比字符型的快很多。

B、数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下的。

C、尽量不要允许NULL,除非必要,可以用NOT NULL+DEFAULT代替。

D、少用TEXT和IMAGE,二进制字段的读写是比较慢的,而且,读取的方法也不多,大部分情况下最好不用。

E、自增字段要慎用,不利于数据迁移。

6、数据库物理存储和环境的设计

在设计阶段,可以对数据库的物理存储、操作系统环境、网络环境进行必要的设计,使得我们的系统在将来能适应比较多的用户并发和比较大的数据量。这里需要注意文件组的作用,适用文件组可以有效把I/O操作分散到不同的物理硬盘,提高并发能力。

7、系统设计

整个系统的设计特别是系统结构设计对性能是有很大影响的,对于一般的OLTP系统,可以选择C/S结构、三层的C/S结构等,不同的系统结构其性能的关键也有所不同。

系统设计阶段应该归纳一些业务逻辑放在数据库编程实现,数据库编程包括数据库存储过程、触发器和函数。用数据库编程实现业务逻辑的好处是减少网络流量并可更充分利用数据库的预编译和缓存功能。

8、索引的设计

在设计阶段,可以根据功能和性能的需求进行初步的索引设计,这里需要根据预计的数据量和查询来设计索引,可能与将来实际使用的时候会有所区别。

关于索引的选择,应改主意:

A、根据数据量决定哪些表需要增加索引,数据量小的可以只有主键。

B、根据使用频率决定哪些字段需要建立索引,选择经常作为连接条件、筛选条件、聚合查询、排序的字段作为索引的候选字
段。

C、把经常一起出现的字段组合在一起,组成组合索引,组合索引的字段顺序与主键一样,也需要把最常用的字段放在前面,
把重复率低的字段放在前面。

D、一个表不要加太多索引,因为索引影响插入和更新的速度。

三、编码阶段

编码阶段是本文的重点,因为在设计确定的情况下,编码的质量几乎决定了整个系统的质量。

编码阶段首先是需要所有程序员有性能意识,也就是在实现功能同时有考虑性能的思想,数据库是能进行集合运算的工具,我们应该尽量的利用这个工具,所 谓集合运算实际是批量运算,就是尽量减少在客户端进行大数据量的循环操作,而用SQL语句或者存储过程代替。关于思想和意识,很难说得很清楚,需要在编程 过程中来体会。

下面罗列一些编程阶段需要注意的事项:

1、只返回需要的数据

返回数据到客户端至少需要数据库提取数据、网络传输数据、客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器、网络和客户端的无效劳动,其害处是显而易见的,避免这类事件需要注意:

A、横向来看,不要写SELECT *的语句,而是选择你需要的字段。

B、纵向来看,合理写WHERE子句,不要写没有WHERE的SQL语句。

C、注意SELECT INTO后的WHERE子句,因为SELECT INTO把数据插入到临时表,这个过程会锁定一些系统表,如果这个WHERE子句返回的数据过多或者速度太慢,会造成系统表长期锁定,诸塞其他进程。

D、对于聚合查询,可以用HAVING子句进一步限定返回的行。

2、尽量少做重复的工作

这一点和上一点的目的是一样的,就是尽量减少无效工作,但是这一点的侧重点在客户端程序,需要注意的如下:

A、控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意的。

B、减少多次的数据转换,也许需要数据转换是设计的问题,但是减少次数是程序员可以做到的。

C、杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。

D、合并对同一表同一条件的多次UPDATE,比如

UPDATE EMPLOYEE SET FNAME=’HAIWER’ WHERE EMP_ID=’ VPA30890F’

UPDATE EMPLOYEE SET LNAME=’YANG’ WHERE EMP_ID=’ VPA30890F’
这两个语句应该合并成以下一个语句

UPDATE EMPLOYEE SET FNAME=’HAIWER’,LNAME=’YANG’
WHERE EMP_ID=’ VPA30890F’
E、UPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同,但是性能差别是很大的。

F、不要写一些没有意义的查询,比如: SELECT * FROM EMPLOYEE WHERE 1=2

3、注意事务和锁

事务是数据库应用中和重要的工具,它有原子性、一致性、隔离性、持久性这四个属性,很多操作我们都需要利用事务来保证数据的正确性。在使用事务中我们需要做到尽量避免死锁、尽量减少阻塞。具体以下方面需要特别注意:

A、事务操作过程要尽量小,能拆分的事务要拆分开来。

B、事务操作过程不应该有交互,因为交互等待的时候,事务并未结束,可能锁定了很多资源。

C、事务操作过程要按同一顺序访问对象。

D、提高事务中每个语句的效率,利用索引和其他方法提高每个语句的效率可以有效地减少整个事务的执行时间。

E、尽量不要指定锁类型和索引,SQL SERVER允许我们自己指定语句使用的锁类型和索引,但是一般情况下,SQL SERVER优化器选择的锁类型和索引是在当前数据量和查询条件下是最优的,我们指定的可能只是在目前情况下更有,但是数据量和数据分布在将来是会变化 的。

F、查询时可以用较低的隔离级别,特别是报表查询的时候,可以选择最低的隔离级别(未提交读)。

4、注意临时表和表变量的用法

在复杂系统中,临时表和表变量很难避免,关于临时表和表变量的用法,需要注意:

A、如果语句很复杂,连接太多,可以考虑用临时表和表变量分步完成。

B、如果需要多次用到一个大表的同一部分数据,考虑用临时表和表变量暂存这部分数据。

C、如果需要综合多个表的数据,形成一个结果,可以考虑用临时表和表变量分步汇总这多个表的数据。

D、其他情况下,应该控制临时表和表变量的使用。

E、关于临时表和表变量的选择,很多说法是表变量在内存,速度快,应该首选表变量,但是在实际使用中发现,这个选择主要考虑需要放在
临时表的数据量,在数据量较多的情况下,临时表的速度反而更快。

F、关于临时表产生使用SELECT INTO和CREATE TABLE + INSERT INTO的选择,我们做过测试,一般情况下,SELECT INTO会比CREATE TABLE +
INSERT INTO的方法快很多,但是SELECT INTO会锁定TEMPDB的系统表SYSOBJECTS、SYSINDEXES、SYSCOLUMNS,在多用户并发环境下,容易阻塞
其他进程,所以我的建议是,在并发系统中,尽量使用CREATE TABLE + INSERT INTO,而大数据量的单个语句使用中,使用SELECT INTO。

G、注意排序规则,用CREATE TABLE建立的临时表,如果不指定字段的排序规则,会选择TEMPDB的默认排序规则,而不是当前数据库的排序规则。如果当前数据库的排序规则和 TEMPDB的排序规则不同,连接的时候就会出现排序规则的冲突错误。一般可以在CREATE TABLE建立临时表时指定字段的排序规则为DATABASE_DEFAULT来避免上述问题。

5、 子查询的用法

子查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。任何允许使用表达式的地方都可以使用子查询。

子查询可以使我们的编程灵活多样,可以用来实现一些特殊的功能。但是在性能上,往往一个不合适的子查询用法会形成一个性能瓶颈。如果子查询的条件中 使用了其外层的表的字段,这种子查询就叫作相关子查询。相关子查询可以用IN、NOT IN、EXISTS、NOT EXISTS引入。

关于相关子查询,应该注意:

A、NOT IN、NOT EXISTS的相关子查询可以改用LEFT JOIN代替写法。比如:

SELECT PUB_NAME
FROM PUBLISHERS
WHERE PUB_ID NOT IN
(SELECT PUB_ID
FROM TITLES
WHERE TYPE = ‘BUSINESS’)
可以改写成:

SELECT A.PUB_NAME
FROM PUBLISHERS A LEFT JOIN TITLES B
ON        B.TYPE = ‘BUSINESS’ AND
A.PUB_ID=B.PUB_ID
WHERE B.PUB_ID IS NULL

SELECT TITLE
FROM TITLES
WHERE NOT EXISTS
(SELECT TITLE_ID
FROM SALES
WHERE TITLE_ID = TITLES.TITLE_ID)
可以改写成:

SELECT TITLE
FROM TITLES LEFT JOIN SALES
ON SALES.TITLE_ID = TITLES.TITLE_ID
WHERE SALES.TITLE_ID IS NULL
B、 如果保证子查询没有重复 ,IN、EXISTS的相关子查询可以用INNER JOIN 代替。比如:

SELECT PUB_NAME
FROM PUBLISHERS
WHERE PUB_ID IN
(SELECT PUB_ID
FROM TITLES
WHERE TYPE = ‘BUSINESS’)
可以改写成:

SELECT DISTINCT A.PUB_NAME
FROM PUBLISHERS A INNER JOIN TITLES B
ON        B.TYPE = ‘BUSINESS’ AND
A.PUB_ID=B.PUB_ID

C、 IN的相关子查询用EXISTS代替,比如

SELECT PUB_NAME
FROM PUBLISHERS
WHERE PUB_ID IN
(SELECT PUB_ID
FROM TITLES
WHERE TYPE = ‘BUSINESS’)
可以用下面语句代替:

SELECT PUB_NAME
FROM PUBLISHERS
WHERE EXISTS
(SELECT 1
FROM TITLES
WHERE TYPE = ‘BUSINESS’ AND
PUB_ID= PUBLISHERS.PUB_ID)

D、不要用COUNT(*)的子查询判断是否存在记录,最好用LEFT JOIN或者EXISTS,比如有人写这样的语句:

SELECT JOB_DESC FROM JOBS
WHERE (SELECT COUNT(*) FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)=0
应该改成:

SELECT JOBS.JOB_DESC FROM JOBS LEFT JOIN EMPLOYEE
ON EMPLOYEE.JOB_ID=JOBS.JOB_ID
WHERE EMPLOYEE.EMP_ID IS NULL

SELECT JOB_DESC FROM JOBS
WHERE (SELECT COUNT(*) FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)<>0
应该改成:

SELECT JOB_DESC FROM JOBS
WHERE EXISTS (SELECT 1 FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)
6、慎用游标

数据库一般的操作是集合操作,也就是对由WHERE子句和选择列确定的结果集作集合操作,游标是提供的一个非集合操作的途径。一般情况下,游标实现的功能往往相当于客户端的一个循环实现的功能,所以,大部分情况下,我们把游标功能搬到客户端。

游标是把结果集放在服务器内存,并通过循环一条一条处理记录,对数据库资源(特别是内存和锁资源)的消耗是非常大的,所以,我们应该只有在没有其他方法的情况下才使用游标。

另外,我们可以用SQL SERVER的一些特性来代替游标,达到提高速度的目的。

A、字符串连接的例子

这是论坛经常有的例子,就是把一个表符合条件的记录的某个字符串字段连接成一个变量。比如需要把JOB_ID=10的EMPLOYEE的FNAME连接在一起,用逗号连接,可能最容易想到的是用游标:

DECLARE @NAME VARCHAR(20)
DECLARE @NAME VARCHAR(1000)
DECLARE NAME_CURSOR CURSOR FOR
SELECT FNAME FROM EMPLOYEE WHERE JOB_ID=10 ORDER BY EMP_ID
OPEN NAME_CURSOR
FETCH NEXT FROM RNAME_CURSOR INTO @NAME
WHILE @@FETCH_STATUS = 0
BEGIN
SET @NAMES = ISNULL(@NAMES+’,’,’’)+@NAME
FETCH NEXT FROM NAME_CURSOR  INTO @NAME
END
CLOSE NAME_CURSOR
DEALLOCATE NAME_CURSOR
可以如下修改,功能相同:

DECLARE @NAME VARCHAR(1000)
SELECT @NAMES = ISNULL(@NAMES+’,’,’’)+FNAME
FROM EMPLOYEE WHERE JOB_ID=10 ORDER BY EMP_ID
B、 用CASE WHEN 实现转换的例子

很多使用游标的原因是因为有些处理需要根据记录的各种情况需要作不同的处理,实际上这种情况,我们可以用CASE WHEN语句进行必要的判断处理,而且CASE WHEN是可以嵌套的。比如:

表结构:

CREATE TABLE 料件表(
料号           VARCHAR(30),
名称           VARCHAR(100),
主单位         VARCHAR(20),
单位1         VARCHAR(20),
单位1参数      NUMERIC(18,4),
单位2         VARCHAR(20),
单位2参数      NUMERIC(18,4)
)

GO

CREATE TABLE 入库表(
时间               DATETIME,
料号               VARCHAR(30),
单位               INT,
入库数量           NUMERIC(18,4),
损坏数量           NUMERIC(18,4)
)

GO
其中,单位字段可以是0,1,2,分别代表主单位、单位1、单位2,很多计算需要统一单位,统一单位可以用游标实现:

DECLARE @料号     VARCHAR(30),
@单位   INT,
@参数      NUMERIC(18,4),

DECLARE CUR CURSOR FOR
SELECT 料号,单位 FROM 入库表 WHERE 单位 <>0
OPEN CUR
FETCH NEXT FROM CUR INTO @料号,@单位
WHILE @@FETCH_STATUS<>-1
BEGIN
IF @单位=1
BEGIN
SET @参数=(SELECT 单位1参数 FROM 料件表 WHERE 料号 =@料号)
UPDATE 入库表 SET 数量=数量*@参数,损坏数量=损坏数量*@参数,单位=1 WHERE CURRENT OF CUR
END
IF @单位=2
BEGIN
SET @参数=(SELECT 单位1参数 FROM 料件表 WHERE 料号 =@料号)
UPDATE 入库表 SET 数量=数量*@参数,损坏数量=损坏数量*@参数,单位=1 WHERE CURRENT OF CUR
END
FETCH NEXT FROM CUR INTO @料号,@单位
END
CLOSE CUR
DEALLOCATE CUR
可以改写成:

UPDATE A SET
数量=CASE A.单位 WHEN 1 THEN      A.数量*B. 单位1参数
WHEN 2 THEN         A.数量*B. 单位2参数
ELSE A.数量
END,
损坏数量= CASE A.单位 WHEN 1 THEN    A. 损坏数量*B. 单位1参数
WHEN 2 THEN         A. 损坏数量*B. 单位2参数
ELSE A. 损坏数量
END,
单位=1
FROM入库表 A, 料件表 B
WHERE    A.单位<>1      AND   A.料号=B.料号
C、 变量参与的UPDATE语句的例子

SQL ERVER的语句比较灵活,变量参与的UPDATE语句可以实现一些游标一样的功能,比如:

SELECT A,B,C,CAST(NULL AS INT) AS 序号
INTO #T
FROM 表
ORDER BY A ,NEWID()
产生临时表后,已经按照A字段排序,但是在A相同的情况下是乱序的,这时如果需要更改序号字段为按照A字段分组的记录序号,就只有游标
和变量参与的UPDATE语句可以实现了,这个变量参与的UPDATE语句如下:

DECLARE @A INT
DECLARE @序号 INT
UPDATE #T SET
@序号=CASE WHEN A=@A THEN @序号+1 ELSE 1 END,
@A=A,
序号=@序号
D、如果必须使用游标,注意选择游标的类型,如果只是循环取数据,那就应该用只进游标(选项FAST_FORWARD),一般只需要静态游标(选项STATIC)。

E、 注意动态游标的不确定性,动态游标查询的记录集数据如果被修改,会自动刷新游标,这样使得动态游标有了不确定性,因为在多用户环境下,如果其他进程或者本身更改了纪录,就可能刷新游标的记录集。

7、 尽量使用索引

建立索引后,并不是每个查询都会使用索引,在使用索引的情况下,索引的使用效率也会有很大的差别。只要我们在查询语句中没有强制指定索引,索引的选 择和使用方法是SQLServer的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们在写SQL语句的时候尽量使 得优化器可以使用索引。

为了使得优化器能高效使用索引,写语句的时候应该注意:

A、不要对索引字段进行运算,而要想办法做变换,比如

SELECT ID FROM T WHERE NUM/2=100

应改为:

SELECT ID FROM T WHERE NUM=100*2

SELECT ID FROM T WHERE NUM/2=NUM1

如果NUM有索引应改为:

SELECT ID FROM T WHERE NUM=NUM1*2

如果NUM1有索引则不应该改。

发现过这样的语句:

SELECT 年,月,金额 FROM 结余表
WHERE 100*年+月=2007*100+10
应该改为:

SELECT 年,月,金额 FROM 结余表
WHERE 年=2007 AND
月=10
B、不要对索引字段进行格式转换

日期字段的例子:

WHERE CONVERT(VARCHAR(10), 日期字段,120)=’2008-08-15’

应该改为

WHERE日期字段〉=’2008-08-15’ AND 日期字段<’2008-08-16’

ISNULL转换的例子:

WHERE ISNULL(字段,’’)<>’’应改为:WHERE字段<>’’

WHERE ISNULL(字段,’’)=’’不应修改

WHERE ISNULL(字段,’F’) =’T’应改为: WHERE字段=’T’

WHERE ISNULL(字段,’F’)<>’T’不应修改

C、 不要对索引字段使用函数

WHERE LEFT(NAME, 3)=’ABC’ 或者WHERE SUBSTRING(NAME,1, 3)=’ABC’

应改为:

WHERE NAME LIKE ‘ABC%’

日期查询的例子:

WHERE DATEDIFF(DAY, 日期,’2005-11-30′)=0应改为:WHERE 日期 >=’2005-11-30′ AND 日期 <‘2005-12-1‘

WHERE DATEDIFF(DAY, 日期,’2005-11-30’)>0应改为:WHERE 日期 <‘2005-11-30‘

WHERE DATEDIFF(DAY, 日期,’2005-11-30’)>=0应改为:WHERE 日期 <‘2005-12-01‘

WHERE DATEDIFF(DAY, 日期,’2005-11-30′)<0应改为:WHERE 日期>=’2005-12-01‘

WHERE DATEDIFF(DAY, 日期,’2005-11-30’)<=0应改为:WHERE 日期>=’2005-11-30‘

D、不要对索引字段进行多字段连接

比如:

WHERE FAME+ ’.’+LNAME=‘HAIWEI.YANG’

应改为:

WHERE FNAME=‘HAIWEI’ AND LNAME=‘YANG’

8、 注意连接条件的写法

多表连接的连接条件对索引的选择有着重要的意义,所以我们在写连接条件条件的时候需要特别的注意。

A、多表连接的时候,连接条件必须写全,宁可重复,不要缺漏。

B、连接条件尽量使用聚集索引

C、注意ON部分条件和WHERE部分条件的区别

9、其他需要注意的地方

经验表明,问题发现的越早解决的成本越低,很多性能问题可以在编码阶段就发现,为了提早发现性能问题,需要注意:

A、程序员注意、关心各表的数据量。

B、编码过程和单元测试过程尽量用数据量较大的数据库测试,最好能用实际数据测试。

C、每个SQL语句尽量简单

D、不要频繁更新有触发器的表的数据

E、注意数据库函数的限制以及其性能

10、学会分辩SQL语句的优劣

自己分辨SQL语句的优劣非常重要,只有自己能分辨优劣才能写出高效的语句。

A、查看SQL语句的执行计划,可以在查询分析其使用CTRL+L图形化的显示执行计划,一般应该注意百分比最大的几个图形的属性,把鼠标移动到其 上面会显示这个图形的属性,需要注意预计成本的数据,也要注意其标题,一般都是CLUSTERED INDEX SEEK 、INDEX SEEK 、CLUSTERED INDEX SCAN 、INDEX SCAN 、TABLE SCAN等,其中出现SCAN说明语句有优化的余地。也可以用语句

SET SHOWPLAN_ALL ON

要执行的语句

SET SHOWPLAN_ALL OFF

查看执行计划的文本详细信息。

B、用事件探查器跟踪系统的运行,可疑跟踪到执行的语句,以及所用的时间,CPU用量以及I/O数据,从而分析语句的效率。

C、可以用WINDOWS的系统性能检测器,关注CPU、I/O参数

四、测试、试运行、维护阶段

测试的主要任务是发现并修改系统的问题,其中性能问题也是一个重要的方面。重点应该放在发现有性能问题的地方,并进行必要的优化。主要进行语句优化、索引优化等。

试运行和维护阶段是在实际的环境下运行系统,发现的问题范围更广,可能涉及操作系统、网络以及多用户并发环境出现的问题,其优化也扩展到操作系统、网络以及数据库物理存储的优化。

这个阶段的优花方法在这里不再展开,只说明下索引维护的方法:

A、可以用DBCC DBREINDEX语句或者SQL SERVER维护计划设定定时进行索引重建,索引重建的目的是提高索引的效能。

B、可以用语句UPDATE STATISTICS或者SQL SERVER维护计划设定定时进行索引统计信息的更新,其目的是使得统计信息更能反映实际情况,从而使得优化器选择更合适的索引。

C、可以用DBCC CHECKDB或者DBCC CHECKTABLE语句检查数据库表和索引是否有问题,这两个语句也能修复一般的问题。

五、网上资料中一些说法的个人不同意见

1、“应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

SELECT ID FROM T WHERE NUM IS NULL

可以在NUM上设置默认值0,确保表中NUM列没有NULL值,然后这样查询:

SELECT ID FROM T WHERE NUM=0”

个人意见:经过测试,IS NULL也是可以用INDEX SEEK查找的,0和NULL是不同概念的,以上说法的两个查询的意义和记录数是不同的。

2、“应尽量避免在 WHERE 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。”

个人意见:经过测试,<>也是可以用INDEX SEEK查找的。

3、“应尽量避免在 WHERE 子句中使用 OR 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

SELECT ID FROM T WHERE NUM=10 OR NUM=20

可以这样查询:

SELECT ID FROM T WHERE NUM=10

UNION ALL

SELECT ID FROM T WHERE NUM=20”

个人意见:主要对全表扫描的说法不赞同。

4、“IN 和 NOT IN 也要慎用,否则会导致全表扫描,如:

SELECT ID FROM T WHERE NUM IN(1,2,3)

对于连续的数值,能用 BETWEEN 就不要用 IN 了:

SELECT ID FROM T WHERE NUM BETWEEN 1 AND 3”

个人意见:主要对全表扫描的说法不赞同。

5、“如果在 WHERE 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

SELECT ID FROM T WHERE NUM=@NUM

可以改为强制查询使用索引:

SELECT ID FROM T WITH(INDEX(索引名)) WHERE NUM=@NUM

个人意见:关于局部变量的解释比较奇怪,使用参数如果会影响性能,那存储过程就该校除了,我坚持我上面对于强制索引的看法。

6、“尽可能的使用 VARCHAR/NVARCHAR 代替 CHAR/NCHAR ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。”

个人意见:“在一个相对较小的字段内搜索效率显然要高些”显然是对的,但是字段的长短似乎不是由变不变长决定,而是业务本身决定。在 SQLServer6.5或者之前版本,不定长字符串字段的比较速度比定长的字符串字段的比较速度慢很多,所以对于那些版本,我们都是推荐使用定长字段存 储一些关键字段。而在2000版本,修改了不定长字符串字段的比较方法,与定长字段的比较速度差别不大了,这样为了方便,我们大量使用不定长字段。

7、关于连接表的顺序或者条件的顺序的说法,经过测试,在SQL SERVER,这些顺序都是不影响性能的,这些说法可能是对ORACLE有效。

[转载]挑战类Flash游戏测试用例设计

mikel阅读(1618)

[转载]挑战类Flash游戏测试用例设计 – 寻觅2010 – 博客园.

前端时间参与了Flash游戏的功能测试,发现游戏测试的内容比较的繁多,因此总结一下测试用例的编写思路,便于以后能快速进行同类游戏的用例设计。

所测试的Flash游戏类似<雪地漂移上百层>这款游戏,先简介一下这款游戏的需求:这是一款考验快速反应的益智游戏,游戏的过程就是通过控制角色在空中左右平移吃掉屏幕中的上升道具来保证自己一直向上升,如果角色速度减到0然后滞空掉落,将显示角色所达到的最大高度以及得分。

1)首先是游戏初始界面

2)随后进入道具说明界面

3)游戏开始先滑入跑道获取起飞初速度

4)游戏当中左右平移操作

5)挑战失败后的成绩统计

〖备注〗

* 游戏的安装、卸载、升级的功能不划为本次功能测试的讨论内容。

此款游戏的需求不算太复杂,既没有多种模式的选择(水果忍者游戏),也没有多种关卡设计(祖玛游戏),在测试时偏重操作性及数据正确性。进行功能测试用例编写之前,首先进行测试用例设计:

首先是基本功能的验证

测试用例首先应该对基本功能进行覆盖,基本功能就是能保证玩家能够进行一个完整的流程操作,即启动—开始—退出三个基本步骤,然后再根据每一步进行测试项分解:

每个测试项有相应的测试点,比如游戏启动测试项,其测试点根据图标、显示方式、启动时间、按键操作分类后进行测试内容细化:

测试项

测试内容

游戏图标

图标的大小符合需求中的设计

图案跟需求说明书的原型一致

界面显示

在不同的分辨率下显示全屏

启动成功后,光标模型显示正确

启动项检查

启动时间不超过需求中规定的约束值

启动成功后,游戏的进程名没有错误

按键操作

启动过程中通过功能键强制中断

其他的测试点的细则不一一列举,根据游戏中的实际情况进行细化。

每个界面的测试

基本功能虽然能保证游戏的操作流程正常,但对于游戏内容的正确性是无法保证的,界面也是玩家在体验过程中会关注的内容,因此对于游戏内容的检查首先应该根据各个界面进行下手,其中每个界面的跳转路径测试,也保证除基本流程之外的分支流程能够正确,其测试项有:

游戏元素的细分

界面只是游戏内容的一小部分,实际上游戏内容远不止繁多的界面,通常还有角色人物、道具、音效、成绩、奖惩规则等元素。此款游戏没有生命值的需求,所以奖惩规则没有在测试设计中考虑,根据游戏元素整理的测试项如下:

占用资源的关注

游戏的资源占用也属于功能测试的重要内容,测试结果需要在测试报告中记录,通常都是记录游戏的CPU占用及内存消耗,需要注意的是这两项数值都是实时变化的,因此需要记录的数据需要进行筛选,选择重要的初始值和峰值进行记录。

如何才能得到这两类数据的峰值?这需要设计合理的测试场景:1CPU占用理论上是游戏线程越多,读写数据操作越频繁,则CPU占用的数值就越高,因此CPU占用的峰值测试场景为玩家操作频繁的界面中。2)内存消耗则是根据游戏在运行时加载的资源多少来决定的,因此理论上玩家玩的时间越长,加载的界面、元素越多,内存的消耗就越大,因此峰值的测试场景需要尽量遍历所有界面、接触到所有道具,测试时间也需要在4个小时以上。

异常场景设计

异常场景的是对测试用例覆盖率最有效的补充,往往最容易暴露问题的就是异常的操作或环境。用例的设计需要考虑游戏与系统如何进行数据交互、游戏采用框架以及哪些数据需要跟其他软件进行传递的。

测试的Flash游戏运行在Linux环境,与底层系统的交互涉及到操作数据和玩家成绩:操作数据(角色在游戏中的左右移动)是通过pipe管道与底层系统进行交互,玩家成绩(最高高度和最大得分)的则是通过scroe.xml文件进行保存。因此异常场景的测试项有:

此款游戏的测试用例设计思路已经基本完成,然后就需要对每个测试项进行测试点的细化,最后执行测试进行功能验证了。

后记:是否完成了功能验证,就意味着游戏没有严重问题?实际上这款游戏上线之后,根据服务器的一段时间日志统计,并没有多少玩家去玩,虽然游戏不存在影响运行问题,但此款游戏在市场上表现并不成功,我们忽视了游戏开发环节中一项重要的工作,那就是用户体验测试,在完成游戏功能测试之后,应该在公司内部或现网试运行阶段进行游戏体验,收集和筛选反馈建议,查看游戏哪些内容需要丰富以增加用户粘度、是否存在捷径可以刻意降低游戏难度、哪些元素缺少吸引需要去掉等。

[转载]JS新API标准 地理定位(navigator.geolocation)

mikel阅读(877)

[转载]JS新API标准 地理定位(navigator.geolocation) – Lecaf – 博客园.

在新的API标准中,可以通过navigator.geolocation来获取设备的当前位置,返回一个位置对象,用户可以从这个对象中得到一些经纬度的相关信息。

navigator.geolocation的三个方法:

1. getCurrentPosition()

2. watchPosition()

3. clearWatch()

getCurrentPosition()

使用方法:navigator.geolocation.getCurrentPosition(successCallback, [errorCallback] , [positionOptions]);

A) successCallback 获取定位成功时执行的回调函数 eg: function(position){alert(“纬度:”+position.coords.latitude+”;经度:”+position.coords.longitude)};

successCallback返回一个地理数据对象position作为参数,该对象有属性timestamp和coords。timestamp表示该地理数据创建时间(时间戳);coords包括另外七个属性:

1. coords.latitude:估计纬度
2. coords.longitude:估计经度
3. coords.altitude:估计高度
4. coords.accuracy:所提供的以米为单位的经度和纬度估计的精确度
5. coords.altitudeAccuracy:所提供的以米为单位的高度估计的精确度
6. coords.heading: 宿主设备当前移动的角度方向,相对于正北方向顺时针计算
7. coords.speed:以米每秒为单位的设备的当前对地速度

PS:firefox下还有address属性,可以获取详细地址,不过我得到的地址是错误的,使用方法:position.address.city,具体如下:

QueryInterface:function QueryInterface() { [native code] }
streetNumber:200号
street:人民大道
premises:null
city:上海市
county:null
region:上海市
country:中国
countryCode:CN
postalCode:null
getInterfaces:function getInterfaces() { [native code] }
getHelperForLanguage:function getHelperForLanguage() { [native code] }
contractID:null
classDescription:null
classID:null
implementationLanguage:2
flags:8
SINGLETON:1
THREADSAFE:2
MAIN_THREAD_ONLY:4
DOM_OBJECT:8
PLUGIN_OBJECT:16
CONTENT_NODE:64
RESERVED:2147483648

B) errorCallback 定位失败时执行的回调函数 eg: function(error){alert(error.message);}

errorCallback返回一个错误数据对象error作为参数,该对象有属性:

1.code :表示失败原因,返回1 or 2 or 3 ,具体为

PERMISSION_DENIED (数值为1) 表示没有权限使用地理定位API

POSITION_UNAVAILABLE (数值为2) 表示无法确定设备的位置,例如一个或多个的用于定位采集程序报告了一个内部错误导致了全部过程的失败

TIMEOUT (数值为3) 表示超时

详情查看 http://dev.w3.org/geo/api/spec-source.html#permission_denied_error

2.message :错误提示内容

C) positionOptions 用来设置positionOptions来更精细的执行定位,positionOptions拥有三个属性 {enableHighAccuracy:boolean , timeout:long , maximumAge:long}。

enableHighAccuracy 【true or false(默认)】是否返回更详细更准确的结构,默认为false不启用,选择true则启用,但是会导致较长的响应时间及增加功耗,这种情况更多的用在移动设备上。

timeout 设备位置获取操作的超时时间设定(不包括获取用户权限时间),单位为毫秒,如果在设定的timeout时间内未能获取位置定位,则会执行 errorCallback()返回code(3)。如果未设定timeout,那么timeout默认为无穷大,如果timeout为负数,则默认 timeout为0。

maximumAge 设定位置缓存时间,以毫秒为单位,如果不设置该值,该值默认为0,如果设定负数,则默认为0。该值为0时,位置定位时会重新获取一个新的位置对象;该值大 于0时,即从上一次获取位置时开始,缓存位置对象,如果再次获取位置时间不超过maximumAge,则返回缓存中的位置,如果超出 maximumAge,则重新获取一个新的位置。

watchPosition()

功能getCurrentPosition()相似,watchPosition()是定期轮询设备的位置,同样拥有3个参数,与getCurrentPosition()相同。

使用方法:navigator.geolocation.watchPosition(successCallback, [errorCallback] , [positionOptions]);

执行步骤:

1.首先初始化positionOptions内的属性(详细同上)。

2.判断是否有缓存位置对象,该对象年龄是否可用、是否超出maximumAge ,如果可用且未超出,返回缓存位置,否则重新确定设备位置。

3.位置定位操作:

i.建立一个计时器,进行位置获取操作,如果在timeout之前完成,执行下一步;如果未在timeout之前完成,则执行errorCallback(),code为3,跳出步骤做等待重新激活。

ii.如果在timeout之前获得位置成功,则执行successCallback(),然后重置计时器(从获取位置成功时刻重新算起),继 续挂起获取新位置。当有与之前位置有明显不同位置出现时,再次执行successCallback(),并重复操作,该循环直到timeout超时或者获 取操作中遇到POSITION_UNAVAILABLE错误执行errorCallback()为止,亦或者执行clearWatch()操作。

clearWatch()

配合watchPosition()使用,用于停止watchPosition()轮询。

watchPosition()需要定义一个watchID,var watchID = watchPosition(…),通过clearWatch(watchID)来停止watchPosition(),使用方法类似setInterval。

相关资料:

1. http://dev.w3.org/geo/api/spec-source.html#geolocation

2. http://kb.cnblogs.com/page/108732/

转载请注明出处:http://www.cnblogs.com/lecaf/