用存储过程校验URL

一个用存储过程做校验的方法。


存储过程(@URL为传入的参数):


— check
set @CHECKURL = COALESCE(RTRIM(LTRIM(@URL)), ”)
 
IF EXISTS (select * from vw_RestrictedUrl
    where @CHECKURL like RestrictedPattern)
begin
    select ‘Please specify a correct URL for Address.’ as message
    return
end
 
— save
insert into tb_URL (ID, URL) values (newid(), @URL)

 
select ” as message
校验成功后保存到tb_URL表中,且返回空,否则返回校验错误的信息。


视图 vw_RestrictedUrl 中的 RestrictedPattern 保存限制输入的 URL,方便维护。

五一云南攻略(二)

Day 3

早起上路,向德钦方向出发,这一路都是风景,所以需要不时的停下拍照,这也是包车的最大好处,因为王姐对这一路的风景已经是谙熟于心,所以该在哪里停最合适比我们玩摄影的还要清楚,据说她以前拉过几个摄影协会的游客。车子一般就停在山路边上,所以拍照的时候要注意安全。

开出中甸市区不久,有一个点可以远拍赞松林寺,不过距离相当远,至少需要200mm镜头和三脚架。路过的时候王姐问:“你的小老婆看上去挺专业的,要不要停一下?”看了看路边一片长镜头,摇摇头说:我这个18-70还是算了吧。

车子经过那帕海。那帕海是一个季节性湖泊,五月份的时候水少就成了一个草原。草原的后面是白色的民居,和薄雾笼罩的山谷。



再往西进入三江流域,从中甸到德钦要过金沙江,从德钦到梅里要过澜沧江,还有一条怒江在更西面,除非进藏,否则就不用过了。
当地人生活在峡谷间的绿洲之中,土地资源十分有限,所以他们维持着不分家的传统,多个兄弟一个妻子,维持可持续生存。



藏族民居的房子有些顶上有旗子,这旗子就叫做旌帆,旌帆上都写有经文,是乞求平安的意思。其实它也表示了一种地位,一面旗子的说明这家里出国高僧,三面旗子的房子说明这家里出过活佛。

说到活佛,我们在东竹林寺就遇到一位,而且还是一位小活佛。Joe不知道,他用他那很搞笑的香港普通话上前去问小活佛的师傅:“这是你的儿子吧?”

东竹林寺不大,但也不小,很安静,可能是因为我在喧闹的城市呆就了,这里的每一处地方对我来说都是安静的。



中午在奔子栏吃的中饭,奔子栏是古时候茶马古道上的一个小驿站,现在已经是一个小镇了,在这里还能吃到不错的东西,而且能买到新鲜水果,在往后就不行了,所以建议在这里完成补给,带上些水果上路。
奔子栏与德钦之间是海拔5640的白茫雪山,也叫白马雪山,个人偏好白茫,因为真的是白茫茫的一片。当王姐说我们的车子要翻过白茫雪山的时候,我很有点意外,因为印象中雪山都是用来爬的,车子能在这雪地中穿行?不过也觉得有点激动,呵呵,人生的新高度:白茫哑口-海拔4292米。

翻白茫雪山有两条公路,我们走的是一条大路,据说小路的风景更好,如果是在六七月份来满山杜鹃一片红。



路过德钦,下午五点多到飞来寺,飞来寺本身是个很小的寺庙,唯一的特色是周围一圈转经筒。



但因为飞来寺直面梅里群峰,所以这几年来的游客越来越多,连酒吧都开了好几家。在雪山下喝葡萄酒,好不惬意。但如果有高原反应最好不要喝酒,因为酒精会增加心脏压力。我们几个似乎都是身体很好,从大理就开始喝,尤其是爬虫,做为队伍中唯一女性,不但能喝,还能喝出这酒放了几年,真厉害,我就不知其所以然了。



飞来寺旅店不多,所以价格相对较高,而且最好通过司机事先预定,否则香五一十一这样的长假有住满的危险,多人间40一床(而且无澡洗),标准间200左右。

在飞来寺要准备几件事:
一是调查好明天的日出时间,除非你想错过一辈子难得一件的美景。
二是如果要去雨崩的话最好把该充的电都充好,雨崩那里电源紧张,十来个抢一个插座。

入夜用长曝光拍了一张星空后,调好手机闹铃就沉沉睡去,睡在雪山边上的感觉很奇怪,觉得神圣而安全,也可能是错觉吧,高原多梦。


五一云南攻略(一)

五一的时候去香格里拉,照片早就在blog上放过了,攻略一直都没写,一个是比较忙一个是比较懒,所以现在把残留的一些记忆写下来,给大家一个参考。

行程与原计划有些不同,具体如下:

D1:晚上10点 昆明-大理(火车)
D2:大理呆一上午,中午 大理-中甸(长途汽车)
D3:中甸-飞来寺(包车)
D4:飞来寺-亚当(包车) 亚当-雨崩上村-雨崩下村-神瀑-雨崩上村(徒步&骑马)
D5:雨崩-亚当(徒步&骑马) 亚当-飞来寺-中甸(包车)
D6:中甸-赞松林寺-属都湖-白水台-虎跳峡(包车)
D7:虎跳峡-丽江
D8:丽江&束河
D9:丽江-昆明(晚卧铺汽车)

成员:爬虫、于莲、司南、Joe、我(全是磨坊的驴友)

Day 1

昆明号称春城,天气确是极好,不冷不热,但也不要抱太大希望,所有经历过城市现代化建设的大中型城市都是一个模子。
吃在昆明可以去有名的桥香园过桥米线或者到傣家菜馆“傣家竹楼”去尝尝傣味
昆明机场离市区很近,到市中心打的也就二十来块钱,不过昆明交通很堵,尤其是节假日。所以如果坐飞机到昆明然后马上赶火车一定要算好时间,一般从机场到火车站打的要走半小时,但算上出站,拿行李,堵车,进站,所以之间的间隔最好有两个小时。
爬虫就是没来得及赶上十点的火车,后来我们在大理才汇合。

Day 2

昆明到大理的卧铺火车票价是120左右,第二天一早天还没亮到大理,火车站外都是出租车,一般到大理古城10元左右,上车后司机会千方百计说服你,让你包他的车玩一天大理,说中午没有车去中甸丽江之类的,不要相信。在大理古城里就有订汽车票,所以不用着急,可以让司机沿着洱海边上的路开,那时正好是太阳刚刚从海里升上来的时候,景色极美,爬虫说如果上下班都能看到这样的景色她宁可到这里来上班。
早晨的大理古城很宁静,买了一个烤乳扇填肚子,羊奶做的,很香。
穿过古城,在古城一角的榆安园(tel:0872-2672093)找到磨坊的yuyue,yuyue是多背一公斤的组织人之一,没想到真人是一个看上去挺瘦弱的小姑娘,后来和我们一起同行至中甸然后独自坐车去了德钦的希望小学,我们几个背的都是50来升的登山包,她就一个小包,实在是很强。
我们打算先直接到中甸开始包车,回来再到丽江,所以在古城订了中午去中甸的车票,因为只有一上午,所以大理没有多玩。
先是吃了一碗洱丝(和面差不多,但是米做的),然后去了三塔公园,进三塔的门票是40,三塔倒影公园只要五元,三塔倒影是大理的著名景点在水边的躺椅上躺一下就知道无忧无虑是一种什么样的感受了。
大理有“风花雪月”之说,分别指下关风,上关花,苍山雪,洱海月。
大理在哀牢山与苍山之间,每天下午会起风,飞沙走石的。
花是据说以前大理有一株木莲花,香飘十里,后来被人砍掉了,所以现在是见不到了。
苍山离古城很近,也有四千多米,山顶也是终年积雪,也可以爬上去玩,不过要一两天的时间。
我因为中午就走了,所以有些也是从yuyue那里道听途说来的,不过觉得很有意思,以后再来的话要在大理多住两天,感觉大理要比丽江安静一些。
在大理搓了一顿中饭后上车去中甸,到中甸已是五六点左右,中甸的气温比大理要低很多,一下车感到冷风扑面而来,于是马上躲到订好的中甸青年旅馆,20一床位,虽然便宜,但热水器是太阳能的,晚了就没热水了,这个比较麻烦。
我们包车的司机王姐(tel:13988718689)已经在这里等着我们,我们跟她约好是500一天,东南三菱的吉普,从中甸进梅里一直到回丽江,一共五天,王姐人很好,是梅里这条线上唯一的女司机,车技一流,一直说要帮她做做广告的。

未完待续…

无题,写到哪算哪



强烈推荐这本书一定要买,觉得是《中国国家地理》中仅此于去年7月的大香格里拉专辑后最好的一本,虽然前半本让我觉得像是汽车杂志,尤其是其中一篇非要将花冠与那木错凑到一处,让人非常不爽,如果是帕拉丁也许还能忍受,可是花冠…

大香格里拉那一期我就是错过了时间,一直没买到,直到今年五月的时候在云南的时候终于找到一本,觉得格外有意义。

不过也有点为中国国家地理担心,似乎它能吸引我的主要都是那些专辑,等它把中国各个好地方的专辑都做完了,它还打算干嘛?再来一遍吗?

第二则消息,iTunes升级到V5了,来看看它都改了写什么地方:

New in iTunes 5
New Look A streamlined design and new features make iTunes even easier to use.
Search Bar Find stuff fast and refine your search with the handy new Search Bar.
Parental Controls Limit kids’ access in iTunes.
Playlist Folders Organize all your playlists into folders.
Smart Shuffle Adjust random playback to hear what you want.
Sync from Outlook Sync Outlook and Outlook Express contacts & calendars to iPod.

简单的讲就是改了下界面、改了下搜索。搜索改得挺不错,原来我就特别喜欢iTunes的搜索部分,搜一个字自动创建出播放列表,快而独特。

可惜改动不大,原以为apple会把它占的内存改小一点,想不到越来越大,原来40M,现在50M了,它以为内存不用钱买的呀。

那个outlook同步的功能找了半天没找到在哪里,哪位找到的同志麻烦给我讲一下。

自从搞了个shuffle后没事喜欢用iTunes下载podcast放到shuffle里路上乘车的时候听,最常听的是一个叫skepticality的podcast,因为这个podcast什么都讲从小行星讲到大猩猩,所以有时听了老半天也不知道它主要在讲什么

动态控件、DropDownList和ViewState

最近碰到这样一个问题,可以描述为:


我要在页面上找到指定的DropDownList,并在该DropDownList的前面加入一个动态创建的RequiredFieldValidator


之所以要加在前面是可以使errormessage出现在控件的上方


DropDownList 的 Item不是在aspx中用asp:ListItem写死,而是通过DropDownList.Items.Insert或者DataBind在后台添加


(至于如何指定DropDownList,用的是Attribute,在这里就不多说了)


Page_Load()中给DropDownList添加项的代码:


ddl1.Items.Insert(0,new ListItem(“”, “”));
ddl1.Items.Insert(1,new ListItem(“1”, “1”));
ddl1.Items.Insert(2,new ListItem(“2”, “2”));


Page_Load()中插入动态控件的代码:


targetControl = “ddl1”;    // targetControl, the id of the target dropdownlist
errorMessage = “Must choose one.”;


RequiredFieldValidator rfv = new RequiredFieldValidator();
rfv.ID = targetControl + “RequiredFieldValidator”;
rfv.ControlToValidate = targetControl;   
rfv.ErrorMessage = errorMessage;
rfv.Display = ValidatorDisplay.Dynamic;
rfv.EnableViewState = false;


controlToValidate = FindControl(targetControl);
container = controlToValidate.Parent;
index = container.Controls.IndexOf(controlToValidate);
container.Controls.AddAt(index,rfv);


错误是:无论如何选择,DropDownList提交上来的值始终是空


研究发现,动态绑定的DropDownList在PostBack后是通过ViewState取值的,而只要动态插入的控件的位置在DropDownList之前,即使我把动态控件的EnableViewState设为false,PostBack后就会出现”Failed to load viewstate”或者控件从viewstate中取到的值为空的错误。


我的解决方法是:


1.用Controls.Add把动态控件插到DropDownList之后,也就是Validator的index比DropDownList大,就不会影响DropDownList从viewstate取值


2.如果一定要放在前面,可以把上面两段代码的任意一段放到OnInit中


对此我的理解是:


1.页面的ViewState是在Page_Load以前生成,所以Page_Load中动态加入的控件不改变当前ViewState,但改变了当前页控件的顺序,所以在PostBack后读取ViewState到对应的控件出错。


2.动态绑定DropDownList的代码放在Page_Load中,提交后页面从ViewState中取得保存的值,如果页面禁用ViewState就只好放到OnInit中,每次刷新后重新Init。