学ASP.NET入门编程,合适么?

asp.net技术 同时被 2 个专栏收录
5 篇文章 0 订阅
17 篇文章 0 订阅

现在都快找不到ASP.NET的培训课程了。

知道我要开课做培训,有同学劝我:“憋讲那什么.NET,讲Java,现在这个火!”我说我Java不熟,“唉呀!C#转Java,分分钟的事!以飞哥你的经验,……”

其实,我是有点心动的。不得不承认,他说的都是事实。要不要再回头把Java捡起来?……


+++++++++++++++++++++


这里我突然想补充几句。在【超划算】免费课程,付费讲解 里我提到:能自学,就不要培训,可能有些同学还没明白为什么。其实很简单,就因为自学能力是开发人员必不可少的能力。做程序员,想吃老本,是不可能的。

以飞哥为例,当年转行做程序员,培训学校里学的是Java Web和WinForm,但第一份工作就是做的ASP.NET WebForm开发。这玩意没人教啊!都自己学的,看书看视频,一点一点琢磨,论坛QQ群到处提问一起帮的灵感应该就萌芽于这个时候吧?哈哈哈,臭不要脸的打个广告……)之后没多久,DataReader都还没捂热乎呢,就出来了Linq to SQL,怎么办?还是得自学。莫非因为这个你还再上个培训班?接着WebForm页面生命周期还没捋清楚呢,MVC又横空出世,得!又闷着头追呗。再后来什么NHibernate,JQuery,Bootstrap,Autofac,AutoMapper……现在“一起帮”上使用的所有技术,没一个不是自学的。

所以,你要明白:哪怕是你参加培训,也只是带你入个门而已。“师傅领进门,修行在个人”,后面的路,太长太远太多分岔,你最后走到哪,没有人知道。

你看,飞哥学Java web的,结果做ASP.NET;你现在学ASP.NET,谁知道你以后做什么呢!

 

+++++++++++++++++++++


咳咳,回主题,左思右想之后,我还是选择开设ASP.NET课程,为什么呢?

  • 从我自己的角度考虑,ASP.NET我最熟悉,这是教学质量的保证;
  • 从同学们的角度考虑,ASP.NET入门软件开发也是一个不错的选择!


首先,现在.NET平台真的是一支潜力股。


要明白这一点,要先明白为什么现在.NET凉了。其实这个“凉”字,就意味着它之前曾经“火”过。火都没火过,怎么凉呢?从小就生活在“互联网”时代的孩子不知道,在互联网之前,是PC时代。所有的软件,几乎都是windows桌面软件,微软才是当之无愧的霸主。用Java开发的桌面系统,你根本就不敢用。所以Java所谓的“跨平台”其实就是一句空话,windows平台就没它什么事。那时候开发应用程序,流行的是VB,或者C++。

然后,进入互联网时代(直观的说,就是大家都开始“做网站”),出现了PHP、JSP和ASP三足鼎立的格局。现在看来,这三个技术都是非常原始和粗糙的,本质上就是在静态网页里面“嵌入”动态内容,在性能、安全和代码可维护性上都有相当大的问题。

2002年,ASP.NET WebForm(区别于现在流行的ASP.NET MVC)横空出世,一时风头无两。因为都是过去时了,我就简单的说一下为什么,三个原因:

  1. 编译执行。极大的提高性能和安全性(至少理论上是这样的)
  2. 通过页面控件实现“表现层和后台逻辑分离”。即使在现在,这都是一个非常了不起的设计理念和技术成就。虽然因为各种各样的问题,目前MVC成为主流,但我相信,这是一个“波浪式的前进,螺旋式的上升”的过程。
  3. 页面事件机制。习惯于WinForm开发的同学,可以无缝对接到Web开发。

当然,还有仿Java的C#语言功不可没,这个后面我单独讲。

有同学可能要摇头了,大飞哥你吹牛逼不上税,ASP.NET这么牛逼,那它为什么就“凉”了呢?

别急,说完了好的,我们再说差的。归根结底,微软在两个方面犯了错:

  1. 不开源。前些年,微软在开源这个问题上,几乎得罪了所有的程序员。程序员,尤其是“优秀的”程序员,是一群要“打破砂锅问到底”满脑子黑人问号的家伙,code is everything。你不给我看源代码,对不起,不和你一起玩!o(´^`)o
  2. 绑死Windows平台。之前的.NET,虽然理论上是完全可以跨平台的,但微软为了自己的利益,一直把.NET Framework死死的绑在windows平台。这就带来两个问题:
  • 费用。这个就没什么好说的了。Linux是免费的,而windows得花钱买,而更大的问题是:花钱买的还不如免费的!windows做为桌面系统,那是没说的;但是作为服务器,和Linux相比,确实笨重了些。不说其他的,就图形界面一项,就带来了服务器CPU、内存,以及远程管理带宽上的负担。
  • 安全性。一是由于微软没有开源,客户担心你微软自己有没有做什么手脚;另外就是大众(包括大部分程序员)普遍认为:windows没有Linux安全。不管事实是否确实如此,但人们就是这样认为的,你又能怎么办呢?

所以,那些年,微软是眼睁睁地看着ASP.NET由热变凉,一筹莫展。很多.NET开发人员,都不得不转Java,转PHP去了。

好在这些都已经是老黄历了。2016年6月27日,微软正式发布.NET Core 1.0 RTM版本,彻底的开源真正意义上的跨平台,完美的解决了之前制约自身发展的两个核心问题,服务器不想用windows,用Linux吧!一下子什么问题都解决了。这一天,虽然来得稍微迟了一些;但无论如何,他终于来了。我相信,这必将.NET的发展带入一个全新的广阔天地!而 Windows Build 2018 开发者大会,更是给我们带来了惊喜,接下来的.NET Core 3.0,除了传统的ASP.NET(网页开发)、Unity(游戏开发)、Xamarin(跨平台),居然还会支持人工智能(ML.NET),哈哈,这是要逆天啊!

形象点说,.NET天生丽质,但以前太“傲”了还有点“作”,但现在人家已经放下身段,程序猿同学,这时候还不一亲芳泽,可惜了哟!ʅ(‾◡◝)ʃ


虽然飞哥写得嗨,可能有些同学已经晕了:“你说的这些我都不懂,能不能简单点?学这什么ASP.NET就业形式怎么样?”

呵呵,“面向工资编程”,理解理解。


首先,你要理解一点:工资的高低是和能力挂钩的,而不是语言种类。做一个简单的归谬你就能明白了:假设工资高低按语言依次排序,A语言 > B语言 > C语言……,那大家都一窝蜂的学A语言去了,C语言不就完蛋了?或者用人单位又不傻,不会都抢着用C语言开发降低工资成本?你说会不会因为A语言很难学会,所以……安啦!不可能的,只是一门编程语言而已,哪有这回事?别说现在这些语言都是接近自然语言的高级语言,就是汇编,其语言本身,也是非常简单的。你现在觉得难,你没学没用而已。中英双语人才难找,但会个七八种编程语言的,一抓一大把!主流编程语言其实都非常接近,差别也就重庆话和东北话一样,就这点差别,还可能体现在工资上么?!

有些同学可能不服了,“哪里?Java的工资就比.NET的高,好吧?”我们姑且认为事实确实如此(飞哥也没做过统计我更倾向于是初级的Java开发人员工资比初级的.NET开发人员工资高一点,但都是初级,高也高不到哪里去,呵呵),原因是什么呢?

我觉得,其本质是“Java入门要比.NET难”。这倒不是语法层面的难,而是各种配环境协调中间件乱七八糟的东西,学Java就必须捣腾这些玩意。.NET就不同了,靠着微软这颗大树,坐拥Visual Studio这一宇宙最强IDE,开发环境就一个“微软全家桶”。甚至在WebForm时代,拖拖控件连个数据库就可以开发了,小白同学不知道多开心……但是,随着.NET Core问世,这种现象肯定会改变,.NET Core的配置就麻烦多了。此外,微软的东西,简单有简单的做法,高级有高级的玩法,归根结底,还是看你自己的努力程度。到了一定的高度,语言平台其实都不是关键。

我经常对像转行和正在转行的同学讲,入门的工资,真的不要太在意。先入行,有了第一份工作再说!


那学ASP.NET,工作好不好找?我觉得,无论你学什么语言,都差不多,第一份工作肯定比较难,你没工作经验啊!

有些同学说“Java好找工作一些”,理由是“Java相关的招聘岗位多一些”。结论我们暂时不管,这个理由明显是有问题的。Java的岗位多,但现在学Java转Java的人也多啊?

作为求职者,大体来说,就业市场总是处于一个“动态平衡”的状态。我已经不止一次的听人说,“.NET不好人”,项目没办法转Java了。随着.NET Core的推出和普及,我相信.NET有了更多的底气坚持.NET平台,情况会越来越好。但即使是现在,.NET也不是一个“小众”平台,怎么也比什么php、python,甚至ruby、perl之类的强,找份工作,问题不大。


另外,大家关不关心“加班”的问题?是不是听说过很多996,行军床,7x24轮班,以至于程序员死在电脑前的流言?但飞哥做编程10年了,就没怎么加过班,哈哈。我也琢磨过这事,是不是运气太好?后来觉得还是托了ASP.NET的福。一方面,愿意选择ASP.NET、肯花钱买windows server(服务器没人敢用盗版)的公司,“压榨人工”的渴望就不太强烈(这个表述大家领会意思就可以了,不要怼飞哥。我知道,这个推断是不全面的、不可逆的)。另一方面,使用ASP.NET的多半不是互联网行业,做的是2B(to Business)系统,一般都比较成熟稳定,紧迫性不高,比较从容;不像2C(to Customer)那样“赶”,需求今天改明天变,而且是你追我赶的要“啖头汤”。所以作为开发人员,虽然收入上会少点,但以飞哥这个年纪来看,命还是比钱要重要些。


+++++++++++++++++++++


好长,是继续写呢?还是下回分解?

无论如何,中场休息会儿吧,先,O(∩_∩)O~


+++++++++++++++++++++


接着写。

选择由ASP.NET入门,还有以下几个好处。


ASP.NET是一门综合技术,适合打底子


大体上来说,学会ASP.NET,你应该掌握以下相关技能:

  • 前端。包括HTML,CSS和JavaScript。这里顺便说一下,飞哥的课程会使用JQuery和Bootstrap,而不是“更极端化”的Vue或者Angular之类的,嗯,具体的理由课程里讲吧。一言难尽,而且容易引发口水战,哈哈。
  • B/S系统(Web开发/网站开发)相关知识。比如GET/POST请求、Http协议“无状态”、cookie、session、重定向等等。这些东西都是通用的,无论是ASP.NET,还是Java Web,或者PHP,都一样。(其实我一直有点好奇,“纯前端教学”是怎么弄的?比如学习Ajax,后台的接口怎么办?谁提供这个接口?培训学校公开一个接口,让同学们调用?那我要改改接口呢?还有,往后台传值呢?怎么看传值过后的变化……
  • C#语言。C#是一种通用编程语言,除了可以开发网页(ASP.NET),还可以干很多很多事情。桌面应用(Winform/WPF)、游戏(Unity)、手机APP(Xamrian),几乎啥都能干。以及接下来.NET Core 3.0的人工智能(ML.NET),哈哈,是不是要逆天?
  • 数据库操作。和学前端必然要了解一定的后台知识一样,ASP.NET一定会调用数据库,所以操作数据库的SQL语句,“增删改查”你得会。

当然,在此基础上,你还会接触到一些计算机原理(内存/磁盘/CPU)、数据结构和算法(池/树/散列)、系统安全、性能优化,以及系统架构等方面的知识。

很多同学想转行做开发,但不知道具体的方向。我收到过很多这样的问题,也很头痛,不知道怎么回答。

前面已经讲了,任何一个方向都可以很有前(钱)途。所以,最理想的不是你以为的,或者培训机构吹嘘的什么“简单”“好就业”“有前途”的技术,而是你感兴趣你有天赋的那个方向。但是,你对什么感兴趣,你对什么有天赋,飞哥怎么知道呢?这就像“小马过河”一样,水深水浅只有你自己试过才知道。


+++++++++++++++++++++++


又跑个题,有两种成本,人们总是错误的理解:“机会成本”和“试错成本”。

机会成本,总是被有意无意的忽视;而试错成本,大家下意识的抗拒。但很多时候,“试错成本”是必不可缺的——人的成长依赖于这些错误。

比如飞哥我,学国贸做律师,搞装修写代码,一路折腾过来。后悔么?很难说。但是,我知道,如果不是这一路折腾,我不会像现在这样活得透彻。很多人,哪怕功成名就,在外人眼里风光无限,但从内心来讲,他们是迷茫的。(飞哥就不谦虚了,哈哈

很多同学说他很迷茫,我明白这种迷茫,看不清前面的路嘛。但我真的无能为力,首先飞哥没那种未卜先知的本事,我也看不清未来,谁敢说他看得清未来?那不都是神了?!其次,这未来是你的,是你自己选择你自己创造的。“走自己的路”,非常重要。有些家长,不,应该是很多家长,想要给孩子铺一条他们认为的“金光大道”,从来不问孩子愿意不愿意。结果呢?孩子们“叛逆”“不听话”“和父母闹”,甚至很多人间悲剧。“我吃的盐都比你吃的饭还多”,“我都是为你好”,“我……”,家长们觉得自己很委屈。

但我是站在孩子们这一边的,哪怕孩子选的路,更崎岖更艰难。因为每一个人都是独一无二的,他们是拥有自我意识的生命体,而不是别人的克隆体。他们要有自己的喜怒哀乐,自己的人生价值。

你看家长们说话,都是“我”怎么怎么,这个“我”,像不像一个“找”字?

认识自我,成就自我,就是一个不断寻找的过程。要去找,找到属于自己的那一撇,成就一个大写的“我”。别人领着你,不是找,要自己去找。找嘛,就是东游西荡,这里瞅瞅,那里看看。怕没有用,不去找,你永远找不到。我看到很多人裹足不前,我看到很多人随波逐流,一辈子懵懵懂懂,一辈子郁郁寡欢。


+++++++++++++++++++++++


书归正传。

前面我也说了,入门学什么,和你之后干什么,没有绝对的关系。所有的培训,都是带你“入门”而已,什么“培训三个月,相当于三年工作经验”之类的鬼话,信它就有鬼了!在入门阶段,广泛的“见识”是非常有必要的。注意:我说的是“见识”,不是“基础”。因为很多人一说“基础”,就是计算机原理,数据结构啥的。不是这样的!真不能“再多说几句”了,简单点,见识就是“看见认识”,一个简单的了解,在此基础上,你才能知道,你的“兴奋点”在哪里;然后,一步一步地找到自己的方向。

学了ASP.NET这整个一套技术,你以后可以做前端,也可以做后台,或者像飞哥一样做全栈;或者,不做ASP.NET,做JSP做PHP,也就是把C#换成Java或PHP而已;再或者,有了C#和数据库的基础,你还可以做桌面做游戏,做人工智能,一切皆有可能!

我们这种“课程免费,付费讲解”的模式,可以最大程度的降低你的试错成本。反正听课是免费的嘛,有了兴趣有了方向,再花点“打赏币”深入钻研就是了。


不得不说,其实我有一个梦想,\(^o^)/~

假如“一起帮”这种模式能够普及的话,我们是不是就可以有一个涵盖各种语言各种技术的“大课堂”?然后所有同学可以免费的自由“选修”各种课程,会不会发展出一种新的教学模式?

路漫漫其修远兮,再说吧,哈哈。

 

接着说,选择ASP.NET入门的下一个理由:C#确实是一门非常优雅的语言


相较于其他动态网页开发技术,ASP.NET所独有的C#语言:严谨、优雅、开发人员友好……就语言本身而言,除了“语法糖”稍微多一点以外,几乎没有槽点。(但飞哥个人而言,是超喜欢这些语法糖的……

弱类型的脚本语言就不用说了,所谓的“灵活”其实就是“坑多”,所谓的“轻量级”其实就是“干不了啥大事”——典型的就是JavaScript!真的是“女泪男沉”,说它“生于仓促,死于……”,还TM死不了,最近活得蛮滋润。JavaScript的历史,真的充分证明了“只要站在风口上,猪都飞得起来”这句话。但这玩意真不适合教学,尤其是初学者。我之前的课程,讲完HTML和CSS之后,根据投票结果,先讲JavaScript,唉哟,那个之难受啊……看来有些东西不能确实是不能讲民主的啊!


C#,是现代化的、工程化的、强类型的、预编译的、真正面向对象的高级编程语言。虽然最初是模仿Java,但青出于蓝而胜于蓝,从2.0版本引入泛型开始,就拉开了和Java的距离,之后引入Linq、静态扩展方法、Lamda表达式等语法特征,不夸张的说,甩出Java几条街。C#缺的,是“平台支持”和“社区环境”,也就是之前一直“不开源”拖的后腿。.NET开源跨平台,真的是大势所趋人心所向。.NET Core一经宣布,.NET阵营一片欢欣鼓舞,甚至高呼“Java可以去死了(强烈推荐,“涛吴”知乎2.1K高赞答案)”。当然,这只是情绪宣泄而已。.NET生态环境的完善、意识的转变,还需要时间,所以我说“.NET是潜力股”,在目前来看,它还只是有潜力,真正形成绝对优势,再怎么也是三五年以后的事情。而且Java也不会闲着,接下来,在Java语言的完善上,Oracle应该不会像之前那样,拖拖拉拉一直跳票了。

为避免口水战,特地声明一下,飞哥对Java没有任何恶意啊!要不是Java/PHP之类的压力,.NET怎么会开源呢,是不是?就是要这样竞争,开发者才能得到实惠,一家独大就不好玩了。\(^o^)/~

学会了C#,再学JavaScript,就容易得多。

比如C#有类型检查(强类型),JavaScript没有类型约束(弱类型),C#是“有”,Javascript是“没有”,没有的东西你怎么讲?你必须得用“有”的来对比,是不是?我上课讲:“JavaScript不会编译生成一个可执行文件”,你是不是晕的?什么是“编译”,什么是“可执行文件”?我是不是还得把C#代码怎么编译,编译后生成的dll/exe文件给你看看,然后你才能明白?与其这样,不如一开始我们就先学C#!

还有JavaScript很多“模仿”C#/Java等工程语言的知识点,比如JavaScript的“面向对象”,你不知道真正的面向对象什么样子的,学JavaScript的半吊子一定是稀里糊涂的;还有“名称空间”,JavaScript语言本身,是没这玩意的,也是一种“模仿”,但为什么要模仿,为什么要这样模仿,要讲清楚这些问题,你只能首先去了解它模仿的对象……

总之,这一次,我是一定要先讲C#的,JavaScript放到最后。



OK,最后的一个理由:ASP.NET学习曲线平缓,对初学者友好,易于入门


当年,我能自学入门ASP.NET,但绝对无法自学入门Java Web或PHP的。

其他不说,开发环境我就配不起来。大约记得,是看张孝祥的Java视频,第一节课,配Windows的环境变量,直接把我打懵了;也看过鸟哥的PHP开发,LAMP四大组件直接把我给吓尿了……

但ASP.NET,相比之下,就太特么简单了,宇宙最强IDE——Visual Studio一装,齐活!那时候还是WebForm,拉拉控件,配一配属性,连上数据库,耶!一个看上去像模像样的网站就出来了。

当然,这种拉控件的开发方式也一直被人诟病。但是,你要注意这个但是,对于初学者而言,最重要的是什么?是兴趣,是及时反馈,是成就感。你可以志存高远志在千里,但你也一定要知道,“千里之行始于足下”“不积跬步无以至千里”。

我们这种零基础班,又是线上教学,学习曲线不能太陡,否则会让你开始怀疑人生。可能是我自己智商不咋的吧,我觉得程序员的门槛还是比较高的。并不是像有些人说的那样,“培训班随便学个几个月”,出来就八千上万的工资。我知道的,从入门到放弃的太多太多。自学学不下去,放弃了;进培训班,跟不上课程,放弃了;培训出来找不到工作,放弃了;工作一段时间,压力太大,放弃了……一波一波,大浪淘沙。还有之后的中年危机,真的是“长江后浪推前浪,前浪死在沙滩上”。说白了,现在程序员的工资还将就,大环境是一方面,门槛也一定是有的。

门槛低一些,入门就容易一些。入了门,再谈之后的发展,显然要务实得多。

而且这里必须澄清一点:入门的难度,和你最后能精通到什么程度,其实没啥关系。又不要脸的拿飞哥自己做例子了,呵呵,现在我回过头来,什么环境变量也懂了,LAMP也没问题了,是不是?因为入门简单,就放弃持续成长,那是自个儿的事。



真正的长文啊!统计了一下字数,7K+了。

回过头来,总结一下,学习ASP.NET入门的四大理由:

  1. .NET平台真的是一支潜力股
  2. ASP.NET是一门综合技术,适合打底子
  3. C#确实是一门非常优雅的语言
  4. ASP.NET学习曲线平缓,对初学者友好,易于入门

欢迎补充,拒绝拆台。


  • 2
    点赞
  • 1
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

第一天 我认为ASP.NETASP难很多,希望大家做好准备。难难在实现同一个效果有很多方法,大家或许会疑惑。十天会系列教程会清晰的写出各种方法,让大家能少一点坎坷。在ASP里面,大家几乎都是使用VB,数据库嘛,也无非是SQL和ACCESS。在ASP.NET里面,数据库还是这两个但是常用的语言多了一个C#,也是微软推荐的语言,为.NET平台定制的语言。这样ASP.NET就有四种组合:VB+ACCESS,VB+SQL,C#+ACCESS,C#+SQL,本教程会使用C#+ACCESS,兼顾四种来写,让大家对ASP.NET有一个全面的认识。虽然说ASP.NET不需要任何ASP基础,但是我觉得如果大家ASP不会,还是先看一下【十天ASP教程】,大家所需要了解的不是ASP的程序怎么写,而是怎么构建服务器,怎么使用HTML表单,同时对SQL语句有一个基础和理解,因为在本文里我不会将将一些基础的东西。 废话不多说,开始我们第一天的习: 习目的:调试出安装环境 我要申明一点,操作系统就用2000,如果说要习一个网络语言还不肯多装一个操作系统的话,那我看也不要习了。 先到网上下载一个MDAC(要是2.7以上的版本才行),然后安装,安装以后或许会重新启动一次。 然后再下载一个.NET FRAMEWORK SDK,安装以后会在控制面板里面的管理工具里面多两个东西,这个不用理睬他,我们要使用的还是原来的INTERNET服务管理器。打开它按照ASP教程里面的调试方法建立一个目录,建立一个EXAMPLE1.ASPX,然后用记事本打开这个文件在里面输入 <script language="c#" runat="server"> void Page_Load() { Response.Write("Hello World!"); } </script> ________________________________________ <script language="vb" runat="server"> sub page_load() response.write("Hello World!") end sub </script> 然后用本地访问,查看结果: 在这里我要说明两点:1、我的示例文件总是有A和B分别是用C#和VB写的,演示的图片就用C#那一种的,都一样嘛,教程里面代码也是写两种用<hr>分割开,大家可以比较一下。2、我写教程的时候用的都是记事本来编写APS.NET大家也可以安装VS.NET来编写不过起步还是用记事本比较好,因为可以看的更加透彻一点。今天就说到这里,明天说一下C#的基本语法。 十天ASP.net(2) 作者:佚名 阅读人次:11611 文章来源:未知 发布时间:2005-6-24 网友评论(4)条 第二天 习目的:掌握C#的基本知识 一、定义变量: string strExample; 字符串("aaa") char chrExample; 字符('a') bool blnExample; Bool型(true/false) DataTime datExample; 日期型("09/19/2002") int intExample; 整数(32位有符号整数) double dblExample; 浮点数(64位双精度浮点数) 二、各种运算: = 赋值运算 + 加法运算 - 减法运算 * 乘法运算 / 除法运算 % 取模运算 && 逻辑And || 逻辑Or ! 逻辑Not 三、各种结构: if(条件) { } else { } switch(条件) { case option1: break; case option2: break; } for(int i=1;i<=10;i++)//特别注意这里面是分号 { } while(条件) { } do { }while(条件); 四、注意事项: 1、用习惯VB的人很容易漏了语句末尾的分号; 2、用习惯VB的人很随便使用变量但是不申明,这在C#默认情况下是不允许的; 3、在向函数传递参数的时候要用圆括号:Response.Write "aa";是不允许的。 我说的这点几乎称不上是在说一种语言,一种语言的习不仅仅需要习语法,还需要习语言特色,希望大家有空还是买一本C#的书来好好研究一下C#作为一种新的语言的特性吧。 十天ASP.net(2) 作者:佚名 阅读人次:11611 文章来源:未知 发布时间:2005-6-24 网友评论(4)条 第二天 习目的:掌握C#的基本知识 一、定义变量: string strExample; 字符串("aaa") char chrExample; 字符('a') bool blnExample; Bool型(true/false) DataTime datExample; 日期型("09/19/2002") int intExample; 整数(32位有符号整数) double dblExample; 浮点数(64位双精度浮点数) 二、各种运算: = 赋值运算 + 加法运算 - 减法运算 * 乘法运算 / 除法运算 % 取模运算 && 逻辑And || 逻辑Or ! 逻辑Not 三、各种结构: if(条件) { } else { } switch(条件) { case option1: break; case option2: break; } for(int i=1;i<=10;i++)//特别注意这里面是分号 { } while(条件) { } do { }while(条件); 四、注意事项: 1、用习惯VB的人很容易漏了语句末尾的分号; 2、用习惯VB的人很随便使用变量但是不申明,这在C#默认情况下是不允许的; 3、在向函数传递参数的时候要用圆括号:Response.Write "aa";是不允许的。 我说的这点几乎称不上是在说一种语言,一种语言的习不仅仅需要习语法,还需要习语言特色,希望大家有空还是买一本C#的书来好好研究一下C#作为一种新的语言的特性吧。 十天ASP.net(4) 作者:佚名 阅读人次:8772 文章来源:未知 发布时间:2005-6-24 网友评论(7)条 第四天 习目的:掌握WEB控件的使用(二) 首先我要说明,我这十天教程也只是一个让大家对ASP.NET有一个认识而已,我也跳过了很多东西。网上有很多人在责骂我写的教程,认为十天什么都不会,看了我的教程还是什么都不会,我想他们或许是过高估计了我的教程。外面有很多书,关于ASPASP.NET的,我就是看外面的书会的。我所要做的就是希望大家能看了我的教程以后觉得ASPASP.NET不是不会的东西然后有信心去会它。我想习还是靠自己的,外面每一本书也有自己写的不周到的地方,关键还需要自己的实践加上探索。 首先来说一下表单的验证控件,以前我们做表单验证,如果是客户端的JAVASCRIPT,不能做到美观统一,而且还可以通过直接在浏览器起教表单来屏蔽;如果我们做服务器端验证,又会发现让检验结果在前台反映也是很麻烦的事情。现在好了,ASP.NET提供的很多检验控件让我们不需要考虑是客户端检验还是服务器端检验,让我们不需要考虑是怎么输出检验结果。 看一下检验表单控件是不是填写了的检验控件先: <asp:textbox id="username" runat="server" cssclass="textbox"/> <asp:requiredfieldvalidator controltovalidate="username" display="dynamic" forecolor="#ff0000" font-name="宋体" font-size="9pt" text="请填写" runat="server"/> controltovalidate就是你想检验的控件的ID;默认情况下不显示错误消息,地方也会被保留,如果使用了display="dynamic" 那么不显示错误消息的地方不会被空出; forecolor="#ff0000" font-name="宋体" font-size="9pt" 就是设定错误消息字体的颜色,字体,大小的;text="请填写" 就是当没有填写内容时候显示的错误消息;别忘记最后的runat="server"。现在这个检验控件是放在了textbox的后面,那么错误消息也在textbox后面显示,也可以放在其他地方。 再看一下比较表单控件的数据与另外一个数据的检验控件: <asp:textbox id="password1" runat="server" textmode="password" cssclass="textbox"/> <asp:requiredfieldvalidator controltovalidate="password1" display="dynamic" forecolor="#ff0000" font-name="宋体" font-size="9pt" text="请填写" runat="server"/> 这里是第一个需要用户填写的密码框 我们经常会再设立一个密码框让用户再填写一次: <asp:textbox id="password2" runat="server" textmode="password" cssclass="textbox"/> <asp:requiredfieldvalidator controltovalidate="password2" display="dynamic" forecolor="#ff0000" font-name="宋体" font-size="9pt" text="请填写" runat="server"/> <asp:comparevalidator controltovalidate="password2" controltocompare="password1" display="dynamic" operator="equal" forecolor="#ff0000" font-name="宋体" font-size="9pt" text="确认失败" runat="server"/> controltocompare="password1" 就是需要比较的控件;operator="equal" 就是设定比较操作是:是否相等(还有NotEqual:不相等,LessThan:少于,GreaterThan:大于,当不符合这个比较操作的时候显示错误消息)。 以前说到BUTTON控件CausesValidation=true/false来设置按钮提交的表单是不是被检验也就是这里的几个检验控件,如果CausesValidation=true的话按下按钮就会首先检测是不是都通过了检验控件的检验。 下面再说两点: 一、每一个可以显示的控件都有是不是显示的属性,比如username.Visible=false;就是隐藏了前面的username控件;还有就是如果要对控件应用CSS的话就这么写:cssclass="",而不是以前HTML中的class=""。 二、所有WEB控件都要包含在<form runat="server"></form>中,否则就会出错。 今天就到此结束,请继续往后面看,下次开始就要说ADO.NET了。 十天ASP.net(5) 作者:佚名 阅读人次:8013 文章来源:未知 发布时间:2005-6-24 网友评论(6)条 第五天 习目的:会连接两种数据库 对于ASP来说,我们常用的数据库无非是ACCESS和SQL SERVER,对于ASP.NET也是,不过ASP.NET对于SQL SERVER有专门的连接组件而不推荐用OLE DB。 首先看一下ACCESS的连接数据库并打开; string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source="; strConnection+=Server.MapPath("*.mdb"); //*就是数据库的名字 OleDbConnection objConnection=new OleDbConnection(strConnection); objConnection.Open(); ________________________________________ dim objConnection as OleDbConnection objConnection=new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath("*.mdb")) objConnection.Open() 下面再看一下SQL SERVER的连接数据库并打开; string strConnection="server=数据库连接;uid=用户名;pwd=密码;database=数据库名字"; SqlConnediob objConnection=new SqlCOnnection(strConnection); objConnection.Open(); ________________________________________ dim objConnection as SqlConnectiom objConnection=new SqlConnection("server=数据库连接;uid=用户名;pwd=密码;database=数据库名字") objConnection.Open() 实际上,在大多数地方SQL SERVER和ACCESS的区别除了连接语句,其他定义语句也就是SQL××和OLEDB××的区别 另外,如果是ACCESS数据库的话在ASPX文件的开头需要包括下列语句: <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> 如果是SQL SERVER则需要包括以下语句: <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.SqlClient"%> 今天就说到这里,明天开始讲数据库的读取。 十天ASP.net(6) 作者:佚名 阅读人次:7634 文章来源:未知 发布时间:2005-6-24 网友评论(4)条 第六天 习目的:会读取数据库 有的网友说,不会C#,在ASP.NET里面还是选择VB.NET,这个我不反对,但是我觉得既然是习新的东西,就不要在意有多少是新的。实际上C#就一般的操作来说,只是区分大小写和多了一个分号这两点与VB.NET不同其他都差不多啊。在ASP里面我们读取数据就直接用RECORDSET,然后在HTML代码里面穿插<%= %>就可以显示了,但是ASP.NET讲究的是代码分离,如果还是这样显示数据就不能代码分离了。所以我们有两种方法:如果是读取一条记录的数据或者不多的数据,我们用DATAREADER采集数据,然后赋值给LABEL控件的Text属性即可;如果是读取大量数据我们就采用DATAGRID。 今天我们就来说一下DATAREADER: string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source="; strConnection+=Server.MapPath(strDb); OleDbConnection objConnection=new OleDbConnection(strConnection); OleDbCommand objCommand = new OleDbCommand("这里是SQL语句" , objConnection); objConnection.Open(); OleDbDataReader objDataReader=objCommand.ExecuteReader(); if(objDataReader.Read()) { oicq.Text=Convert.ToString(objDataReader["useroicq"]); homesite.Text=Convert.ToString(objDataReader["usersite"]); face.SelectedItem.Text=Convert.ToString(objDataReader["userface"]); } 大家可以看到我们首先是连接数据库然后打开,对于select的命令,我们申明一个OleDbCommand来执行之,然后再申明一个OleDbDataReader,来读取数据,用的是ExecuteReader(),objDataReader.Read()就开始读取了,在输出的时候我们要注意Text属性接受的只能是字符串,所以我们要把读出的数据都转化为字符串才行。 转换变量类型函数: 转换为字符串:Convert.ToString() 转换为数字:Convert.ToInt64(),Convert.ToInt32(),Convert.ToInt16() 是按照数字位数由长到短 转换为日期:Convert.ToDateTime() ________________________________________ dim objConnection as OleDbConnection dim objCommand as OleDbCommand dim objDataReader as OleDbDataReader objConnection=new OleDbConnection(Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath(strDb)) objCommand=new OleDbCommand("这里是SQL语句" , objConnection) objConnection.Open() objDataReader=objCommand.ExecuteReader() if objDataReader.Read() oicq.Text=Convert.ToString(objDataReader["useroicq"]) homesite.Text=Convert.ToString(objDataReader["usersite"]) face.SelectedItem.Text=Convert.ToString(objDataReader["userface"]) end if 其实大家比较一下C#和VB的语法,会发觉用C#似乎更加简单,教程里面我侧重C#,对于VB的代码我就不解释了。 下面说一下如果代码是读取SQL数据库,我们这样来转变 1、把代码开始的 <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.OleDb"%> 修改为 <%@Import Namespace="System.Data"%> <%@Import Namespace="System.Data.SqlClient"%> 2、把代码里面所有申明的对象OleDb××变为Sql××就这么简单 你甚至可以用替换所有来解决,所以今后我讲不再列出Sql Server的代码了。 今天就说到这里,明天开始说数据的添加、删除、修改。 十天ASP.net(7) 作者:佚名 阅读人次:6818 文章来源:未知 发布时间:2005-6-24 网友评论(4)条 第七天 习目的:会添加删除修改记录 以前我们在ASP中不管是添加还是删除记录或者用SQL语句加上EXECUTE()或者就是直接用RECORDSET的NEW、DELETE、UPDATE等方法来添加删除修改记录。在ASP.NET里面我们采用SQL语句加上COMMAND对象来执行SQL语句的方法来添加删除修改记录。这比上次说的读取记录还简单。实际上只有一点区别,把ExecuteReader()修改为ExecuteNonQuery()即可,因为我们不需要返回值啊。 string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source="; strConnection+=Server.MapPath(strDb); OleDbConnection objConnection=new OleDbConnection(strConnection); OleDbCommand objCommand = new OleDbCommand("这里是SQL语句" , objConnection); objConnection.Open(); OleDbDataReader objDataReader=objCommand.ExecuteNonQuery(); ________________________________________ dim objConnection as OleDbConnection dim objCommand as OleDbCommand objConnection=new OleDbConnection(Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath(strDb)) objCommand=new OleDbCommand("这里是SQL语句" , objConnection) objConnection.Open() objDataReader=objCommand.ExecuteNoQuery() 下面再举例子说明一下SQL语句(ACCESS): 添加记录: insert int o 表名 (字段1,字段2) values (字符串1,字符串2) where 条件 删除记录: delete from 表名 where 条件 修改记录: update 表名 set 字段1=××,字段2=×× where 条件 需要特别注意,如果是Sql Server删除记录是delete 表名,不需要再加from了。 今天就说到这里了,明天说ASP.NET里面最著名的DATAGRID。 十天ASP.net(8) 作者:佚名 阅读人次:6674 文章来源:未知 发布时间:2005-6-24 网友评论(7)条 第八天 习目的:初步掌握DATAGRID的使用 以前在ASP中,我们显示大批量数据经常使用循环读取记录集的方式,在表格中插入代码来显示,循环的是<tr>,如果是分页还需要自己制作,如果排序更加复杂,在ASP.NET中就好了,一切工作都可以让DATAGRID来做。 首先看一下DATAGRID的样式方面的属性 BackImageUrl="" 背景图片 CellSpacing="" 单元格间距 CellPadding="" 单元格填充 cssClass="" 使用的CSS样式 DATAGRID可以自动用表中的字段名放在显示的记录的头部来表示各个单元格所代表的意义,用ShowHeader="true/false"来控制是不是显示,在大多数情况下我们是不需要这个功能的,因为我们数据库中的字段名大多是英文的,而我们想在页面输出的大多是中文名字。 下面看一下显示数据库内所有记录,就几行代码: <script runat="server" language="c#"> void Page_Load() { string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source="; strConnection+=Server.MapPath("guestbook.mdb"); OleDbConnection objConnection=new OleDbConnection(strConnection); OleDbCommand objCommand1 = new OleDbCommand("select * from guestbook",objConnection); objConnection.Open(); dgrdMain.DataSource=objCommand1.ExecuteReader();//dgrdMain就是下面的DATAGRID的ID dgrdMain.DataBind(); objConnection.Close(); } </script> <html> <body> <asp:DataGrid id="dgrdMain" cellpadding="1" showheader="true" borderwidth="0" runat="server" /> </body> </html> 至于VB的版本,这次大家自己来试试吧:) 假设数据库是三个字段:id,aa,bb 显示的样子就如下: id aa bb 1 werwe rewrwe 2 werwe rewrwe 我们一定觉得这种显示不满意,我们有两种显示的方式(需要包括在<columns></columns>中间): 一、默认的列,我们可以选择不输出所有的字段还可以安排顺序: <asp:BoundColumn DataField="想要显示的字段名"> 比如说我们想按照bb,aa来输出这个表,我们这么写 <asp:DataGrid id="dgrdMain" cellpadding="1" showheader="true" autogeneratecolumns="false" borderwidth="0" runat="server"> <columns> <asp:boundcolumn datafield="bb"/> <asp:boundcolumn datafield="bb"/> </columns> </asp:datagrid> 注意使用了autogeneratecolumns="false"以后DATAGRID就不会自动输出所有字段了。 二、以模板列,我们可以定制每一个单元格的样式: <asp:TemplateColumn> <itemTemplate> 中间是一个表格,想怎么样就怎么样 </itemTemplate> </asp:DataGrid> 或许你们要说怎么在表格中输出代码那,可以使用<%# DataBinder.Eval(Container.DataItem,"字段名").ToString()%> 下面看一个例子,我们所要做的就是把aa,bb两个字段放在一个单元格内显示,就好像下面一样: 1 werwe rewrwe 2 werwe rewrwe 我们这样写代码: <asp:DataGrid id="dgrdMain" cellpadding="1" showheader="false" autogeneratecolumns="false" borderwidth="0" runat="server"> <columns> <asp:boundcolumn datafield="ii"/> 首先使用默认的显示方式显示ID <asp:TemplateColumn> 再使用模板来显示后面一列(由AA,BB并列组成) <itemTemplate> <table border="0" cellspacing="0" cellpadding="0" width="100%"> <tr> <td><%# Container.DataItem("aa")%></td> </tr> <tr> <td><%# Container.DataItem("bb")%></td> </tr> </table> </itemTemplate> </asp:DataGrid> </columns> </asp:datagrid> 今天就说到这里,明天我们来看一下DATAGRID的分页显示等功能 十天ASP.net(9) 作者:佚名 阅读人次:5514 文章来源:未知 发布时间:2005-6-24 网友评论(7)条 第九天 习目的:会用DATAGRID分页显示 虽然说DATAGRID的分页显示效率不怎么高,但是不管怎么说,它是最方便的分页显示,对于做一个留言簿还是相当简单实用的。对于启用分页功能还有一个重要要求,只能在DATADRID控件的数据源实现了ICOLLECTION接口的情况下才能启用分页功能,而DATAREADER没有这个接口,所以必须使用DATATABLE来代替。 <script runat="server" language="c#"> void Page_Load() { string strConnection="Provider=Microsoft.Jet.OleDb.4.0;Data Source="; strConnection+=Server.MapPath("guestbook.mdb"); OleDbConnection objConnection=new OleDbConnection(strConnection); OleDbDataAdapter objDataAdapter=new OleDbDataAdapter("select * from guestbook",objConnection); DataSet objDataSet=new DataSet(); objDataAdapter.Fill(objDataSet); dgrdMain.DataSource=objDataSet; dgrdMain.DataBind(); } void dgrdMain_PageIndexChanged(Object sender, DataGridPageChangedEventArgs e) { dgrdMain.CurrentPageIndex = e.NewPageIndex; DataBind(); } </script> <html> <body> <asp:DataGrid id="dgrdMain" cellpadding="1" showheader="true" borderwidth="0" allowpaging="true" 启用分页功能 pagesize="3" 每一页显示三条记录 onpageindexchanged="dgrdMain_pageindexchanged " 调用第×页的函数为dgrdMain_PageIndexChanged() runat="server" /> </body> </html> ________________________________________ <script runat="server" language="vb"> subPage_Load dim objConnection as OleDbConnection dim objDataAdapter as OleDbDataAdapter dim objDataSet as DataSet objConnection=new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source="+Server.MapPath("guestbook.mdb")) objDataAdapter=new OleDbDataAdapter("select * from guestbook",objConnection) objDataSet=new DataSet objDataAdapter.Fill(objDataSet) dgrdMain.DataSource=objDataSet dgrdMain.DataBind() end sub sub dgrdMain_PageIndexChanged(sender as object,e as datagridpagechangedeventargs) dgrdMain.CurrentPageIndex = e.NewPageIndex DataBind end sub </script> <html> <body> <asp:DataGrid id="dgrdMain" cellpadding="1" showheader="true" borderwidth="0" allowpaging="true" 启用分页功能 pagesize="3" 每一页显示三条记录 onpageindexchanged="dgrdMain_pageindexchanged " 调用第×页的函数为dgrdMain_PageIndexChanged() runat="server" /> </body> </html> 这样就是最简单的分页,我们可以用参数pagestyle-mode="nextprev/numericpages"来设定是显示上一页、下一页方式还是直接选择页面的数字方式来实现页面跳转。如果是前者我们可以用pagestyle-nextpagetext来设定包含下一页链接的文本,用pagestyle-prevpagetext来设定包含上一页链接的文本;如果是后者我们可以用PagerStyle-PageButtonCount来设定在使用省略号之前显示的页面编号数量(默认是10) 今天就说到这里,明天说一下SESSION和COOKIE。 十天ASP.net(10) 作者:佚名 阅读人次:5305 文章来源:未知 发布时间:2005-6-24 网友评论(8)条 第十天 习目的:会SESSION和COOKIE的使用 在各个网页间的变量传递和一些记录用户的登陆信息要用到SESSION和COOKIE。在ASP.NET中使用COOKIE比ASP中稍微麻烦一点,因为我们要申明变量。 首先看一下SESSION的使用,基本和ASP差不多 写入一个SESSION: Session["username"])="aa"; ________________________________________ Session("username")="aa" 读取一个SESSINN: string username= Session["username"]; ________________________________________ dim username=Session("username") 再来看一下COOKIE的写入: DateTime dt=DateTime.Now; //需要<%@Import Namespace="System"%>,得到当前时间 HttpCookie mycookie=new HttpCookie("logname");//申明新的COOKIE变量 mycookie.Value="aa";//赋值 mycookie.Expires=Convert.ToDateTime(dt+TimeSpan.FromDays(1));//设定过期时间为1天 Response.Cookies.Add(mycookie1);//写入COOKIE ________________________________________ dim dt as DateTime dt=DataTime.Now dim mycookie as HttpCookie mycookie=new HttpCookie("logname") mycookie.Value="aa" mycookie.Expires=Convert.ToDateTime(dt+TimeSpan.FromDays(1)) Response.Cookies.Add(mycookie1) 看一下COOKIE的读取: HttpCookie mycookie=Request.Cookies["username"]; string username=mycookie.Value; ________________________________________ dim mycookie as HttpCookie mycookie=Request.Cookies["username"] dim string=mycookie.Value 到此《十天ASP.NET》结束了
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

freeflying1222

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值