本月内,有三位在公司工作两年以上的同事离开了公司…… 这种感觉真是不爽,但我们又能怎样呢?伤感中……

第二天 海底世界-亚龙湾-海峡湾度假村-夜市

  由于昨天晚上吵了个半天,弄得个三点多钟才睡。早上八点多钟才起来,出来才发现,已经有好多人早就已经跑到海滩上玩了。原本定的公司上午活动就只有延期了。

img_0038_resize.jpg

  来到沙滩边,沙滩边早就挤满了熙熙攘攘的人群了。我们只有找个人少的地方去,还好这个沙滩足够大~ 😀

img_0061_resize.jpg

  找了个五元/个的沙滩椅为据点后,就迫不及待的准备开始下水了。换了衣服以后就往海里狂奔!奔进海里想说的第一句话就是:太咸了!别说是呛一口海水了,就是海水抹一点在嘴边,都给你咸得发苦。只有把嘴闭得紧紧的。在海里面游了两下发现,在海里面游泳特别好游,怎么游都不会沉,怎么游你都可以很轻易的就漂浮在水面上。游着游着一不小心就游出去一百多米。岸上的人叫了才发现已经游了好远了。

  把潜水镜戴上,看看在海里面潜水是个什么感觉!但是结果却发现--潜不下去!无论我怎么用力划,还是把肺里面的气呼出来再潜,都下不去。费劲了好半天,只有头插在水里面,脚还在水面上乱舞。郁闷!只有放弃!在水面上飘着,用潜水镜看看海底吧。这里的海水还真是清澈,从水面上往下看,能见度我估计不低于20米。往海里面游了好长时间,往下看看都可以看见海底细细的沙滩。那鱼呢?能不能捉到鱼呢?我仔细搜寻,才在贴海底的地方发现一条巴掌大的半透明的小鱼。在我把头露出水面换了气再去寻它时,它已经跑得无影无踪了。更别说逮得到了。

  在水里面玩得差不多,就开始沙滩活动了--埋人。非常不幸,我成了第一个牺牲品。被沙埋了不说,还被在沙上做出各种BT的东西。具体就不说了~ 😀 埋完我不过瘾,大家又开始埋LSY。hoho,这次我就可以主刀了。 😀 此段照片-略

img_0127_resize.jpg

  欢乐的时候总是过得很快,已经十二点了,就只有回酒店午饭。这是跟团的第一顿正餐(早上的早点除外)。结果有哪几个菜呢?蒸鸡蛋、紫菜汤、榨菜(这个也算一盘菜!)、小虾米…… 算了。想想每个就10元的餐标,也没什么要求了。

  本来计划在这里再玩一下午,然后晚上的时候在去另外一家宾馆的。但是N多人提意见说中午太热了,在沙滩上根本受不了,他们想回房去呆着。而这里的房间已经退了,就只有出发去新宾馆了。这里的沙滩就玩不了了,可惜……

  大家刚坐上车,导游就来游说。说他们介绍三个自费景点,要求我们去。1. 大小洞天 2. 动物表演 3. 亲亲鱼疗。说三个自费项目如果我们都去的话,原价是365的,现在给我们优惠到350。但是我们都不想去,我们想在沙滩边玩。他就在那不停的说啊说啊。说些什么导游是要赚钱的,等等等等。给大家说得都非常郁闷。而且说什么我们不交钱,他们就没钱给宾馆。就走不了。就把大家都困在车上!这是怎么回事嘛!僵持了半天,见我们还没有交钱的迹象。他干脆就让司机熄火,把空调关了。要知道,那个时候的地面气温将近38°,空调一关的话,我们就象是被关在罐头里面一样。全部人就都下车了,都开始和导游吵。场面非常之混乱。我们珍贵的旅游时间啊!难到就要被这个垃圾导游这样废掉?气愤!

  这个时候,我们的人差点就要和那个地陪导游动起手来了。当然,虽然现在情况是这样,但是我们是绝对不能让步的。怎么能随随变变就交钱给他呢?僵持了半天,两个全陪导游想尽了办法。我们才又上车,出发到新的宾馆--海峡湾度假村。

  到了海峡湾度假村,分了房间以后。由于天气太热,我们就待在房里面休息了一阵子。接着,我们来到了海滩边。发现这里的海滩和亚龙湾的海滩根本没法比,水比较混浊。沙滩也没有亚龙湾的舒服,沙没有那里的细,颜色也比较黑一点。原本打算四点半钟组织公司集体活动,最后因人比较散,只组织了个沙滩足球,就没其他活动了。我们就在沙滩边走走,拣拣寄居蟹、早潮蟹、好看的贝壳等等。

img_0140_resize.jpg

  不只大家仔细看没,在沙滩上的沙是一小颗一小颗圆圆的。像是有机器弄出来一样,每颗沙球的大小都基本一样。而且在沙滩上还有一小个一小个的洞。这些,全是早潮蟹弄出来的。整个沙滩,一片一片的,全是这种沙球。在小洞里又躲着很小的早潮蟹。

img_0611_resize.jpg

  在沙滩上玩着玩着,不知不觉就日落了。在海边看日落真是一件非常惬意的事啊!那种美景,简直用语言无法形容…………我从我照的N张照片中精选出四张海边日落的景色,不错吧?

img_0147_resize.jpg

img_0155_resize.jpg

img_0169_resize.jpg

img_0175_resize.jpg

  七点集中吃了非常难以下咽的团队餐,大家都在想到哪去补充改善一下伙食。听CHT说这里有一个昆明老板开的海鲜馆子,还是牛街庄的老板,牛吧?他卖的虾是5元/斤的。而且距离住处也不远,走路就可以去。于是大家都往他那里跑了。一到了那我们就点5元/斤的虾,结果老板说卖完了。等他去看看还能不能弄点来。而且老板说是他老婆是昆明的,他不是。呵呵,差别还是大的。资询了一下价格,还是挺贵的。我们六个人一行点了三盘海鲜:两盘螃蟹,一盘贝壳,每人出了55元。不过这次吃得还算比较爽。而且最后老板还是送了我们一小盘虾。

dsc01248_resize.jpg

  回到宾馆,“黑社会”例行拱猪,活动到一点。大家都很累了,也就休息了……

 

第一天 昆明-三亚

  下午四点下班,以最快的速度赶到机场。还好没有晚点,感觉还提前了些。晚上8:30分,我们顺利降落在三亚机场。一出飞机就感觉到一股热浪铺面而来,我们还相互关心了一下:你穿着毛衣热不热啊?呵呵。出了机场,在门口迎接我们的旅行社已经准备好了两辆大巴。我们就坐上大巴向宾馆出发了。不过其中还是发生了一些小插曲:才走出机场,LR就发现他的钱包不见了,他的钱包是放在他的后屁包里面的。不知道是他不小心弄丢了还是被人摸走了。里面还有他的身份证还有800元钱。我这个时候想起来检查了一下我的包,发现我的腰包的拉链全开了。慌忙看了一下里面的东西,发现好像没丢东西。不过后几天找剃须刀的时候把所有包都翻遍了都没找到。不会是在这时候被人拿走了吧? (PS: 后来回家的时候在家里面找到了,原来是出门的时候收漏了,呵呵)

  到了宾馆,大家发现行程变了。原先我们定的行程是第一天晚上住海峡湾度假村;第二天白天游蜈支洲岛,晚上住海峡湾度假村;第三天到海底世界度假村,早上自由活动,下午公司活动,晚上就住海底世界;第四天自由活动晚上9:50的飞机回昆。但是我们现在第一天晚上就到了海底世界,我们的行程全部被打乱了。据旅行社的说法是,因为第二、三天海底世界的房因为ZF开会被强行征用了,所以只能安排第一天让我们住海底世界,第二、三天住海峡湾。这样,我们的行程就全部被打乱了。直接的导致就是我们少了一天在海滩上自由活动的时间。结果呢,就开始吵,吵了将近一个半小时。而我们大家都还在饿着肚子啊!从下班到现在!吵了半天,能有什么结果呢?还不是只有先按照地陪的安排了。然后又大巴带我们出去吃大排档海鲜。结果去了被宰,一伙人吃了两个菜,一个青蟹、一个贝壳,吃了300元近。

  就这样,第一天就这样过了……

图片附件:
img_0008_resize.jpg
图片附件:
img_0023_resize.jpg

终于!我们公司要在今天晚上七点出发去海南了!

期待啊!可以看到大海了!想到第一次看到大海已经是九年前的事情了,不知道这次看到大海会是一个什么样的感觉?

期待我的片片吧~ 😀

 

最近看了这部电影 — An Inconvenient Truth (难以忽视的真像) 猜猜看主角是谁?是美国副总统AI Gore(戈尔)!

本片讲述的是Global Warming的问题。他用大量的事实向我们表明,地球上的二氧化碳正以惊人的速度上升,这使得全球的温度都开始升高,温度升高已经使得北极的冰层开始融化,前不久发现有一只北极熊被淹死了,就是因为它在游了30KM以后还是没有找到适合它的冰面而被淹死的。而现在南半球的冰川也已经开始融化。这样的结果,导致了美国新奥尔良悲剧的发生、导致了中国的洪水、干旱,导致了美国的高温袭击。如果我们不进一步组织Global Warming的问题的话,在50年内,北京、上海、纽约、旧金山等等低海拔的城市都会被大海所淹没……

推荐大家都来看看一看这部纪录片,相信你和我一样都会被震惊的:
http://lib.verycd.com/2006/11/04/0000126737.html

◎简  介 

剧情:
  导演戴维斯·古根海姆巧妙地把全球变暖的种种自然现象与戈尔先生的个人历史,以及他长期以来致力于警示和改善全球变暖现象的行动交织在一起,构成了一部具有强烈震撼力的纪录片。作为一名资深的环保主义者,戈尔先生在本片中站在一个具有思考深度和令人注目的方式,向大家展示了大量有关全球变暖给人类带来巨大危害的,无可争议的事实和信息。“戈尔先生在本片中完全脱离了政治性演讲的外壳,充分地展示了他的个人魅力,以一种幽默而又客观的态度给观众们罗列了种种事实,让他们自己去得出结论。到了最后,所有的观众都被这些让人难以忘怀的画面深深打动,以至于他们都在座位上坐不住了”,导演古根海姆如是说。“难以忽视的真相”并不是一部表现绝望情绪的电影,但也不是仅仅喊出一个保护地球的口号而已……“很显然,我们现在面临着一个逐步加深的全球气候危机,这需要我们尽快地行动起来,以最聪明有效的方式解决问题”,戈尔语重心长地对观众说。

幕后:
  电影已经不再是纯粹的娱乐工具,现实的沉重和复杂让它又背负起了越来越多的责任。自然问题,社会现象,当普通的呐喊声被淹没于金钱的碰撞声中的时候,一部部警世的记录片应运而生了。例如快餐究竟对人体健康是否有害?有害的程度怎样?一直没人知道,或者说没人愿意知道。直到一个美国导演的出现。摩根在一部记录片《大号的我》中,以自己做试验,在2004年在一个月内完全吃麦当劳的食物,终于让恐怖的体形和极其糟糕的各项数据勇敢的捅破了这个人们一直不愿意捅破的窗户纸–快餐食品=垃圾食品=慢性自杀。
  麦克尔·摩尔的《华氏911》在戛纳斩获大奖,宣告了纪录片的繁荣时代到来。近几年来,以保护动物为主题的纪录片,如《帝企鹅日记》等都得到了大家的广泛推崇,并且切实地起到了宣传动物保护的作用。如今,焦点又转到了环境保护上,本片作为导演古根海姆的力作,此次也被列入了戛纳电影节的参展影片单元,充分说明了如今纪录片受重视的程度。我们也由衷希望这部精心编排的环保纪录片,能够敲响大家头脑中的警钟,为阻止全球变暖起到重要的作用。

阵容:
  作为一部纪录片,本片的阵容堪称史无前例的豪华。两大主角,一个便是我们赖以生存的地球,另一个便是前任美国副总统——阿尔·戈尔。笔者可以很负责任地说,这两位主角是任何片商花再多钱也请不到的。
  两位主角在片中均以真实身份倾力出演。地球出演了最为悲惨的角色,以千疮百孔的形象,达到震撼人心的效果。而脱下副总统外衣的戈尔,更是以一个悲天悯人的死忠环保主义者形象,对观众晓之以情动之以理。作为本片的主演兼制片人,戈尔不收取任何报酬的卖力演出,确实令人敬佩。无论是冲着学习知识,还是冲着戈尔的个人魅力,本片都相当具有看点。

PS: 第二次写这篇影评,郁闷!都已经写了好多了,结果IE突然出错,关闭了!什么烂IE,而且还连修复都修复不了!又不习惯IE7那个花哨的界面~ Firefox的兼容性又有问题。唉…… 什么时候才有个像样的浏览器给我们用用啊!

 

注意!这些网站大部分有病毒,要从后门进入!

Phrozen Crew:                  
     http://www.phrozencrew.com/ ;  (The OFFICIAL PC Website)
     http://nitr8.tsx.org/ ;  (Nitr8^‘s site — PC mem)
     http://www.ixpres.com/jwwiii/
     http://rude.8m.com/ ;  (RudeBoy‘s Page of Fun — PC mem)
     http://www.phrozencrew.com/~teraphy/
     http://azrael.infierno.org/
     http://come.to/dkc.com/ ;  (da Kurious Child‘s site — PC mem)
     http://virogen.cjb.net/ ;  (Virogen‘s NOP page — PC mem)
     http://davinci.ice.org/ ;  (DaVinci‘s Art Gallery)
     http://nitallica.cjb.net/ ;  (My Artrial Emissions)
     http://welcome.to/my.gothic.domain/
     http://surf.to/HarvestR/ ;  (Various Links and Tools)
     http://hackersclub.com/km/files/cfiles/index.html ;  (PC tuts)
     http://uranus.kersur.net/Cracks/PC_Files/
     http://defiance.hysterical.net/T_D/cracks.htm
     http://www.toxic.thiswayup.com/
     http://start.at/SerialNumberShop/
     http://defiance.hysterical.net/T_D/crack-packs/index.htm ;  (More Crack  Packs)
     http://home.global.co.za/~ticket/ ;  (alternate Serial Number Shop  URL)
     http://www.warezone.com/cracks/9811/

uNiTED cRACKiNG fORCE:
     http://www.ucf2000.com/ ;  (UCF‘s Homepage and access to their crack files)
     http://www.seventh.com.au/ucf/ ;  (Something new from the guys in  UCF,check it out!)
     http://quantico.cjb.net/ ;  (Quantico‘s HQ — MEXELiTE & UCF mem)
     http://scroll.to/mysite/ ;  (KiRCH0FF‘s website — UCF mem)
CORE:
     http://www.orc.ru/~pakou/index.html ;  (Russ97‘s CORE Collection)
     http://www.russcore.net/ ;  (CORE cracks)
     http://hambo.yeah.net/ ;  (Keygen Studio)  
     http://202.103.111.109/hambo/index.html ;  (alternate Keygen Studi URL)
     http://www.crackworld.net/hambo/index.html ;  (alternate Keygen Studio URL)
LawAbidingCriminalZ:
     http://users.powernet.co.uk/smurff/ ;  (LAC Homepage)
     http://www.welcome.to/lawabidingcriminalz/ ;  (Another LAC url)
     http://www.lac2000.freeserve.co.uk/ ;  (Another LAC url)

cRACKiNG 4 aLL:
     http://surf.to/C4A ;  (c4a Website)
     http://208.234.248.14:81/c4all/ ;  (Alternate C4A URL)
     http://guest:[email protected]/c4all/ ;  (more C4A!!)

The Exterminators:
     http://skcarc.reallyrussian.com/ ;  (username: guest password: rusky –
Please note this is temporary)
     http://home.bip.net/rbz16/pict1b.html ;  (RayBieZ Releases — tEXmember)
     http://qnet.kr.net/~netp/tex99/ ;  (fresh tEX releases!)
     http://tex99.mypage.org/ ;  (Fresh tEX URL)
AnThraX – The Ongoing Force:
     http://www.anthrax.org/main.html ;  (AnThraX Website)
     http://www.lis.net.au/~jmaxt/cracks/ ;  (Cokebottle cracks page —
member of AnThraX)
     http://take-us.to/dasavant/ ;  (DASavant‘s Site — another member  
of
AnThraX))
     http://www.chez.com/ccosmo/cosmo.htm ;  (Cosmo Cramer‘s Cracks &
Serials — President of AnThraX)
The Nameless Ones:
     http://members.xoom.com/tno/ ;  (tNO Website)
     http://russtno.cjb.net/ ;  (Russ‘s tNO Cracks Page)
     http://www.listen.to/tno/ ;  (tNO Cracks Page)
     http://www.orc.ru/~pakou/tno.html ;  (Russ97‘s tNO Page)
Crackers By Excellence:
     http://welcome.to/cbe/ ;  (CbE Website)
     ftp://24.95.71.29:99/pub/ ;  (CbE complete file archive)
BaSiC SmUrFs:
     http://www.come.to/basic_smurfs/ ;  (BaSiC SmUrFs Page)
Dedicated 4 Cracking:
     http://toto.xcem.com/d4c/index.html ;  (Unofficial d4c Website)
FAITH2000:
     http://listen.to/faith2000/ ;  (Faith2000 website — l/p F2K/4ever)
     http://move.to/f2k_cp/ ;  (Faith2000 April Crackpack)
     http://search.faith2000.com/ ;  (F2K Search Page)
     http://www.faith98.demon.nl/html/files.htm ;  (alternate F2K URL)
     http://home.telia.no/faith2000/mirror/index.html ;  (alternate F2K URL)
     http://members.tripod.com/midi_now/ ;  (alternate F2K URL)
Hack Section Warez:
     http://hsection.dynip.com ;  (Hack Section Warez Website)

Kick Ass Cracking:
     http://kac.cjb.net/ ;  (kAc Website)

Laxity:
     http://www.laxity.com/ ;  (Laxity WebSite)
     http://www.http2.com/www.laxity.com/ ;  (alternate Laxity URL)

Drink Or Die:
     http://www.drinkordie.com ;  (DOD Website — read: COOL GFX!)

Cyber Knights Templar:
     http://members.tripod.com/cyberkt ;  (Cyber Knights Templar Homepage)

PZ Crack Team:
     http://fly.to/pct/ ;  (PZ Website)
     http://pzct.cjb.net/ ;  (alternate PZ URL)
     http://pzcrackteam.findhere.com/ ;  (alternate PZ URL)

HNC Productions:
     http://www.multimania.com/~hnc ;  (HNC Website)

Tristar & Red Sector:
     http://www.trsi.de/ ;  (Tristar & Red Sector Website)
Six World ($!X):
     http://come.to/sixworld ;  (The $!X WEbSite)
     http://come.to/sixbackup ;  ($!X Site)
     http://www.thepentagon.com/sixworld ;  ($!X Site)
     http://cool.icestorm.com/sixworld/sixcrackz.htm ;  ($!X Cracks)
SpeltaniX:
     http://hackerlink.or.id/spx/main.html ;  (SpeltaniX WEbSite)
     http://travel.to/alien/ ;  (|Alien|‘s webpage — SpeltaniX member)

Croatian Cracking Service:
     http://surf.to/crocracks/ ;  ([CCS] WEbSite)
Hungarian Pirates Alliance:
     http://w3.swi.hu/krow/hpaweb/crackz.html ;  (HPA Cracks Page)
     http://hpa.netchicken.hu/ ;  (alternate HPA Cracks Page)
     http://www.hpacrackers.com/ ;  (Newest HPA Link)
Ivanopulo:
     http://ivanopulo-cracks.da.ru/ ;  (Ivanopulo‘s Cracks Page)
     http://www.artcon.ru/cracks/ ;  (Another Ivanopulo Addy)

BLaCK SQuaDRoN:
     http://www.blacksquadron.est-ici.org/ ;  (BLaCK SQuaDRoN‘s WebSite)
     http://get.to/bs2000/ ;  (Black Squadron releases)

Ebola Virus Crew:
     http://beam.to/evc/ ;  (Ebola Virus Crew WebSite)
4110 Crackers:
     http://come.to/4110/ ;  (4110 WebSite — remember the guys in GCG?)
     http://beam.to/4110/ ;  (alternate 4110 URL)
     http://4110.tsx.org/ ;  (alternate 4110 URL)
Ultra Tech:
     http://ultra-tech.org/ ;  (Ultra Tech WebSite)

The Egoiste:
     http://w3.to/egoiste/ ;  (The Egoiste Website)
     http://egoiste.cjb.net/ ;  (alternate Egoiste URL)
     http://come.to/egoiste/ ;  (alternate Egoiste URL)
Green Knight:
     http://www.green-knight.com/ ;  (Green Knight‘s Website)
     ftp://24.93.48.171:21/ ;  (Green Knight FTP — login: Anonymous)
Radium:
     http://www.bape3.da.ru/ ;  (Radium Release Site)
     http://user.koenig.su/HBB2/audiowarez/ ;  (Find their releases here)
     http://www.enet.ru/win/digitalKenig/user/HBB2/audiowarez/ ;  (Findtheir releases here)

LASH:
     http://www.lash-cracking.com/ ;  (LASH webpg)
     http://come.to/moreorlash/ ;  (alternate LASH URL)
     http://meltingpot.fortunecity.com/liveoak/754/index.htm ;  (alternate  LASH URL)

Warp:
     http://www.warphome.org/ ;  (Home of the Efnet-based cracking crew Warp)

gERMAN cORRUPTED kILLaS:
     http://gck.home.pages.de/ ;  (GCK homepage)
     http://www.crackworld.net/german/ ;  (alternate GCK URL)
     http://homepages.go.com/~germancorruptedkillas/ ;  (alternate GCK  URL)

BREAKPOiNT:
     http://breakpoint.tsx.org/ ;  (BreakPoint homepage)
FIGHTING FORCE:
     http://ffo2000.cjb.net/ ;  (FFO website)

TNT!Crack!Team:
     http://come.to/tntcrackteam/ ;  (TNT website)
     http://members.xoom.com/_XOOM/tntcrackteam/index.htm ;  (altnernate TNT URL)
     http://drive.to/tnt/ ;  (TNT‘s Security Site)

Whiskey Kon Tekila [WkT!]:
     http://wkt.tsx.org/ ;  (WKT website)
     http://wkt.mypage.org/ ;  (Alternate WKT URL)
     http://pagina.de/wkt/ ;  (Alternate WKT URL)
     http://come.to/wkt/ ;  (Alternate WKT URL)
     http://ecd.cjb.net/ ;  (WKT Tutorials Site)
     http://lafundacion.tsx.org/ ;  (La Fundacion — Mr Crimson‘s CrackPage — WKT member)

Eternity:
     http://welcome.to/Eternitys.home/ ;  (Eternity‘s website)
     http://www.toxic.thiswayup.com/ ;  (Toxic Crackz Page)
     http://members2.easyspace.com/archivist/

PRO-X:
     http://come.to/prox/ ;  (PRO-X Webpage)
BRCrackers:
     http://brc.tsx.org/ ;  (BRCrackers Webpage — excellent Brazilian crackers)

Nova:
     http://surf.to/nova/ ;  (NOVA Webpg)
     http://novacracks.cjb.net/ ;  (alternate NOVA URL)
Tuberculosis:
     http://tbc.tsx.org/ ;  (Tuberculosis WebSite)
     http://tbc.iscool.net/ ;  (alternate Tuberculosis URL)
     http://tuberculosis.cjb.net/ ;  (alternate Tuberculosis URL)
     http://viny.tsx.org/ ;  (Viny‘s Page — Tuberculosis member)
     http://adenozin.tsx.org/ ;  (aDENOZiN‘s Page — Tuberculosis member)
     http://come.to/crackingHQ/ ;  (jak‘s Cracking HQ — Tuberculosis member)

PDAZone:
     http://WWW.PDAzone.net/ ;  (PDAZone Website — PalmPilot and WinCE  crackers)

Dark Society of Destruction:
     http://www.come.to/cib/ ;  (Woody‘s website — a DSD member –official CiB site)
     http://hjem.get2net.dk/monkee/ ;  (Dena‘s website — a DSD member)
     http://home7.inet.tele.dk/mafia/ ;  (Sordid‘s website — a DSD member)

United Cracking Team:
     http://uct2000.cjb.net/ ;  (United Cracking Team Homepage)
     http://uct2000.tsx.org/ ;  (another UCT addy)
     http://uctnet.tsx.org/ ;  (UCT‘s Scene Newz Page)
     http://upp.tsx.org/ ;  (UCT‘s Universal Power Patcher)

Digital Cracker Domain:
     http://dcd.mainpage.net/ ;  (DCD webpage — nice looking, easy loading)

BAKOENIN CREW:
     http://listen.to/bc98/ ;  (BAKOENIN CREW webpage)
     http://bc98.ourfamily.com/ ;  (BAKOENIN CREW — american mirror)
German StarfoX CreW:
     http://fly.to/gscob/ ;  (German StarfoX CreW webpage)

iMPACT:
     http://www.impact.notrix.net/ ;  (iMPACT webpage)
     http://members.xoom.com/_XOOM/_VOiZE_/index.html ;  (alternate iMPACT URL)
     http://boozers.fortunecity.com/slug/58/ ;  (alternate iMPACT URL)

eRRatum Krak House:
     http://all.at/ekh/ ;  (eRRatum Krak House webpage)
     http://www.hackerlink.or.id/ekh/englishnew.htm ;  (alternate Erratum URL)

Team Epsylon:
     http://www.teamepsylon.de.cx/
Addiction:
     http://www.addiction.net/

German Cracking Force:
     http://get.to/gcf/ ;  (German Cracking Force webpage)
     http://skyscraper.fortunecity.com/activex/607/hp.htm ;  
CroSSover:
     http://crossover.tsx.org/ ;  (CroSSover homepage)
Looney Tunes Crack Club:
     http://surf.to/ltcc/ ;  (LTCC Website — another Brazilian crackinggroup)

The Hacking Paranoiaz:
     http://tsx.de/paranoiaz/ ;  (THP Website)
     http://fast.to/dabytefrog/ ;  (alternate THP URL)

Ground Zero Inc:
     http://w3.to/gzi/ ;  (GZI Website)

Phusion:
     http://i.am/jamesbond001/ ;  (PhuSioN Website — XP Crackers)
     http://www.geocities.com/ResearchTriangle/Thinktank/8521/(alternate PhuSioN URL)

IceFortress:
     http://www.icefortress.com/ ;  (IceFortress Homepage — International Crackers Evolution)

Cracker`s NEXUS:
     http://move.to/CrackersNEXUS/ ;  (Cracker`s NEXUS — German Cracking/MP3/Burning/Etc. Group)
Soldiers of Satan Group:
     http://sos.nanko.ru/ ;  (SOS Group Website)

bYtEsMaCk InC:
     http://www.angelfire.com/nc/bYtEsMaCk/ ;  (bYtEsMaCk InC. Website)

Digital Cyber Hackers:
     http://www.dch.de.cx/ ;  (Digital Cyber Hackers URL)
     http://www.starkontakt.de/DCH/ ;  (alternate DCH URL)

    C# 出来也有些日子了,最近由于编程的需要,对 C# 的类型转换做了一些研究,其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 Unicode 码、数值字符串和数值之间的转换、字符串和字符数组/字节数组之间的转换、各种数值类型和字节数组之间的转换、十六进制数输出以及日期型数据的一些转换处理,在这里与大家分享——

1. 装箱、拆箱还是别名

    许多 C#.NET 的书上都有介绍 int -> Int32 是一个装箱的过程,反之则是拆箱的过程。许多其它变量类型也是如此,如:short <-> Int16,long <-> Int64 等。对于一般的程序员来说,大可不必去了解这一过程,因为这些装箱和拆箱的动作都是可以自动完成的,不需要写代码进行干预。但是我们需要记住这些类型之间的关系,所以,我们使用“别名”来记忆它们之间的关系。
    C# 是全面向对象的语言,比 Java 的面向对象都还彻底——它把简单数据类型通过默认的装箱动作封装成了类。Int32、Int16、Int64 等就是相应的类名,而那些我们熟悉的、简单易记的名称,如 int、short、long 等,我们就可以把它称作是 Int32、Int16、Int64 等类型的别名。
    那么除了这三种类型之外,还有哪些类有“别名”呢?常用的有如下一些:

    bool -> System.Boolean (布尔型,其值为 true 或者 false)
    char -> System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符)
    byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255)
    sbyte -> System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128 ~ 127)
    ushort -> System.UInt16 (无符号短整型,占 2 字节,表示 16 位正整数,范围 0 ~ 65,535)
    uint -> System.UInt32 (无符号整型,占 4 字节,表示 32 位正整数,范围 0 ~ 4,294,967,295)
    ulong -> System.UInt64 (无符号长整型,占 8 字节,表示 64 位正整数,范围 0 ~ 大约 10 的 20 次方)
    short -> System.Int16 (短整型,占 2 字节,表示 16 位整数,范围 -32,768 ~ 32,767)
    int -> System.Int32 (整型,占 4 字节,表示 32 位整数,范围 -2,147,483,648 到 2,147,483,647)
    long -> System.Int64  (长整型,占 8 字节,表示 64 位整数,范围大约 -(10 的 19) 次方 到 10 的 19 次方)
    float -> System.Single (单精度浮点型,占 4 个字节)
    double -> System.Double (双精度浮点型,占 8 个字节)

    我们可以用下列代码做一个实验

    private void TestAlias() {
        // this.textBox1 是一个文本框,类型为 System.Windows.Forms.TextBox
        // 设计中已经将其 Multiline 属性设置为 true
        byte a = 1; char b = ‘a‘; short c = 1;
        int d = 2; long e = 3; uint f = 4; bool g = true;
        this.textBox1.Text = ;
        this.textBox1.AppendText(byte -> + a.GetType().FullName +
);

        this.textBox1.AppendText(char -> + b.GetType().FullName +
);

        this.textBox1.AppendText(short -> + c.GetType().FullName +
);

        this.textBox1.AppendText(int -> + d.GetType().FullName +
);

        this.textBox1.AppendText(long -> + e.GetType().FullName +
);

        this.textBox1.AppendText(uint -> + f.GetType().FullName +
);

        this.textBox1.AppendText(bool -> + g.GetType().FullName +
);

    }

    在窗体中新建一个按钮,并在它的单击事件中调用该 TestAlias() 函数,我们将看到运行结果如下:

    byte -> System.Byte
    char -> System.Char
    short -> System.Int16
    int -> System.Int32
    long -> System.Int64
    uint -> System.UInt32
    bool -> System.Boolean

    这足以说明各别名对应的类!

2. 数值类型之间的相互转换

    这里所说的数值类型包括 byte, short, int, long, fload, double 等,根据这个排列顺序,各种类型的值依次可以向后自动进行转换。举个例来说,把一个 short 型的数据赋值给一个 int 型的变量,short 值会自动行转换成 int 型值,再赋给 int 型变量。如下例:

    private void TestBasic() {
        byte a = 1; short b = a; int c = b;
        long d = c; float e = d; double f = e;
        this.textBox1.Text = ;
        this.textBox1.AppendText(byte a = + a.ToString() +
);

        this.textBox1.AppendText(short b = + b.ToString() +
);

        this.textBox1.AppendText(int c = + c.ToString() +
);

        this.textBox1.AppendText(long d = + d.ToString() +
);

        this.textBox1.AppendText(float e = + e.ToString() +
);

        this.textBox1.AppendText(double f = + f.ToString() +
);

    }

    编译顺利通过,运行结果是各变量的值均为 1;当然,它们的类型分别还是 System.Byte 型……System.Double 型。现在我们来试试,如果把赋值的顺序反过来会怎么样呢?在 TestBasic() 函数中追加如下语句:

        int g = 1;
        short h = g;
        this.textBox1.AppendText(h = + h.ToString() +
);

    结果编译报错:
    G:ProjectsVisual C#ConvertForm1.cs(118): 无法将类型“int”隐式转换为“short”
    其中,Form1.cs 的 118 行即 short h = g 所在行。

    这个时候,如果我们坚持要进行转换,就应该使用强制类型转换,这在 C 语言中常有提及,就是使用“(类型名) 变量名”形式的语句来对数据进行强制转换。如上例修改如下:

        short g = 1;
        byte h = (byte) g;  // 将 short 型的 g 的值强制转换成 short 型后再赋给变量 h
        this.textBox1.AppendText(h = + h.ToString() +
);

    编译通过,运行结果输出了 h = 1,转换成功。
    但是,如果我们使用强制转换,就不得不再考虑一个问题:short 型的范围是 -32768 ~ 23767,而 byte 型的范围是 0 ~ 255,那么,如果变量 g 的大小超过了 byte 型的范围又会出现什么样的情况呢?我们不妨再一次改写代码,将值改为 265,比 255 大 10

        short g = 265; //265 = 255 + 10
        byte h = (byte) g;
        this.textBox1.AppendText(h = + h.ToString() +
);

    编译没有出错,运行结果却不是 h = 265,而是 h = 9。
    因此,我们在进行转换的时候,应当注意被转换的数据不能超出目标类型的范围。这不仅体现在多字节数据类型(相对,如上例的 short) 转换为少字节类型(相对,如上例的 byte) 时,也体现在字节数相同的有符号类型和无符号类型之间,如将 byte 的 129 转换为 sbyte 就会溢出。这方面的例子大同小异,就不详细说明了。

3. 字符的 ASCII 码和 Unicode 码

    很多时候我们需要得到一个英文字符的 ASCII 码,或者一个汉字字符的 Unicode 码,或者从相关的编码查询它是哪一个字符的编码。很多人,尤其是从 VB 程序序转过来学 C# 的人,会报怨 C# 里为什么没有提供现成的函数来做这个事情——因为在 VB 中有 Asc() 函数和 Chr() 函数用于这类转换。
    但是如果你学过 C,你就会清楚,我们只需要将英文字符型数据强制转换成合适的数值型数据,就可以得到相应的 ASCII 码;反之,如果将一个合适的数值型数据强制转换成字符型数据,就可以得到相应的字符。
    C# 中字符的范围扩大了,不仅包含了单字节字符,也可以包含双字节字符,如中文字符等。而在字符和编码之间的转换,则仍延用了 C 语言的做法——强制转换。不妨看看下面的例子

    private void TestChar() {
        char ch = ‘a‘; short ii = 65;
        this.textBox1.Text = ;
        this.textBox1.AppendText(The ASCII code of ‘ + ch + ‘ is: + (short) ch +
);

        this.textBox1.AppendText(ASCII is + ii.ToString() + , the char is: + (char) ii +
);

        char cn = ‘中‘; short uc = 22478;
        this.textBox1.AppendText(The Unicode of ‘ + cn + ‘ is: + (short) cn +
);

        this.textBox1.AppendText(Unicode is + uc.ToString() + , the char is: + (char) uc +
);

    }

    它的运行结果是

    The ASCII code of ‘a‘ is: 97
    ASCII is 65, the char is: A
    The Unicode of ‘中‘ is: 20013
    Unicode is 22478, the char is: 城

    从这个例子中,我们便能非常清楚的了解——通过强制转换,可以得以字符的编码,或者得到编码表示的字符。如果你需要的不是 short 型的编码,请参考第 1 条进行转换,即可得到 int 等类型的编码值。

4. 数值字符串和数值之间的转换

    首先,我们得搞明白,什么是数值字符串。我们知道,在 C# 中,字符串是用一对双引号包含的若干字符来表示的,如 123。而 123 又相对特殊,因为组成该字符串的字符都是数字,这样的字符串,就是数值字符串。在我们的眼中,这即是一串字符,也是一个数,但计算机却只认为它是一个字符串,不是数。因此,我们在某些时候,比如输入数值的时候,把字符串转换成数值;而在另一些时候,我们需要相反的转换。
    将数值转换成字符串非常简单,因为每一个类都有一个 void ToString() 方法。所有数值型的 void ToString() 方法都能将数据转换为数值字符串。如 123.ToSting() 就将得到字符串 123。
    那么反过来,将数值型字符串转换成数值又该怎么办呢?我们仔细查找一下,会发现 short, int, float 等数值类型均有一个 static Parse() 函数。这个函数就是用来将字符串转换为相应数值的。我们以一个 float 类型的转换为例: float f = float.Parse(543.21); 其结果 f 的值为 543.21F。当然,其它的数值类型也可以使用同样的方法进行转换,下面的例子可以更明确的说明转换的方法:

    private void TestStringValue() {
        float f = 54.321F;
        string str = 123;
        this.textBox1.Text = ;
        this.textBox1.AppendText(f = + f.ToString() +
);

        if (int.Parse(str) == 123) {
            this.textBox1.AppendText(str convert to int successfully.);
        } else {
            this.textBox1.AppendText(str convert to int failed.);
        }
    }

    运行结果:

    f = 54.321
    str convert to int successfully.

5. 字符串和字符数组之间的转换

    字符串类 System.String 提供了一个 void ToCharArray() 方法,该方法可以实现字符串到字符数组的转换。如下例:

    private void TestStringChars() {
        string str = mytest;
        char[] chars = str.ToCharArray();
        this.textBox1.Text = ;
        this.textBox1.AppendText(Length of mytest is + str.Length +
);

        this.textBox1.AppendText(Length of char array is + chars.Length +
);

        this.textBox1.AppendText(char[2] = + chars[2] +
);

    }

    例中以对转换转换到的字符数组长度和它的一个元素进行了测试,结果如下:

    Length of mytest is 6
    Length of char array is 6
    char[2] = t

    可以看出,结果完全正确,这说明转换成功。那么反过来,要把字符数组转换成字符串又该如何呢?
    我们可以使用 System.String 类的构造函数来解决这个问题。System.String 类有两个构造函数是通过字符数组来构造的,即 String(char[]) 和 String[char[], int, int)。后者之所以多两个参数,是因为可以指定用字符数组中的哪一部分来构造字符串。而前者则是用字符数组的全部元素来构造字符串。我们以前者为例,在 TestStringChars() 函数中输入如下语句:

        char[] tcs = {‘t‘, ‘e‘, ‘s‘, ‘t‘, ‘ ‘, ‘m‘, ‘e‘};
        string tstr = new String(tcs);
        this.textBox1.AppendText(tstr = + tstr + \n);

    运行结果输入 tstr = test me,测试说明转换成功。
    实际上,我们在很多时候需要把字符串转换成字符数组只是为了得到该字符串中的某个字符。如果只是为了这个目的,那大可不必兴师动众的去进行转换,我们只需要使用 System.String 的 [] 运算符就可以达到目的。请看下例,再在 TestStringChars() 函数中加入如如下语名:

        char ch = tstr[3];
        this.textBox1.AppendText( + tstr + [3] = + ch.ToString());

    正确的输出是 test me[3] = t,经测试,输出正确。

6. 字符串和字节数组之间的转换

    如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了。为了进行这样的转换,我们不得不借助另一个类:System.Text.Encoding。该类提供了 bye[] GetBytes(string) 方法将字符串转换成字节数组,还提供了 string GetString(byte[]) 方法将字节数组转换成字符串。
    System.Text.Encoding 类似乎没有可用的构造函数,但我们可以找到几个默认的 Encoding,即 Encoding.Default(获取系统的当前 ANSI 代码页的编码)、Encoding.ASCII(获取 7 位 ASCII 字符集的编码)、Encoding.Unicode(获取采用 Little-Endian 字节顺序的 Unicode 格式的编码)、Encoding.UTF7(获取 UTF-7 格式的编码)、Encoding.UTF8(获取 UTF-8 格式的编码) 等。这里主要说说 Encoding.Default 和 Encoding.Unicode 用于转换的区别。
    在字符串转换到字节数组的过程中,Encoding.Default 会将每个单字节字符,如半角英文,转换成 1 个字节,而把每个双字节字符,如汉字,转换成 2 个字节。而 Encoding.Unicode 则会将它们都转换成两个字节。我们可以通过下列简单的了解一下转换的方法,以及使用 Encoding.Default 和 Encodeing.Unicode 的区别:

    private void TestStringBytes() {
        string s = C#语言;
        byte[] b1 = System.Text.Encoding.Default.GetBytes(s);
        byte[] b2 = System.Text.Encoding.Unicode.GetBytes(s);
        string t1 = , t2 = ;
        foreach (byte b in b1) {
            t1 += b.ToString() + ;
        }
        foreach (byte b in b2) {
            t2 += b.ToString() + ;
        }
        this.textBox1.Text = ;
        this.textBox1.AppendText(b1.Length = + b1.Length +
);
        this.textBox1.AppendText(t1 +
);
        this.textBox1.AppendText(b2.Length = + b2.Length +
);
        this.textBox1.AppendText(t2 +
);
    }

    运行结果如下,不说详述,相信大家已经明白了。

    b1.Length = 6
    67 35 211 239 209 212
    b2.Length = 8
    67 0 35 0 237 139 0 138

    将字节数组转换成字符串,使用 Encoding 类的 string GetString(byte[]) 或 string GetString(byte[], int, int) 方法,具体使用何种 Encoding 还是由编码决定。在 TestStringBytes() 函数中添加如下语句作为实例:

        byte[] bs = {97, 98, 99, 100, 101, 102};
        string ss = System.Text.Encoding.ASCII.GetString(bs);
        this.textBox1.AppendText(The string is: + ss +
);

    运行结果为:The string is: abcdef

7. 各种数值类型和字节数组之间的转换

    在第 1 条中我们可以查到各种数值型需要使用多少字节的空间来保存数据。将某种数值类型的数据转换成字节数组的时候,得到的一定是相应大小的字节数组;同样,需要把字节数组转换成数值类型,也需要这个字节数组大于相应数值类型的字节数。
    现在介绍此类转换的主角:System.BitConverter。该类提供了 byte[] GetBytes(…) 方法将各种数值类型转换成字节数组,也提供了 ToInt32、ToInt16、ToInt64、ToUInt32、ToSignle、ToBoolean 等方法将字节数组转换成相应的数值类型。

    由于这类转换通常只是在需要进行较细微的编码/解码操作时才会用到,所以这里就不详细叙述了,仅把 System.BitConverter 类介绍给大家。

8. 转换成十六进制

    任何数据在计算机内部都是以二进制保存的,所以进制与数据的存储无关,只与输入输出有关。所以,对于进制转换,我们只关心字符串中的结果。
    在上面的第 4 条中提到了 ToString() 方法可以将数值转换成字符串,不过在字符串中,结果是以十进制显示的。现在我们带给它加一些参数,就可以将其转换成十六进制——使用 ToString(string) 方法。
    这里需要一个 string 类型的参数,这就是格式说明符。十六进制的格式说明符是 x 或者 X,使用这两种格式说明符的区别主要在于 A-F 六个数字:x 代表 a-f 使用小写字母表示,而 X 而表示 A-F 使用大字字母表示。如下例:

    private void TestHex() {
        int a = 188;
        this.textBox1.Text = ;
        this.textBox1.AppendText(a(10) = + a.ToString() +
);
        this.textBox1.AppendText(a(16) = + a.ToString(x) +
);
        this.textBox1.AppendText(a(16) = + a.ToString(X) +
);
    }

    运行结果如下:

    a(10) = 188
    a(16) = bc
    a(16) = BC

    这时候,我们可能有另一种需求,即为了显示结果的整齐,我们需要控制十六进制表示的长度,如果长度不够,用前导的 0 填补。解决这个问题,我们只需要在格式说明符“x”或者“X”后写上表示长度的数字就行了。比如,要限制在 4 个字符的长度,可以写成“X4”。在上例中追加一句:

        this.textBox1.AppendText(a(16) = + a.ToString(X4) +
);

    其结果将输出 a(16) = 00BC。
    现在,我们还要说一说如何将一个表示十六进制数的字符串转换成整型。这一转换,同样需要借助于 Parse() 方法。这里,我需要 Parse(string, System.Globalization.NumberStyles) 方法。第一个参数是表示十六进制数的字符串,如“AB”、“20”(表示十进制的 32) 等。第二个参数 System.Globalization.NumberStyles 是一个枚举类型,用来表示十六进制的枚举值是 HexNumber。因此,如果我们要将“AB”转换成整型,就应该这样写:int b = int.Parse(AB, System.Globalization.NumberStyles.HexNumber),最后得到的 b 的值是 171。

9. 日期型数据和长整型数据之间的转换

    为什么要将日期型数据转换为长整型数据呢?原因很多,但就我个人来说,经常将它用于数据库的日期存储。由于各种数据库对日期型的定义和处理是不一样的,各种语言对日期型数据的定义的处理也各不相同,因为,我宁愿将日期型数据转换成长整型再保存到数据库中。虽然也可以使用字符串来保存,但使用字符串也会涉及到许多问题,如区域等问题,而且,它需要比保存长整型数据更多的空间。
    日期型数据,在 C# 中的参与运算的时候,应该也是转换为长整型数据来运算的。它的长整型值是自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。这个数在 C# 的 DateTime 中被称为 Ticks(刻度)。DateTime 类型有一个名为 Ticks 的长整型只读属性,就保存着这个值。如此,要从一个 DataTime 型数据得到 long 型值就非常简单了,只需要读出 DataTime 对象的 Ticks 值即可,如:

    long longDate = DateTime.Now.Ticks;

    DateTime 的构造函数中也提供了相应的,从长整型数据构造 DateTime 型数据的函数:DateTime(long)。如:

    DateTime theDate = new DateTime(longDate);

    但这样对于很多 VB6 程序员来说,是给他们出了一道难题,因为 VB6 中的日期型数据内部是以 Double 型表示的,将其转换为长整型后得到的仅仅是日期,而没有时间。如何协调这两种日期类型呢?
     System.DateTime 提供了 double ToOADate() 和 static DateTime FromOADate(double) 两个函数来解决这个问题。前者将当前对象按原来的 double 值输出,后者则从一个 double 值获得一个 System.DateTime 对象。举例如下:

    private void TestDateTimeLong() {
        double doubleDate = DateTime.Now.ToOADate();
        DateTime theDate = DateTime.FromOADate(doubleDate);
        this.textBox1.Text = ;
        this.textBox1.AppendText(Double value of now: + doubleDate.ToString() +
);
        this.textBox1.AppendText(DateTime from double value: + theDate.ToString() +
);
    }

    运行结果:

    Double value of now: 37494.661541713
    DateTime from double value: 2002-8-26 15:52:37 

10. 格式化日期型数据

    编程的过程中,通常需要将日期型数据按照一定的格式输出,当然,输出结果肯定是字符串。为此,我们需要使用 System.DateTime 类的 ToString() 方法,并为其指定格式字符串。
    MSDN 中,System.Globalization.DateTimeFormatInfo 类的概述里对模式字符串有非常详细的说明,因此,这里我只对常用的一些格式进行说明,首先请看下表:

    d       月中的某一天。一位数的日期没有前导零。
    dd      月中的某一天。一位数的日期有一个前导零。
    ddd     周中某天的缩写名称,在 AbbreviatedDayNames 中定义。
    dddd    周中某天的完整名称,在 DayNames 中定义。
    M       月份数字。一位数的月份没有前导零。
    MM      月份数字。一位数的月份有一个前导零。
    MMM     月份的缩写名称,在 AbbreviatedMonthNames 中定义。
    MMMM    月份的完整名称,在 MonthNames 中定义。
    y       不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。
    yy      不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。
    yyyy    包括纪元的四位数的年份。
    h       12 小时制的小时。一位数的小时数没有前导零。
    hh      12 小时制的小时。一位数的小时数有前导零。
    H       24 小时制的小时。一位数的小时数没有前导零。
    HH      24 小时制的小时。一位数的小时数有前导零。
    m       分钟。一位数的分钟数没有前导零。
    mm      分钟。一位数的分钟数有一个前导零。
    s       秒。一位数的秒数没有前导零。
    ss      秒。一位数的秒数有一个前导零。

    为了便于大家的理解,不妨试试下面的程序:

    private void TestDateTimeToString() {
        DateTime now = DateTime.Now;
        string format;
        this.textBox1.Text = ;
        format = yyyy-MM-dd HH:mm:ss;
        this.textBox1.AppendText(format + : + now.ToString(format) +
);
        format = yy年M日d日;
        this.textBox1.AppendText(format + : + now.ToString(format) +
);
    }

    这段程序将输出结果:

    yyyy-MM-dd HH:mm:ss: 2002-08-26 17:03:04
    yy年M日d日: 02年8日26日

    这时候,又出现一个问题,如果要输出的文本信息中包含格式字符怎么办?如

        format = year: yyyy, month: MM, day: dd;
        this.textBox1.AppendText(now.ToString(format) +
);

    将输出:

    2ear: 2002, 4on下5: 08, 26a2: 26

    这并不是我想要的结果,怎么办呢?有办法——

        format = year: yyyy, ‘month‘: MM, ‘day‘: dd;
        this.textBox1.AppendText(now.ToString(format) +
);

    看,这次运行结果对了:

    year: 2002, month: 08, day: 26

    可以看出,只需要使用单引号或者双引号将文本信息括起来就好。
    如果文本信息中包含双引号或者单引号又怎么办呢?这个问题,请读者们动动脑筋吧!

好消息啊!今天下午在Taobao上把CPU卖了。庆祝一下!是一位昭通的买家。

在确认打款以后我马上就把CPU通过全一快递(www.apex100.com)发出去了。本来打算通过大图快递来发的,只要五元的运费。但是大图不上门取货,没办法,和买家商量了一下。让他多出十元钱的运费,我出剩下的,然后让全一快递的来取货。但是全一快递的来了以后说,昭通没有他们的分公司,所以必须加五元的快递费,这样快递费就变成了20元!郁闷,5元就这样变成了20元……

已经好久没在网上卖东西了,上次卖MX400的显卡是很久以前的事了。现在在Taobao上卖东西还是方便了许多了。有即时聊天工具--淘宝旺旺,的确买家和卖家交流方便多了。不像原来在eachnet上只有拍下来以后才能用电话,邮件等进行交流。而且感觉在网上买东西的人多了很多。自从我上个礼拜六下午把卖CPU的消息贴出去。到目前卖出去为止,已经有将近4~5个人和我联系了。

就目前的形势看来,在网上做做倒买倒卖也是一个很不错的赚钱方式。买我CPU的这个人就是在昭通开电脑商店的,他在网上淘淘好东西,然后再拿出来卖。不错的赚钱方式~ 是不是我也想想找时间来倒买倒卖?呵呵

复制的概念
  
  复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。
  
  SQL复制的基本元素包括
  
  出版服务器、订阅服务器、分发服务器、出版物、文章
  
  SQL复制的工作原理
  
  SQL SERVER 主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器
  
  SQL SERVER复制技术类型
  
  SQL SERVER提供了三种复制技术,分别是:
  
  1、快照复制(呆会我们就使用这个)
  2、事务复制
  3、合并复制
  
  只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。
  
  第一先来配置出版服务器
  
  (1)选中指定[服务器]节点
  (2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令
  (3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。
  (4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)
  
  第二创建出版物
  
  (1)选中指定的服务器
  (2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框
  (3)选择要创建出版物的数据库,然后单击[创建发布]
  (4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)
  (5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如 ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQL SERVER 2000"的数据库服务器
  (6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表
  (7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。
  
  第三设计订阅
  
  (1)选中指定的订阅服务器
  (2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]
  (3)按照单击[下一步]操作直到系统会提示检查SQL SERVER代理服务的运行状态,执行复制操作的前提条件是SQL SERVER代理服务必须已经启动。
  (4)单击[完成]。完成订阅操作。
  
  完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:Program FilesMicrosoft SQL ServerMSSQLREPLDATAuncXIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表—

  一个手工同步的方案
  
  –定时同步服务器上的数据
  
  –例子:
  
  –测试环境,SQL Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test
  
  –服务器上的表(查询分析器连接到服务器上创建)
  
  create table [user](id int primary key,number varchar(4),name varchar(10))
  go
  
  –以下在局域网(本机操作)
  
  –本机的表,state说明:null 表示新增记录,1 表示修改过的记录,0 表示无变化的记录
  
  if exists (select * from dbo.sysobjects where id = object_id(N‘[user]‘) and OBJECTPROPERTY(id, N‘IsUserTable‘) = 1)
  drop table [user]
  GO
  create table [user](id int identity(1,1),number varchar(4),name varchar(10),state bit)
  go
  
  –创建触发器,维护state字段的值
  
  create trigger t_state on [user]
  after update
  as
  update [user] set state=1
  from [user] a join inserted b on a.id=b.id
  where a.state is not null
  go
  
  –为了方便同步处理,创建链接服务器到要同步的服务器
  
  –这里的远程服务器名为:xz,用户名为:sa,无密码
  
  if exists(select 1 from master..sysservers where srvname=‘srv_lnk‘)
  exec sp_dropserver ‘srv_lnk‘,‘droplogins‘
  go
  exec sp_addlinkedserver ‘srv_lnk‘,‘‘,‘SQLOLEDB‘,‘xz‘
  exec sp_addlinkedsrvlogin ‘srv_lnk‘,‘false‘,null,‘sa‘
  go
  
  –创建同步处理的存储过程
  
  if exists (select * from dbo.sysobjects where id = object_id(N‘[dbo].[p_synchro]‘) and OBJECTPROPERTY(id, N‘IsProcedure‘) = 1)
  drop procedure [dbo].[p_synchro]
  GO
  create proc p_synchro
  as
  –set XACT_ABORT on
  
  –启动远程服务器的MSDTC服务
  
  –exec master..xp_cmdshell ‘isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ‘‘net start msdtc‘‘,no_output"‘,no_output
  
  –启动本机的MSDTC服务
  
  –exec master..xp_cmdshell ‘net start msdtc‘,no_output
  
  –进行分布事务处理,如果表用标识列做主键,用下面的方法
  
  –BEGIN DISTRIBUTED TRANSACTION

  –同步删除的数据
  
  delete from srv_lnk.test.dbo.[user]
  where id not in(select id from [user])
  
  –同步新增的数据
  
  insert into srv_lnk.test.dbo.[user]
  select id,number,name from [user] where state is null
  
  –同步修改的数据
  
  update srv_lnk.test.dbo.[user] set
  number=b.number,name=b.name
  from srv_lnk.test.dbo.[user] a
  join [user] b on a.id=b.id
  where b.state=1
  
  –同步后更新本机的标志
  
  update [user] set state=0 where isnull(state,1)=1
  –COMMIT TRAN
  go
  
  –创建作业,定时执行数据同步的存储过程
  
  if exists(SELECT 1 from msdb..sysjobs where name=‘数据处理‘)
  EXECUTE msdb.dbo.sp_delete_job @job_name=‘数据处理‘
  exec msdb..sp_add_job @job_name=‘数据处理‘
  
  –创建作业步骤
  
  declare @sql varchar(800),@dbname varchar(250)
  select @sql=‘exec p_synchro‘ –数据处理的命令
  ,@dbname=db_name() –执行数据处理的数据库名
  exec msdb..sp_add_jobstep @job_name=‘数据处理‘,
  @step_name = ‘数据同步‘,
  @subsystem = ‘TSQL‘,
  @database_name=@dbname,
  @command = @sql,
  @retry_attempts = 5, –重试次数
  @retry_interval = 5 –重试间隔
  
  –创建调度
  
  EXEC msdb..sp_add_jobschedule @job_name = ‘数据处理‘,
  @name = ‘时间安排‘,
  @freq_type = 4, –每天
  @freq_interval = 1, –每天执行一次
  @active_start_time = 00000 –0点执行
  go