敢达创战者try星野本子:ASP.net(VB)编程入门进阶

来源:百度文库 编辑:偶看新闻 时间:2024/04/30 20:18:18
 2007年12月05日 星期三 下午 3:25

安装运行.net需要的软件

前言:首先对DM编程区的朋友们说声,您好,辛苦了,因为我感到如果没有兴趣的话,每天写呀写呀,分析呀分析呀,确实很累的,我在今年5月份asp入了门.在这里泡了2个月,技术有所提高,然后不小心踏入了不归路---------水区,后来由于某些原因,做了几个小系统,只是稍微掌握的系统了一点,在7月-9月的这段时间,由于某些原因把c++拿出来学了学,基本掌握.不要说我卖弄,或者说感到我说的基础的话,你可以马上闪人,我还是那句话,要务实,我不说理论,因为我始终相信实践中经验的来的就是理论,如果你每天抱着看什么什么原理的话,很难掌握的,前端时间有人说.net久久不能入门,我很是怀疑他的方法或者基础,坦白的说,我个人感觉学.net还是要些基础的,什么编程都不会的别学,先搞定一门再说,我这里推荐一本书:《beginning asp.net 1.1with vb.net 2003》就是《asp.net 1.1入门经典--vb.net2003编程篇》这本书讲的很不错,适合初学者。

个人基础:asp基本掌握,c++基本掌握;
电脑配置:6.5G硬盘+128M内存,其他设备都是类似的配置+windows2000;

软件要求吧:

1、MDAC 2.7(微软数据库引擎)大约5.01M;
2、Microsoft.NET framework1.1大约23.1M,比这大正常,版本问题吧;
3、NET_Framework_SDK_1.1_CHS大约116M.和这大小差不多;

你要问那里下载的话就在google输入以上英文,对应的很多,自己选择,然后按照1-2-3的顺序安装,安装完毕了在控制面板---管理工具--生成Microsoft .NET Framework 1.1 Configuration和 Microsoft .NET Framework 1.1 Wizards,这说明你的,net服务器的环境已经配置的差不多了,如果你感到你的计算机很不错的话就装上,就装上Visual Studio 2005 Express 先奢侈一下吧,如果你想咱们快写进行,就装上webmatrix 就行了,它大约1.1M,asp.net在web服务器IIS下运行的,也可以在webmatrix下运行的,安装这些完毕了(我假定你已经装了至少很我一样多的东西,webmatrix你也安装了)。

现在好像没什么要我们操心的了,启动webmatrix,会弹出:

创建新文件:
1、绝对本地路径,你自己选;
2、名称你自己写;
3、language:visual basic.net ;
c#的过短时间我仔细看看怎么转变,再说,这种软件你应该很熟悉了,点击ok了进入编写区:

编辑区下面的4个选项:Design / html / code all
design是可视化设计 / html是可视化生成的html代码 / code是.net将要运行的代码 ,它其有3中插入方式:
1、内联代码<%%>
2、




    


        
    

然后保存,点击上边的中间的图标:

看路径确定,它将启动webmatrix,然后转到 http://localhost:8080 下面,同时你的电脑右边弹出一个很酷的提示框,大体说.net服务已经启动,你在浏览器中将看到:

we study asp.net on this site.

这说明了2件事情:
1、你的.net服务器配置好了,就等你写代码了;
2、你很聪明的操作了,net的安装过程了;

当然,如果你已经安装了IIS的话就可以在浏览器中输入网址就像打开asp文件那样可以打开aspx文件的并运行之了,这是令人兴奋的。

前言:当你就像我想象的那样安装.net完毕的话,今天也许你跃跃欲试的想马上操作数据库...编辑...页面生成.....等了,你在ASP里面熟悉的操作都想用.net搞定.那我先要买个关子,你也许已经有了VB的基础了,也许asp熟练掌握了....如果你认为.net的变量你不看规则不太习惯的话,还是有必要静下心来,先看看.net(vb)中是如何操作的,其实是大同小异的,另外控件大家想必知道,这就是html中的控件,正因为有了这些东西so程序员才能收集信息反馈显示.....,下面我简要的介绍一下,其实我也感觉没有必要把每个控件的属性都知道的,如果你感兴趣的话在webmatrix的视图里面随便拉个左边的就去看看源码就知道这是什么控件了,我就随便说说几个非常常用的,这写介绍你可以不看的,只看变量就行的。

控件

现看看控件吧,所有的web控件都必须有2个属性,第一个当然就是ranat="server",它告诉asp.net在服务器上处理控件,并为控件执行所有的asp.net的功能,包括状态的创建.第二个属性是名称ID="mycontrolname"这就像人的身份证一样,在代码中指定名称,引用该控件,看看这个asp.net和html窗口标记府的比较,表格来自上面书籍的P56页,但不全。

asp.net控件 对应的html窗口标记


单选





大概就是这几个比较常用,发现没asp.net的控件都是类型前面有,这是asp.net专用的,也就是说这是用于server服务的asp.net控件,那么,html在aspx文家中能运行么?能,好的很,因为所有asp.net的web控件都转变为html的了,如下aspx的源码:


<%@ Page Language="VB" %>





    


         Label
        

        
    

在服务其上运行生成的文件源码是:





    


         Label
        

        
    

另外,asp.net的控件被asp.net添加了name的额外标记符,value值也是变为一个很难认识的字符串,这个value值........我也看不懂,但这不影响任何事情。

昨天我用了一个page_load事件控制label的text属性的,page_load是加载aspx文件.net先解释的事件,这就和window.onload差不多吧,以后慢慢说.看看它是怎么控制的:

sub page_load()
message1.text="i am message1"
message2.text="i am message2"
end sub

这就加载了message1的text显示为i am message1,这就是一个简单的.net里面的web控件。

另外,再看看控件吧。启动webmatrix,创建一个新文件p56.aspx,选择design视图,然后在左边选择dropdownlist控件:

把它选中用鼠标拉到界面上,就像DM里面一样的.单击,然后在右边选择:

Items,它控制的是下拉选项项目,点击最右边的几个小点点..

弹出的对话框中选add,在写上选项名称id,value,点击Ok。
同理添加一个submit按钮,在properties里面设置一下背景,边框呀什么的,然后启动状态栏中间的箭头按钮在浏览器中看看,效果:

是不是很酷?不急,还没有完,选all视图,在




    


        


            
                 blueidea
                 tillage village
                 warra
                 leadbbs
                 vv32
                 web site
            

            
        


        


            
        


    

在vbscript里面,只有一个基本数据类型,就是variant,而且不区分大小写,它的变量声名有两种方式:显式和隐式

在vb.net里面,是有些不同的:
变量是允许在内存中存储信息,才可以执行一些数学函数,处理文本,执行其他函数等操作,变量是内存中的一个空间,一般都会被指明名称和数据类型的。

VB.NET是一种强类型的语言,so任何变量都必须有数据类型,它有4个部分:名称、内存空间、数据类型、变量的值。

使用变量时,最好明确创建或者声名,最简单的就是用关键字dim(dimension)的缩写,dim strmy ,这在无形中做了3件事:建立变量的名称、指定了类型、在内存中分配了一块空间,在变量赋值之前,内存中什么也不包含的。

ISnothing(srtmy)可以检查变量是否包含值,如果变量为空,ISNothing(strmy)就返回True,如果变量不是空,就返回False。

请不要违背以下三个原则命名变量:
1、必须以字母开头;
2、不能包含内嵌的句号/停顿或者空格;
3、不能与VB.NET的保留字相同;
就像下面这样命名:

dim strmy as string
strmy="5do8"
dim strmy2 as string="5do8"

等技巧和vbscript里面类似的,慢慢掌握吧。

数据类型
vb.net里面有12中不同的内置数据类型,可以官方的分为3大类:数字类型、文本型、其他类型(有人叫混合类型,我认为不太合适)
数字类型:
1、integer(整形)(范围在20亿左右),如0,12,98都是整型的;
2、byte(字节)(范围在0-255,无负数),由于它在计算机只存储一个字节,速度很快,特cool;
3、short(短整型)(范围在-32768到32767);
4、long(长整型)(很长);
5、single(单精度),可带小数部分的;
6、Double(双精度);
7、Decimal(小数)(最多28位小数);

选择定义的时候要恰到好处,不要浪费内存。

文本型:
1、string(字符串);
2、char(字符)学过c++的都知道的,将文本以数的形式存储.范围是0-65535,
定义的时候双引号后面用C来表示这是个char变量,而不是string ;

其他类型
1、Date(日期型);
2、boolean(布尔型) false-(0)和true(其他数字);

有时候希望变量赋值以后,在执行过程中值保持不变,用常量const :const Asints as integer =-255

修改常量的值是不被支持的。

vb.net还提供了一系列以c开头的转换函数,例如cint()等,很有用,慢慢在实践中就体会到了。

声名数组:
和其他变量一样,数组在使用前也要用关键在dim声明的,在声明的时候末尾还要加上另外一个参数,以指定数组的大小,然后可以存储最大索引值+1了,看看一个例子:启动webmatrix,创建新文件P87.aspx,在code视图中,写入:

sub page_load()
     if ispostback then
     dim darr(4) as string
     darr(0)="www.blueidea.com"
     darr(1)="www.5do8.com"
     darr(2)="www.dw8.cn"
     darr(3)="www.google.com"
     darr(4)="www.usst.edu.cn"
     labtxt.text="your aaary   is " & darr(txtnum.text)
     labtxt.visible=true
     end if
end sub

在视图中插入label,buttom,input标签,最后的源码就是:

<%@ Page Language="VB" %>





    


        


            
            
        


        


            
        


        
    

效果:

然后运行,输入数据,显示数组的值,注意这里不要输入0-4以为的数字,负责就是越界,这在后面我们要控制的,这里只是演示数组而已。

多维数组
和vbscript里面的及其相似,其他定义和数组一样,就多了维数.

数据集合
通常需要用不同的方法将项分组,这些高级技术在VB.NET中称为集合,包括了arraylist、hashtable、sortedlist,集合的特性如下:
1、集合可以包含不定数目的成员;
2、集合中的元素仅仅因为他们处于相同的集合才发生关系;
3、集合的元素不必共享相同的数据类型;
4、当整个集合发生变动时,对象在集合的位置也可以改变;

.net已经上路了,前几天着重写了写asp.net(VB)的基本安装、语法、变量、原计划把服务器控制结构和过程编程也写上,但,这和asp里面的没什么区别,在循环结构里面多了一个with...end with操作一个对象的属性的,其他的都差不多,想看详细教程的请查阅Msdn,我就跳过这一节了,另外跳转结构---子例程和函数也跳过,不过,里面的模块化很有意思的,还有传递参数的时候按照引用还是值传递这个很是重要,至于其中的区别,学过c++的都知道,不太明白的请查阅相关资料......由于篇幅关系,我把事件驱动编程和回送也跳过,相应用户的事件组,这个很有必要在这里说说。

官方定义事件:事件是由来自代码外部的某种力量在应用程序中引发的一个操作.将事件驱动环境按照顺序分为以下4个部分:

1、发生一个事件,like用户单击按钮;
2、系统检测到事件,asp.net注册已发生的事件;
3、系统对事件做反应,执行一些代码;
4、系统返回其初始状态,等待下一事件;

html叶子是按照代码的顺序依次执行的,而事件驱动编程强调的是相应用户,执行事件,等待相应的思想。

ASP.NET支持3个主要的事件组,第一组是html内部的事件,这些事件在浏览器上执行。第二组包含在asp.net生成页面时自动发生,我们使用这些事件建立页面.第三种包含了用户与页面交互时发生的所有事件(这种最强大)。

事件驱动编程和回送回送是处理过程,该过程包括:浏览器将信息发送到浏览器,告诉服务器处理事件,服务器执行次事件处理程序中的代码,并将得到的html再传送到浏览器,回送只作用于有属性runat="server"的web窗口,且只有asp.net控件才能将信息传送到服务器。

下面看个事件驱动的实例结束本节.呵呵.
实例:我们要做这件事,设计一个"东西",要实现的是能加减乘除操作,并且显示出计算结果。

现看看算法吧:

sub page_load(sender as object,e as eventargs)
     btnadd.backcolor=system.drawing.color.lightgray
     btnsubtract.backcolor=system.drawing.color.lightgray
     btnfactor.backcolor=system.drawing.color.lightgray
     btnra.backcolor=system.drawing.color.lightgray
end sub

sub ca(sender as object,e as eventargs)
     select case sender.id
     case "btnadd"
         labtxt.text=cdbl(input1.text)+cdbl(input2.text)
     case "btnsubtract"
         labtxt.text=cdbl(input1.text)-cdbl(input2.text)
     case "btnfactor"
         labtxt.text=cdbl(input1.text)*cdbl(input2.text)
     case "btnra"
         labtxt.text=cdbl(input1.text)/cdbl(input2.text)
     end select

     sender.backcolor=system.drawing.color.yellow
end sub


 

分析上面代码:page_load事件当整个页面第一次可见时发生,这里实现了令4个按钮的背景颜色为淡灰色。子例程ca执行的是用户点击按钮操作后发生的事件,然后回送labtxt上,最后改变选择web控件对象(按钮)的背景颜色,注意到:

sub ca(sender as object,e as event)
'some code .............
end sub

它是事件处理程序提供的参数向处理程序传递参数事件信息,其中第一个参数sender提供了引发事件对象的引用,第二个参数E是一个事件类,用于捕捉所处理时间状态的信息,并传递与该事件对应的对象。

下面在视图中拉上这7个控件,注意这里需要正确填写每个控件的ID,并且要在每个按钮上添加事件:

onclick="ca"

意思就是说当点击这个按钮是发生事件ca,这是不可缺少的。
一切搞定了的话,最后的aspx页面效果就像这样:

所有源码:

运行代码框
以下是引用片段:

<%@ Page Language="VB" %>





    


        


            
            
            
        


        


            
            
            
        


        


            
        


        
    


对象就是能看到,感到,听到,触摸到,尝到或闻到的东西,在这里我们这样“定义”:对象是一个自包含的实体,用一组可识别的特性和行为来标识。

在面向对象的编程(oop)的编程方式,用使用下面的两个术语。
类:这是对象的模板,定义了对象的特性。
实例:这是一个真实的对象,可以与之交互的东西。

属性,方法和事件

在OOP中,下面的术语描述对象的特性。
属性:这是一个名次,描述了某个对象的属性
方法:这是一个动词,描述了对象可以完成的工作,或者希望它完成的工作。
事件:描述了对象为相应某个动作而执行的操作。

.net中的对象
在.net中,其实所有的东西都是对象。为什么要使用对象?

在编程时,对象的面向对象编程和面向对象设计的一部分,它们具有非常大的优势,许多人认为这是一个复杂的主题,但实际上,它非常简单,可以用四个简单的术语来解释:抽象、封装、多态和继承。

抽象:这是一个隐藏复杂性,类的内部工作情况,所以用户不必知道它的运作方式,就像。如果想要看电视,就不必知道电视机时如何工作的,只需打开电视机,搜索频道即可,on/off开关抽象了实际的操作,在string例子里,有一个trim方法,它可以删除字符串尾部的空格,同样不需要知道他是如何完成这个任务的,只要知道它有这个功能即可。

封装:每个对象都包含进行操作所需要的所有信息,这个对象称为封装,因此对象不比依赖其他对象来完成自己的操作,在术语TOupper()方法中,string不必到其他地方获取信息来把所有的字符转换为大写。

多态:这个术语用于表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行,名称一样,但底层实现的代码是不一样的。

继承:它定义了类如何相互关联,共享特性的,继承的工作方式是,定义类和子类,其中子类继承了父类的所有特性,继承的重要性是,它迫使类型相似的类具有一致性,并允许共享代码,如果决定创建一个新类,就不必定义父类的所有特性。

好了,我们看个实例吧,创建一个user类,他具有一下特性:
属性:name ,point,level
方法:post(),reply(),change()
ok,现在在你的webmatrix里面创建吧。

看看以下源码:

public class user

     public sub new()
     end sub

     private _name as string
     private _point as integer
     private _level as string

     public property name as string

     get
     return _name
     end get

     set(byval value as string)
     _name=value
     end set

     end property

     public property point as integer
     get
     return _point
     end get

     set(byval value as integer)

     if value<0 then
     value=0
     end if
     _point=value

     end set

     end property

     public property level as string

     get
     return _level
     end get

     set(byval value as string)
     _level=value
     end set

     end property

     end class


 

这里定义的就是上面我们想要的,注意,如果你以前不了解一门面向对象设计的语言的话理解起来比较困难的。创建实例的是:

     sub page_load(sender as object,e as eventargs)
     dim blueidea as new user()
     blueidea.name="5do8"
     blueidea.point="5000"
     blueidea.level="终极会员"

     name.text=blueidea.name
     point.text=blueidea.point
     level.text=blueidea.level
     end sub

html视图还是注意ID写上3各label控件就ok了,可以看到效果:

name: 5do8 point:5000 level:终极会员

代码分析如下:

1、首先用class关键字定义类,后面是类名,而public是表示可以用于其他的程序;
2、然后是构造函数,new(),如果不写的话也行,因为,net默认提供构造函数的,这和c++里面的一个模式;
3、定义私有变量,用来存储类的属性,这些变量在代码的外部不能访问,如何使用这些变量,就要使用property语句即可;

public property name as string
get
return _name
end get

set (byval value as string)
_name=value
end set
end property

第一行里面的public声名在外部可以访问,property声明一个属性,它后面是属性的名及其类型。get返回私有变量的值,这是内部机制,接下来的set语句,在属性中存储一个值时执行这个语句,这里仅仅把私有属性设置为参数传送的值,set 语句有些像方法调用,只传一个参数,该参数在设置属性时由.net自动赋值。
..........其他的依次同理....最后是结束类end class。

创建实例的时候:

dim blueidea as new user()
     blueidea.name="5do8"
     blueidea.point="5000"
     blueidea.level="终极会员"

第一行创建user类的一个实例,名称是blueidea。接下来是设置它的属性值。最后绑定在web控件上。

这就是一个很简单的使用类的实例,但不像c++那样,asp.net好像没有提供析构函数释放一些不必要的内存占用等。

另外,高级类属性和方法就不说了,很多,慢慢的在实践中应该可以掌握的。

.net框架包含几个命名空间,其中有几十个用于数据库访问的类,主要有system.data.sqlclient和system.data.oledb两大类,这里我主要介绍小巧一点的system.data.oledb空间中的类,因为system.data.sqlclient只与microsoft sql server数据库一起工作,而前者是支持access或者oracle 数据库。

system.data.oledb名称空间包含以下这些类:
1、oledbconnection(代表一个打开的数据库连接)
2、oledbcommand(代表一个sql语句或存储过程)
3、oledbdatareader(代表从数据库查询返回的结果)

执行常见的数据库任务

在接下来的一些日子里面,我会陆续的写上如何创建和打开数据库,获取和显示数据库记录,添加新的数据库记录,更新数据库记录,删除数据库记录等。这些都是很基本的操作,但能令初学者心血彭湃的。呵呵。

当您使用microsoft access或者oracle,需要使用以下的页面指令来导入system.data.oledb命名空间:

<%@ import namespace = "system.data.oledb"%>

使用sql server数据库的链接的话是:

<%@ import namespace = "system.data.sqlclient"%>

打开数据库
要访问数据库,首先要创建和打开数据库链接,创建连接的方式看你的数据库类型,如下代码创建了一个sql数据库的连接:

<%@ import namespace = "system.data.sqlclient"%>

第一行导入命名空间,在page_load子例程中创建和打开,先创建一个名为sqlconn的实例,通过向sqlconnection类的构造器传递一个字符串参数,对sqlconn类进行初始化,最后通过sqlconnection类的open()方法实际打开链接。

同样的道理,我们可以类似的打开access的数据库,如下的代码:

<%@ import namespace ="system.data.oledb" %>

sub page_load()
dim conn as oledbconnection
conn=new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=d:\web\web\net\data\db.mdb")
conn.open()
end sub

在使用完数据库链接时,应尽快关闭它是很重要的,每个数据库都有连接数量的限制,关闭链接使它可以供其他的页面使用,应使用下面的语句关闭sqlconnection或者oledbconnection:

yourconnname.close

在ASP.net页面中最常用的是SQL中的select语句:

select szd_first,szd_last
from site_data
where id='2'

在asp.net页面执行一个select语句需要以下4步完成:
1、创建和打开数据库
2、创建沂河代表sql select语句的数据库命令
3、用executereader()方法执行这个命令,并且返回一个datareader.
4、遍历datareader,显示查询的结果。

在使用ado.net查询中,查询的结果在一个datareader中返回,更准确的说,查询的结果由一个sqldatareader或oledbdatareader表示,datareader代表一个只向前的数据库记录流,这意味着datareader每次只代表一个记录,要想获取流中的下一个记录,必须调用read()方法,要想显示所有的记录,必须反复调用read()的方法,直到流的尾部,不能回头。例如asp里面的游标只向前移动。

下面的程序显示了sql server读取数据库的记录:

<%@ import namespace="system.data.sqlclient"%>
<%
dim sqlconn as sqlconnection
dim sqlcmd as sqlcommand
dim sqlreader as sqldatareader
sqlconn=new sqlconnection("server=localhost;uid=sa;pwd=sd;database=data")
sqlconn.open()
sqlcmd=new sqlcommand("select szd_first from site_data",sqlconn)
sqlreader=sqlcmd.executereader()
while sqlconn.read()
response.write("

  • ")
    response.write(sqlreader("szd_first"))
    end while
    sqlreader.close
    sqlconn.close
    %>

    分析:先导入sql server的ado.net类需要的名称空间,然后创建一个数据库conn,这和asp相似,接着用一个sql select语句的sql字符串初始化sqlcmd对象,这个语句从名为site_data的表中读取所有的记录。然后调用sqlcommand类的executereader()方法执行这个命令,返回执行结果的sqlreader,然后遍历所有记录。

    下面演示一个从access数据库里面读出数据的源码:

    <%@ Page Language="VB" %>
    <%@ import namespace="system.data.oledb"%>


    有时候,我们要查询符合条件的一条记录,如果按照上面的executereader,效率显然很差,这里介绍另外一种方法executescalar,在几张集聚功能的count,max,min等,这个例子:

         sub page_load()
              dim conn as oledbconnection
              dim accmd as oledbcommand
               conn= new oledbconnection("provider=microsoft.jet.oledb.4.0;data source=d:\web\web\net\data\db.mdb")
              conn.open()
              accmd=new oledbcommand("select count(*) from site_n ",conn)
              actxt.text=accmd.executescalar()
              conn.close
         end sub