ASP .NET 程序设计( C# 版) 机械工业出版社同名教材 配套电子教案 2007.7
课 程 概 述 本书以 Visual Studio 2005 为开发平台,以 C# 为开发语言,面向毫无程序设计基础的读者 ,采用案例方式,全面细致地介绍了 ASP.NET 2.0 网站开发技术。 全书共分为 10 章,主要包括 ASP.NET 2.0 和 Visual Studio 2005 开发环境简介, C# 2005 编程基础,结构化程序设计方法,常 Web 服务器控件, ASP.NET 2.0 内置对象, 数据库应用程序开发, Web Service 简介和 发布 ASP.NET 2.0 网站等方面的内容。本书 每章均配有一定数量的习题,以方便学生练习 。
学习要求与方法 要求: 1. 理解结构化程序设计、可视化程序设计 和面向对象的程序设计方法。 2. 理解 C# 2005 的事件驱动机制。 3. 通过本书的学习,能够独立设计出一般 ASP.NET 2.0 应用程序。 方法: 1. 课前预习、课中认真听讲,紧跟教师思 路。 2. 课后认真完成作业,安排足够的上机时 间。 3. 上机时应认真理解代码的含义,不要将
第 1章
ASP.NET 2.0 概述
本章讲述的主要内容 1.1 程序设计方法的发展历程 程序设计方法和程序设计语言的发展、 C/S 和 B/S 架构体系、多层开发架构。
1.2 .NET 框架简介 1.3 ASP.NET 的体系结构 ASP.NET 2.0 的逻辑架构、 ASP.NET 2.0 网站的组 成文件
1.1 程序设计方法的发展历程 1.1.1
程序设计方法的发展
1. 传统的编程方法 强调节省计算机资源,程序可读性差、可维护性差、通 用性更差。 2. 结构化程序设计 要求把程序的结构规定为 顺序、选择和循环 三种基本结 构。限制使用语句间的跳转( goto 语句),并提出了 自顶向下、逐步求精、模块化程序设计等设计原则。 3. 面向对象的程序设计方法 使软件的设计与实现形成一个由抽象到具体、由简单到 复杂的循序渐进的过程,从而解决了大型软件研制中存 在的效率低、质量无法保证、调试复杂、维护困难等一
1.1 程序设计方法的发展历程 1.1.2
程序设计语言的发展
机器语言 → 汇编语言 → 高级语言 → 可视化程序设计 → 面向对象的程序设计
在计算机网络及其应用迅速发展的今天,美国 Microsoft 公司为适应潮流推出了以 .NET 为核心的 Visual Studio .NET 系列产品( Visual Studio 2003 和 Visual Studio 2005 )。 ASP.NET 就是其中重要的一个组成部 分。它包含了几乎所有先进的编程技术,而且相对简单易学。 可以说它为用户提供了 Microsoft .NET 的简单切入点。 目前在 Windows 环境中常用的面向对象程序设计语言有 : Visual Studio 2003/2005 中包含的 C# 、 Visual Basic .NET 等,以及 Java 、 PowerBuilder 、 Delphi 等。 虽然它们的风格各异,语法结构有很大的不同,但都具有相
1.1 程序设计方法的发展历程 1.1.3 构
C/S 和 B/S 架
1. C/S 架构体系 在 2000 年以前 C/S 架构 占据着开发领域的主流地位,其 结构如图 1-1 所示。通常程序员 将开发完成的软件安装在某计算 机(客户机)中,将数据库安装 在专用的服务器(数据库服务 器)中,用户通过安装在客户机 中的软件和网络进行各种数据库 操作。这种架构要求客户机中必 须安装客户端程序,否则无法工 作。再有,在 C/S 架构中主要 的数据分析处理工作需要在客户 机中完成,这就要求客户机有较 高的硬件配置。常用的聊天工具
1.1 程序设计方法的发展历程 1.1.3 构
C/S 和 B/S 架
2. B/S 架构体系 B/S 架构体系如图 1-2 所示 ,由客户机、应用服务器和数据 库服务器三部分组成,在中小型 应用系统中, Web 服务器可以 与数据库服务器安装在同一台服 务器中。与 C/S 架构相比,它 不需要在客户机上安装专门的客 户端软件,用户在使用程序时仅 需要通过安装在客户机上的浏览 器访问指定的 Web 服务器即可。 在 B/S 架构中主要的数据分析 处理工作是在应用服务器中完成 的,客户端主要用来下达指令和 接收结果,所以客户机的配置要
1.1 程序设计方法的发展历程 1.1.3
C/S 和 B/S 架构
3. B/S 架构编程语言 (1) ASP (2) ASP.NET (3) JSP (4) PHP
1.1 程序设计方法的发展历程 1.1.4 1.
多层开发架构
两层架构
1.1 程序设计方法的发展历程 1.1.4 2.
多层开发架构
三层架构
1.1 程序设计方法的发展历程 1.1.4 3.
多层开发架构
N 层架构
1.2 .NET 框架 简介 .NET 的核心是 .NET 框架( .NET Framework )它是构建 于以计算机网络的基础上的开发工具。 .NET 框架的基本结 构如下图所示。
1.3 ASP.NET 2.0 的体系结构 1.3.1
ASP.NET 2.0 的逻辑架构
1.3 ASP.NET 2.0 的体系结构 1.3.2
ASP.NET 2.0 网站的组成文件
一个使用 Visual Studio 2005 开发出来的 ASP.NET 2.0 网站,通常包含以下一些内容: 1) 包含一个或多个扩展名为 .aspx 的网页文件,网站中也 允许包含 .htm 或 .asp 文件。 2) 包含一个或多个 Web.config 配置文件。 3) 包含一个以 Global.asax 命名的全局文件(可选)。 4) 包含 App_Code 和 App_Data 两个共享目录。
第 3章
C# 2005 程序设计基础
本章讲述的主要内容 3.1 C# 程序的代码结构 3.2 数据类型 3.3 变量和常量 3.4 运算符和表达式 3.5 C# 2005 的常用方法与属性
3.1 C# 程序的代码结构 3.1.1
C# 代码的组成要素及书写规则
1. 关键字 关键字也叫保留字,是对 C# 有特定意义的字符串。 关键字在 VS 2005 IDE 环境的代码窗口中默认以蓝色显示。 例如,上例中的 using 、 public 、 protected 、 class 、 void 、 this 等,均为 C# 的关键字。 2. 命名空间 在面向对象程序设计中,无论使用什么开发语言都离不开开 发环境中的类和对象,这些类和对象就是各种语法提供给用 户的“资源”,在 .NET 中将这些资源的分类集合称为“命 名空间”( namespace )。使用命名空间可以把类组织 成一个逻辑上相关联的层次结构。它既可以对内部组织应用 程序,也可以对外避免命名冲突。
3.1 C# 程序的代码结构 3.1.1
C# 代码的组成要素及书写规则
3. 语句 语句就是 C# 应用程序中执行操作的指令。 C# 中的 语句必须用分号“ ;” 结束。可以在一行中书写多条语句, 也可以将一条语句书写在多行上。 4. 大括号 在 C# 中,括号“ {” 和“ }” 是一种范围标志,是组 织代码的一种方式,用于标识应用程序中逻辑上有紧密联系 的一段代码的开始与结束。大括号是可以嵌套的,以表示应 用程序中的不同层次。在书写代码时应注意使用缩进格式, 将代码中的层次关系充分表现出来。
3.1 C# 程序的代码结构 3.1.2
C# 程序的格式
1. 缩进与空格 缩进用于表示代码的结构层次,这在程序中不是必须 的,但是缩进可以清晰地表示程序的结构层次,在程序设计 中应该使用统一的缩进格式书写代码。 2. 字母大小写 C# 中的字母可以大小写混合,但是必须注意的是, C# 把同一字母的大小写当作两个不同的字符对待(区分大小 写),如,大写“ A” 与小写“ a” 对 C# 来说,是两个不 同的字符。 3. 注释 代码中的注释起对代码的解释说明作用,在将程序进
3.2 数据类型 3.2.1
数值类型
1. 整数类型 整数类型又分为有符号整数与无符号整数。有符号整 数可以带正负号,无符号整数不需带正负号,默认为正数。 2. 实数类型 实数类型包括 float (单精度浮点型)、 double (双 精度浮点型)、 decimal (十进制型)。
3.2 数据类型 3.2.2
字符类型
1. Unicode 字符集
Unicode 是一种重要的通用字符编码标准,它覆盖了美 国、欧洲、中东、非洲和亚洲的语言,以及古文和专业符号。 Unicode 允许交换、处理和显示多语言文本以及公用的专 业和数学符号。 2. char (字符型) char (字符型):数据范围是 0 ~ 65535 之间的 Unicode 字符集中的单个字符,占用 2 个字节。 3. string (字符串型) string (字符串型):指任意长度的 Unicode 字符序列 ,占用字节根据字符多少而定。
3.2 数据类型 3.2.3
布尔类型和对象类型
bool (布尔型):表示布尔逻辑型数据,占用 4 个字节 的存储空间。 bool 型数据只能是“ true” (真) 或“ false” (假)。 bool 型数值 true 和 false 是 C# 2005 的关键字,不能用来定义其他对象的名称。 bool 型数据为程序进行复杂的判断提供了数据类型依据 ,另外在程序进行关系运算或逻辑运算时,也将产生 bool 型数据结果,所以 bool 类型数据也常被称为逻辑型数据。 object (对象型)是所有其他类型的最终基类,其占用 字节视具体表示的数据类型而定。 C# 2005 中的每种类型 都是直接或间接从 object 类型派生的, object 表示一个 通用类型,一个 object 类型的变量可以存放任何类型的值。 object 也是 C# 2005 的默认数据类型。
3.3 变量与常量 3.3.1
变量及其作用域
1. 变量命名规则 在 C# 2005 中,变量命名规则如下: 1) 变量名的第首字符必须是字母、汉字或下划线。 2) 变量名中不能包含空格、小数点以及各种符号。 3) 组成变量名的字符数不要太长,应控制在 3 ~ 30 个 字符。 4) 变量名不能是关键字。如: int , object 等不能用 作变量名。 5) 变量名在同一范围内必须是唯一的。
3.3 变量与常量 3.3.1
变量及其作用域
2. 为变量命名时的注意事项 在为变量命名时注意以下几点: 1) 变量名应该能够标识事物的特性,如用于存放姓名的 字符串变量可使用 strName 命名。 2) 变量名应使用英文单词,而不能为汉语拼音。 3) 变量名尽量不使用缩写,除非它是众所周知的。 4) 若在变量名中使用了多个单词,则应大写每个单词的 第一个字母,其它字母小写。例如: IsSuperUser 。 5) 变量名应使用说明数据类型的前缀缩写,如 str 、 i 等。 6) 变量名中的单词尽量使用名词。如有动词要尽量放在
3.3 变量与常量 3.3.1
变量及其作用域
2. 为变量命名时的注意事项 变量有两种典型的命名方法:骆驼表示法和匈牙利表 示法。 骆驼表示法以小写字母开头,以后的单词都以大写字母开头 ,如 myBook 、 theBoy 、 numOfStudent 等。 推荐使用的匈牙利表示法,要求在每个变量名的前面 加上一个表示数据类型的字符串前缀,所有单词的首字母均 使用大写,其余部分使用小写。如 strName 、 iMyCar 等。 其中类型前缀 str 表示 string 型, i 表示 int 型。
3.3 变量与常量 3.3.1
变量及其作用域
3. 声明变量 变量总是和变量名联系在一起的,所以要使用变量, 必须为变量命名。在 C# 2005 中,命名变量的过程称为 “声明”。 声明变量就是把存放数据的类型告诉程序,以便为变 量安排内存空间。变量的数据类型可以对应所有基本数据类 型。声明变量最简单的格式为: 数据类型名称 变量名列表 ; 例如: float fResult; // 声明一个单精度浮点型变量 bool bOpen;
// 声明一个布尔型变量
3.3 变量与常量 3.3.1
变量及其作用域
4. 变量赋值 int iNumber; iNnumber = 32; bool bOpen; bOpen=true; char chrLetter; chrLetter = 'w'; string strName; strName = "Liu san jie"; bool bOpen , bClose; bOpen = true; bClose = bOpen; int iNum1 , iNum2 , iNum3; iNum1 = iNum2 = iNum3 = 32; double dArea , dRadius = 16;
3.3 变量与常量 3.3.2
常量
1. 直接常量 直接常量即数据值本身。 (1) 整型常量 (2) 实型常量 (3) 字符常量 (4) 字符串常量 (5) 布尔常量 (6) 日期时间常量
3.3 变量与常量 3.3.2
常量
2. 符号常量 符号常量使用 const 关键字定义,格式为: const 类型名称 常量名 = 常量表达式 ; 常量定义中,“常量表达式”的意义在于该表达式不 能包含变量及函数等值会发生变化的内容。 const int MAX=10; const double PI=3.1415926; const double AREA=PI*MAX*MAX;
// 合法
int iNum=10; const double AREA=PI*iNum*iNum;
// 不合法
3.3 变量与常量 3.3.3
类型转换
1. 隐式转换 隐式转换是系统自动执行的数据类型转换。隐式转换 的基本原则是允许数值范围小的类型向数值范围大的类型转 换,允许无符号整数类型向有符号整数类型转换。 2. 显式转换 显式转换也称为强制转换,是在代码中明确指示将某 一类型的数据转换为另一种类型。显式转换语句的一般格式 为: ( 数据类型名称 ) 数据 例如: int x = 600;
3.3 变量与常量 3.3.3
类型转换
3. 使用方法进行数据类型的转换 (1) Parse 方法 数值类型名称 .Parse( 字符串型表达式 ) (2) ToString 方法 变量名称 .ToString()
3.4 运算符与表达式 3.4.1
运算符与表达式类型
1. 算术运算符与算术表达式 算术运算符有一元运算符与二元运算符。 一元运算符: - (取负)、 + (取正)、 ++ (增 量)、 -- (减量)。 二元运算符: + (加)、 - (减)、 * (乘)、 / (除)、 % (求余)。
3.4 运算符与表达式 3.4.1
运算符与表达式类型
2. 字符串运算符与字符串表达式 字符串表达式由字符串常量、字符串变量、字符串函 数和字符串运算符组成。 C# 2005 提供的字符串运算符只 有一个“ +” ,它用于连接两个或更多的字符串。字符串表 达式的格式为: 〈字符串 1 〉 & | + 〈字符串 2 〉 [ & | + 〈字符串 3 〉… ]
3.4 运算符与表达式 3.4.1
运算符与表达式类型
3. 关系运算符与关系表达式 (1) 关系运算符
3.4 运算符与表达式 3.4.1
运算符与表达式类型
(2) 关系表达式 关系表达式由操作数和关系运算符组成。关系表达式 中既可以包含数值,也可以用于字符或字符串,但是用于字 符串的关系运算符只有相等“ ==” 和不等“ !=” 两种运算 符。
3.4 运算符与表达式 3.4.1
运算符与表达式类型
4. 逻辑运算符与逻辑表达式 逻辑表达式由关系运算符、逻辑运算符连接常量或关 系表达式组成,其取值为布尔值( True 或 False )。通过 条件表达式可对应用程序计算结果或用户输入值进行判断, 并根据判断结果选取执行不同的代码段。 逻辑运算符的操作数是布尔类型,运算结果也是布尔 类型。在 C# 2005 中,最常用的逻辑运算符是 ! (非)、 && (与)、 || (或)。
3.4 运算符与表达式 3.4.1
运算符与表达式类型
5. 赋值运算符与赋值表达式 在赋值表达式中,赋值运算符左边的操作数叫左操作 数,赋值运算符右边的操作数叫右操作数。其中左操作数必 须是一个变量或属性,而不能是一个常量。 前面介绍过的赋值运算符“ =” 称为“简单赋值运算 符”,它与其他算术运算符结合在一起可组成“复合赋值运 算符”,如“ *=” 、“ /=” 、“ %=” 、“ +=” 、“ =” 等。
3.4 运算符与表达式 3.4.1
运算符与表达式类型
6. 条件赋值运算符及表达式 条件赋值表达式可以看作是逻辑表达式和赋值表达式 的组合,它可根据逻辑表达式的值( true 或 false )返回 不同的结果。条件运算符由符号“ ?” 与“ :” 组成,通过 操作三个操作数完成运算,其一般格式为: 逻辑表达式 ? 表达式 1 : 表达式 2 在条件赋值表达式在运算时,首先运算“逻辑表达 式”的值,如果为 true ,则运算结果为“表达式 1” 的值 ,否则运算结果为“表达式 2” 的值。
3.4 运算符与表达式 3.4.2
运算符的优先级与结合性
1. 优先级
3.4 运算符与表达式 3.4.2
运算符的优先级与结合性
2. 圆括号 为了使表达式按正确的顺序进行运算,避免实际运算 顺序不符合设计要求,同时为了提高表达式的可读性,可以 使用圆括号明确运算顺序。 使用括号还可以改变表达式的运算顺序。例 如, b*c+d 的运算顺序是先进行“ b*c” 的运算,然后再 加“ d” ,如果表达式加上括号,变为 b*(c+d) ,则运算 时会先进行括号内的运算,然后将结果乘“ b” 。
3.4 运算符与表达式 3.4.2
运算符的优先级与结合性
3. 结合性 在多个同级运算符中,赋值运算符与条件运算符是由 右向左结合的,除赋值运算符以外的二元运算符是由左向右 结合的。例如, x + y + z 是按 (x + y) + z 的顺序运算的, 而 x = y= z 是按 x = (y = z) 的顺序运算(赋值)的。
3.5 C# 2005 的常用方法与属性 3.5.1
日期时间类常用方法与属性
C# 2005 中的 DateTime 类提供了一些常用的日期时间 方法与属性,该类属于 System 命名空间,在使用模板创 建应用程序时,该命名空间的引用已自动生成,因此可以直 接使用 DateTime 类。对于以当前日期时间为参照的操作 ,可以使用该类的 Now 属性及其方法。 日期时间类的 Now 属性的常用方法格式为: DateTime.Now. 方法名称 ( 参数列表 ) 日期时间类的 Now 属性的常用属性格式为: DateTime.Now. 属性名称
3.5 C# 2005 的常用方法与属性 3.5.2
常用数学方法与字段
3.5 C# 2005 的常用方法与属性 3.5.3
字符串的方法与属性
3.5 C# 2005 的常用方法与属性 3.5.5
随机方法
Random 类提供了产生伪随机数的方法。产生随机数的 方法必须由 Random 类创建的对象调用。 Random 类创 建对象的格式为: Random 随机对象名称 =new Random(); 如果要声明一个随机对象 rn ,则代码为: Random rn = new Random(); 现假定已经声明了一个随机对象 rn ,则随机方法的使 用见表 3-17 。
第 4章
结构化程序设计方法
本章讲述的主要内容 4.1 基本控件和顺序结构程序设计方法 4.2 选择结构程序设计方法 4.3 循环结构程序设计方法
4.1 基本控件和顺序结构程序设计方 法 4.1.1
标签控件( Label )
标签( Label )是 ASP.NET 2.0 中最常用的输出文 本信息的控件,是一个服务器端控件。它用来显示文本,但 不能被用户直接修改。 Label 中显示的文本是由其 Text 属 性控制的,该属性可以在设计时通过“属性”窗口设置或在 运行时用代码赋值。
4.1 基本控件和顺序结构程序设计方 法 4.1.2
按钮控件( Button )
Button 控件是 ASP.NET 应用程序中使用频度较高的控 件,它是用户与程序进行交互的主要手段之一。在程序中用 户通常可以单击页面中的某按钮来触发实现某特定功能的程 序段,如单击【确定】按钮将用户在表单中填写的数据保存 到数据库中,单击【取消】按钮清除已填写的数据,回到初 始状态,等等。
4.1 基本控件和顺序结构程序设计方 法 4.1.3
文本框控件( TextBox )
TextBox 控件是 ASP.NET 程序中用来接收用户输入, 或显示输出信息的主要控件。向页面中添加 TextBox 控件 、调整控件的大小及位置的方法与前面介绍的方法完全 相同 。
4.1 基本控件和顺序结构程序设计方 法 4.1.4
顺序结构程序设计
顺序结构是程序设计中最简单、最常用的基本结构。 在该结构中,各语句的执行是按照各语句书写次序一条接一 条地顺序执行,是其他结构的基础。即便是在选择结构或循 环结构中,也总是以顺序结构作为其最终的子结构。 【 例 4-1】
4.2 选择结构程序设计 4.2.1 选择结构程序设计的概念 前面学习的顺序结构程序设计方法主要用于处理一些 简单问题,处理问题的方法绝对固定,灵活性较差。例如, 在【例 4-1 】设计的简单算术计算器程序中,当用户在没有 输入任何数据而单击某运算按钮时程序都会绝对地要求将空 字符串转换为 float 型数据,从而导致程序出错。 如果希望避免这种错误,就必须使用选择结构程序设 计方法进行判断,若没有输入数据或只输入了一个数据,则 显示提示信息,并结束当前过程。 常见的判断及处理方法可分为以下两种: 1) “ 如果某条件成立,则选择处理方法 1 ,否则选择处理 方法 2 或不作任何处理”。这种处理方式称为“单条件选 择”。 2) “ 如果符合条件 1 ,则按方法 A 处理,符合条件 2 按方 法 B 处理,符合条件 3 按 C 方法处理,……,所有条件都
4.2 选择结构程序设计 4.2.2
if…else 结构
if 语句的语法格式为: if ( 条件表达式 ) { 语句序列 1 } else { 语句序列 2 }
4.2 选择结构程序设计 4.2.2
if…else 结构
if 语句的语法格式为: if ( 条件表达式 ) { 语句序列 1 } else { 语句序列 2 } 例 4-2
4.2 选择结构程序设计 4.2.3
if…else if 结构
if…else if 语句的语法结构如下: if ( 条件表达式 1) { 条件表达式 1 成立时执行的语句序列 } else if ( 条件表达式 2) { 条件表达式 2 成立时执行的语句序列 } else if ( 条件表达式 n) { 条件表达式 n 成立时执行的语句序列 } else { 所有条件都不成立时执行的语句序列 } 例 4-3
4.3 循环结构程序设计 4.3.1
循环结构程序设计的概念
循环结构程序设计实际上是一种特殊结构的选择结构。 程序根据判断循环条件的结果决定是否执行循环体语句。循 环体语句是循环结构中的处理语句块,用来执行重复的任务 。 例如,计算高斯数列的和 1+2+3+4+……+100 。根 据题意需要设置 100 次循环,即执行 100 次加法运算。将 循环变量 i 的初始值设置为 1 ,每次将循环变量加 1 并将其 累加到另一变量 s 中,循环条件为 i<=100 。 无论何种类型的循环结构,其特点都是循环体执行次 数多少都必须由循环类型与条件来决定,而且必须确保循环 体的重复执行能在适当的时候(满足某种条件时)得以终止 (即非死循环)。而且循环结构也是可以嵌套使用的。
4.3 循环结构程序设计 4.3.2
for 循环
for 循环常常用于已知循环次数的情况(也称为“定次循 环”),使用该循环时,测试是否满足某个条件,如果满足 条件,则进入下一次循环,否则,退出该循环。 1. for 语句的语法格式 for 循环语句的语法格式为: for ( 表达式 1; 表达式 2; 表达式 3) { 循环语句序列(循环体) }
4.3 循环结构程序设计 4.3.3
while 循环
在实际应用中常会遇到一些不定次循环的情况。例如 ,统计全班学生的成绩时,不同班级的学生人数可能是不同 的,这就意味着循环的次数在设计程序时无法确定,能确定 的只是某条件被满足(后面不再有任何学生了)。此时,使 用 while 循环最为合适。 while 循环语句的格式为: while ( 条件表达式 ) { 循环语句序列 } 例 4-6
4.3 循环结构程序设计 4.3.4 do…while 循环 do…while 循环非常类似于 while 循环。一般情况下,可以 相互转换使用。它们之间的差别在于 while 循环的测试条件 在每一次循环开始时执行,而 do…while 循环的测试条件在 每一次循环体结束时进行判断。 do…while 语法的一般格式 为: do { 语句序列 } while ( 条件表达式 ); 例 4-7
4.3 循环结构程序设计 4.3.5 转向语句和循环的嵌套 1. break 语句 2. continue 语句 3. 循环的嵌套 例 4-8
第 5 章 数组、枚举与结构 本章讲述的主要内容 5.1 数组概述 5.2 声明与访问数组 5.3 控件数组 5.4 数组的属性与方法 5.5 自定义数据类型
5.1 数组概述 5.1.1
数组与数组元素
在 C# 2005 中,把一组具有同一名字、不同下标的 下标变量称为数组。例如, A[6] 中的 A 称为数组名, 6 是 下标。一个数组可以含有若干个下标变量(或称数组元素) ,下标也叫索引( Index ),用来指出某个数组元素在数 组中的位置。数组中第一个元素的下标默认为 0 ,第二个 元素的下标为 1 ,依次类推。所以数组元素的最大下标比 数组元素个数少 1 ,即如果某一数组有 n 个元素,则其最 大下标为 n-1 。例如,一个含有 10 个元素的数组 A ,其 第一个元素为 A[0] ,最后一个元素为 A[9] 。数组的下标 必须是非负值的整型数据。
5.1 数组概述 5.1.2
数组的类型
在 C# 2005 中,数组属于引用类型,也就是说在数 组变量中存放的是对数组的引用,真正的数组元素数据存放 在另一块内存区域中。 数组元素在内存中是连续存放的,这是数组元素用下 标表示其在数组中位置的根据。 C# 2005 中的数组类型可以对应任何数据类型,即数组 可以是基本数据类型,也可以是类类型,例如,可以声明一 个文本框( TextBox )类型的数组。 C# 2005 通过 .NET 框架中的 System.Array 类来支持 数组,因此,可以使用该类的属性与方法操作数组。
5.2 声明与访问数组 5.2.1
声明和访问一维数组
因为数组是引用类型的变量,所以声明数组的过程与 声明类对象相同,包含两个环节,即声明数组变量与数组变 量的实例化。 1. 声明一维数组 声明一维数组的一般格式为: 类型名称 [ ] 数组名 ; 例如:
int [ ]A;
上述语句声明了一个名为 A 的整型数组。 数组在声明后必须实例化才可以使用。实例化数组的 格式为:
5.2 声明与访问数组 5.2.1
声明和访问一维数组
2. 访问数组 访问数组就是对数组中的元素进行读写操作,对数组 中元素的访问分为,对单个元素的访问与对所有元素的访问 两种情况。 对数组元素的访问最常见的两种形式是为数组元素赋 值和用数组元素的值为其他变量赋值,即对数组元素的读写 操作。 使用数组名与下标(索引)可以唯一确定数组中的某 个元素,从而实现对该元素的访问。例如: int x = 4, y = 5; int [ ]A = new int[3]{1,2,3}; x = A[0]; // 使用数组 A 的第 1 个元素的值为其他变量
5.2 声明与访问数组 5.2.1
声明和访问一维数组
2. 访问数组 访问数组就是对数组中的元素进行读写操作,对数组 中元素的访问分为,对单个元素的访问与对所有元素的访问 两种情况。 对数组元素的访问最常见的两种形式是为数组元素赋 值和用数组元素的值为其他变量赋值,即对数组元素的读写 操作。 使用数组名与下标(索引)可以唯一确定数组中的某 个元素,从而实现对该元素的访问。例如: int x = 4, y = 5; int [ ]A = new int[3]{1,2,3}; x = A[0]; // 使用数组 A 的第 1 个元素的值为其他变量
5.2 声明与访问数组 5.2.1
声明和访问一维数组
3. foreach 循环语句 C# 2005 专门提供了一种用于遍历数组的 foreach 循 环语句。所谓“遍历”是指依次访问数组中所有元素。 foreach 循环语句的格式为: foreach( 类型名称 变量名称 in 数组名称 ) { 循环体语句序列 }
5.2 声明与访问数组 5.2.2
声明和访问多维数组
在多维数组中,比较常用的是二维数组,声明二维数 组与声明一维数组格式类似。例如: int[ , ] A = new int[2,2]{{1,2},{3,4}}; 声明多维数组时,用逗号表示维数,一个逗号表示二 维数组,两个逗号表示三维数组,依次类推。 上例中的“ int [ , ]A” 表示声明一个二维数 组;“ new int[2,2]” 表示实例化数组时,该数组为一个 两行两列的数组,其中逗号左边的值为行数,逗号右边的值 为列数;为多维数组指定初始化值时,每一行的值须用大括 号括起来,行与行之间用逗号分隔。 例 5-2
5.3 控件数组 5.3.1
创建控件数组
在 VS 2005 中无法使用可视化的方法直接创建控件 数组,只能在设计视图中添加独立的同类控件,而后通过代 码创建需要的控件数组。 1. 声明控件数组 声明控件数组的语法格式如下: 控件类名 [ ] 数组名 = new 控件类名 [n]; 其中,控件类名为各控件在工具箱中的名称,如 Label 、 Button 、 TextBox 等等;数组名为用户指定的 数组名称; n 为数组包含的元素个数
5.3 控件数组 5.3.1
创建控件数组
2. 为控件数组赋值 为控件数组赋值的方法与为普通数组赋值的方法类似 ,可以在声明数组时赋值,也可以在声明后单独赋值。 例如: TextBox[ ] txtArray = new TextBox[4]{TextBox1, TextBox2, TextBox3, TextBox4,}; 或: TextBox[ ] txtArray = new TextBox[4]; txtArray[0] = TextBox1; txtArray[1] = TextBox2; txtArray[2] = TextBox3; txtArray[3] = TextBox4;
5.3 控件数组 5.3.2
使用控件数组
控件数组创建并赋值后,可以象对普通数组那样通过 循环操作数组元素,这对简化代码编写是十分有意义的。 例 5-3
5.3 控件数组 5.3.3
多控件共享单一事件
在程序设计过程中常会遇到页面中同类控件的同类事 件问题。例如,在【例 4-1 】中设计的“简单算术计算 器”中有表示+、-、 × 、 ÷ 的 4 个按钮控件,用户单击 按钮采用相应的计算方法。认真阅读程序代码后,可以看到 计算方法实际上只有一个运算符不同,其他部分完全相同。 此时,若使用多控件共享单一事件的方法,可大幅度减少代 码的编写量,使程序更明了易读。 1. 在源视图中统一事件名称 2. 编写共享事件过程 例 5-4
5.4 数组的属性与方法 5.4.1
数组的常用属性
1. 数组的 Length 属性 数组的 Length 属性是数组对象的一个只读属性,该属 性的值在数组实例化时被初始化,表示数组包含多少个元素。 2. IsReadOnly 属性 数组具有 IsReadOnly 属性,该属性可以设置数组或数 组列表中的元素是否为只读的。 在创建数组时, IsReadOnly 属性值默认为 false (假),即数组中的元素值允许被读取和修改。如欲保护元素 值不被修改,则可以设置该属性值为 true (真)。一旦将数 组设置为只读的,则任何对数组元素进行修改的操作都将产生 错误。
5.4 数组的属性与方法 5.4.2
数组的常用方法
1. Clone 与 CopyTo 方法 克隆( Clone )与拷贝( CopyTo )方法均可以实现数 组之间的数据复制。 Clone 方法的语法格式为: 目标数组名称 =( 数组类型名称 ) 源数组名 称 .Clone( ); 2. Array.Sort (排序)方法 使用数组的 Sort 方法可以将数组中的元素按升序重新排 列。 Sort 方法的语法格式为: Array.Sort( 数组名称 );
5.4 数组的属性与方法 5.4.2
数组的常用方法
3. Array.Reverse (反转)方法 数组的 Reverse (反转)方法,顾名思义是用于数组元 素排列顺序反转的方法。将该方法与 Sort 方法结合,可以实 现降序排序。 Reverse 方法的语法格式为: Array.Reverse( 数组名称 , 起始位置 , 反转范围 ); 其中,“起始位置”是指从第几个数组元素开始进行反 转;“反转范围”是指有多少数组元素参与反转操作。
5.5 自定义数据类型 5.5.1
结构类型
1. 定义结构 结构的定义需要使用 struct 关键字,定义格式如下: struct 结构类型名称 { public 类型名称 1 结构成员名称 1; public 类型名称 2 结构成员名称 2; …… }
5.5 自定义数据类型 5.5.1
结构类型
2. 声明结构变量 定义结构后,一个新的数据类型就产生了,可以像使用 基本数据类型那样,用结构来声明变量。 例如: employee tom;
// 声明一个结构变量 tom
也可以在声明结构变量的同时,为结构变量赋值,为结 构变量赋值实质上是为结构变量中的成员赋值,但由于结构变 量常常包含不止一个结构成员,所以在声明时为结构变量赋值 需要使用大括号,各项值之间用逗号分隔。例如: employee tom = {" 汤姆 ",true, {1980,5,26},"13868782069",3500};
5.5 自定义数据类型 5.5.1
结构类型
3. 访问结构变量 一般对结构变量的访问都转化为对结构中的成员的访问 ,由于结构中的成员都依赖于一个结构变量,因此使用结构中 的成员必须指出访问的结构变量。方法是在结构变量和成员之 间通过运算符“.”连接在一起。即: 结构变量名 . 成员名 例 5-5
5.5 自定义数据类型 5.5.2
枚举类型
1. 定义枚举类型 定义枚举类型使用关键字 enum ,定义枚举类型的一般 格式为: enum
枚举类型名称
{ 符号常量 1, 符号常量 2, … }
5.5 自定义数据类型 5.5.2
枚举类型
2. 声明与访问枚举变量 声明枚举变量与声明基本类型变量的格式相同,例如: SolarSystem S;
// 声明一个枚举变量 S
可以在声明枚举变量的同时为变量赋值,枚举变量的值 ,必须是枚举成员,枚举成员需要用枚举类型引导,例如: SolarSystem S= SolarSystem.Sun; 对枚举变量的访问如同对基本类型变量的访问,例如: SolarSystem S = SolarSystem.Sun; int iNum = S; 量 iNum
// 将 S 的值赋给整型变
第 6 章 HTML 控件和 Web 服务器 控件 本章讲述的主要内容 6.1 ASP.NET 控件概述 6.2 标准服务器端控件 6.3 数据验证控件 6.4 用户自定义控件
6.1 ASP.NET 控件概述 6.1.1
HTML 控件
HTML 控件在默认情况下属于客户端(浏览器)控件, 服务器无法对其进行控制。 HTML 控件是从 HTML 标记衍 生而来的,每个控件对应于一个或一组 HTML 标记。例如 ,前面我们经常使用的 HTML 表格控件,就是一个常用于 页面布局工具的 HTML 控件,如果不使用工具箱中的控件 ,而直接在源视图中书写相应的 HTML 代码也可以得到相 同的效果,但使用控件可以节省大量的代码书写时间,且使 操作变成了可视化的方式。 HTML 控件可以通过修改代码将其变成 Web 服务器端 控件,几乎所有的 HTML 标记只要加上 runat = "server" ,这个服务器控件标识属性后都可以变成服务器 端控件。这与普通 HTML 标记相比最大的区别在于,服务 器端控件可以通过服务器端代码来控制。
6.1 ASP.NET 控件概述 6.1.2
服务器端控件
1. 服务器端控件的执行过程 当用户请求一个包含有 Web 服务器端控件的 .aspx 页 面时,服务器首先对页面进行处理,将页面中包含的服务端 控件及其他内容解释成标准的 HTML 代码,然后将处理结果 以标准 HTML 的形式一次性发送给客户端。 2. ASP.NET 页面的处理过程 当用户通过浏览器发出一个对 ASP.NET 页面的请求后 , Web 服务器将用户的请求交由 ASP.NET 引擎来处理。系 统首先会检查在服务器缓存中是否有该页面,或此页面是否 已被编译成了 .dll 文件( Dynamic Link Library ,动态链接 库)。若没有则将页面转换为源程序代码,然后由编译器将 其编译成 .dll 文件,否则直接利用已编译过的 .dll 文件建立对 象,并将执行结果返回到客户端浏览器。
6.2 标准服务器端控件 6.2.1
ImageButton 和 HyperLink 控件
ImageButton (图像按钮)、 Image (图像)和 HyperLink (超链接)控件都可以在控件中显示图片,且都 具有超链接跳转的功能。 1. ImageButton 控件
6.2 标准服务器端控件 6.2.1
ImageButton 和 HyperLink 控件
2. HyperLink 控件 双击 HyperLink (超链接)控件在工具箱中的图标, 可将控件添加到当前页面光标所在位置。 HyperLink 控件与 标签控件很相似,但该控件支持用户的单击事件,可以在控 件中显示图片,可以指定超链接的目标框架等特有属性。
6.2 标准服务器端控件 6.2.2
Image 和 ImageMap 控件
Image 控件和 ImageMap 控件都是用于图片显示的控件 。 1. Image 控件
6.2 标准服务器端控件 6.2.2
Image 和 ImageMap 控件
2. ImageMap 控件
例 6-1
利用 ImageMap 控件可以创建一个图像,该图像包含 任意数目的,用户可以单击的区域,这些区域称为“作用 点”。每一个作用点都可以是一个单独的超链接或回发事件。 ImageMap 控件与其他网页编辑工具(如 Dreamware )提 供的“热点地图”功能类似。 ImageMap 控件主要由以下两个部分组成: 1) 显示于控件中的图像。它可是任何标准 Web 图形格式 的图形,如 *.gif 、 *.jpg 或 *.png 文件,该图像构成用户操 作界面。 2) 隐藏在图像中的作用点集合。每个作用点控件都是一个 不同的 Web 元素。对于每个作用点控件,需要定义其形状
6.2 标准服务器端控件 6.2.3
RadioButton 和 RadioButtonList 控件
1. 单选按钮控件( RadioButton )
6.2 标准服务器端控件 6.2.3
RadioButton 和 RadioButtonList 控件
2. 单选按钮组控件( RadioButtonList )
6.2 标准服务器端控件 6.2.4
CheckBox 和 CheckList 控件
CheckBox (复选框)与 CheckList (复选框组)控件的 作用十分相似,都是用于向用户提供多选输入数据的控件。 用户可以在控件提供的多个选项中选择一个或多个。被选中 的对象中带有一个“√”标记, CheckBox 和 CheckList 控 件的外观如图 6-15 所示。
6.2 标准服务器端控件 6.2.5
ListBox 和 DropDownList 控件
ListBox (列表框)和 DropDownList (下拉列表框)控 件也是一种常见的用于向用户提供输入数据选项的控件,其 外观如图 6-15 和图 6-16 所示。
6-2
例
6.2 标准服务器端控件 6.2.6
FileUpload 控件
文件上传( FileUpload )控件,顾名思义是用于将文件从本 地计算机上传到远程 Web 服务器的控件,使用该控件可替代 ASP 程序中常用 FSO (文件系统对象),且 FileUpload 控 件具有更高的效率和安全性。 FileUpload 控件在工具箱的图 标为 。 如图 6-21 所示,从外观上看 FileUpload 控件有一个文 本框和一个【浏览】按钮控件组成,用户可直接在文本框中 输入希望上传的文件名(包括文件存放路径)。若用户在 Web 页面中单击控件的【浏览】按钮时,系统将自动弹出一 个“选择文件”对话框(类似与 Windows 的“打开”对话 框),通过该对话框用户可根据需要选择希望上传到远程 Web 服务器的文件。出于安全方面的考虑,不能将文件名预 先加载到 FileUpload 控件中。
6.2 标准服务器端控件 6.2.7
Table 控件
前面介绍过在 Web 页面中用于页面布局的 HTML 表格 控件,那是一种用于静态环境的布局工具。在工具箱“标 准”选项卡中也有一个 Table 控件,其图标为 。这是一个 Web 服务器端控件,使用该控件可更易于编程,用户可通过 程序代码方便地控制表格中显示的内容及表格的行、列数。 Tabel 控件除了具有 HTML 表格的一般属性,如 BackImageUrl (背景图片)、 BackColor (背景颜色)、 BorderStyle (边框样式)、 BorderColor (背景颜色)、 CellPadding (单元格内间距)、 CellSpacing (单元格之 间距离)、 GridLines (单元格框 线)、 Width (宽)、 Height (高)等,还具有两个关键 的子对象 TableRow 和 TableCell ,前者用于创建和设置表 格中的行,后者用于创建和设置表格中的列。通常可以通过 TableCell 对象的 Text 属性从单元格读取,或向其中写入数
6.2 标准服务器端控件 6.2.8
容器控件
所谓“容器”控件是指可以安放其他控件的控 件。 ASP.NET 2.0 提供有两种容器控件, PlaceHolder 和 Panel 控件。 PlaceHolder 控件用于在 Web 页面上保留一个位置,以 便在程序运行时向其中动态地添加其他控件,这对动态网页 的布局设计是十分有利的。 Panel 控件对应于 HTML 的 <div> 标记,其作用与 PlaceHolder 控件相似,可以将放置在其中的一组控件作为 一个整体来操作。最常用的是通过设置 Panel 的 Visible 属 性来控制这一组控件的显示或隐藏。
【 例 6-5】
6.2 标准服务器端控件 6.2.9
Calendar 控件
1. Calendar 控件的常用属性 2. Calendar 控件的主要事件 3. Calendar 控件应用实例 【 例 6-6】
6.2 标准服务器端控件 6.2.10
AdRotator 控件
AdRotator (广告)控件,可配合 XML 说明文件,在 页面中产生一个可动态显示图片的广告展现框。若将鼠标指 针指向图片,可显示出预设的广告词,单击图片可导航到预 设的 URL 地址。用户每次刷新页面广告展现框中的图片都会 有所不同,且不同图片出现的频率,可由 XML 文件中的设置 决定。
6.3 数据验证控件 6.3.1
数据验证控件概述
数据验证控件可以像其他 Web 服务器控件一样添加到 Web 页面中。不同的验证控件用于特定的检验类型,如范围 检查、模式匹配以及确保用户不会跳过必填字段的 RequierdFieldValidator 等。在实际应用中,通常将多个验 证控件附加到同一个输入控件(如文本框)上,从而实现多 方面控制用户输入的有效性。例如,可以指定文本框为必填 ,同时输入的数据只能是某特定范围内的数据等。 1. 数据验证控件的类型 ASP.NET 2.0 提供了 6 类数据验证控件,这些控件存放在 工具箱“验证”选项卡中。其名称及说明见表 6-13 。
6.3 数据验证控件 6.3.1
数据验证控件概述
6.3 数据验证控件 6.3.1
数据验证控件概述
2. 数据验证的处理机制 在处理用户输入时, Web 窗体将用户的输入传送给与 输入控件相关联的验证控件。验证控件检测用户的输入,并 设置属性以指示是否通过了验证。处理完所有的验证控件后 ,将设置 Web 窗体上的 IsValid 属性,该属性值为 True 表 示所有验证通过,否则该属性值为 False 。如果验证控件发 现用户输入的数据有错误,则出错信息可由该验证控件显示 到页面中,也可以由布局在页面其他位置的 ValidationSummary 控件,专门负责显示出错信息。 如果客户端使用的是 IE4.0 以上版本的浏览器,即支持 DHTML ,则验证控件可以使用客户端脚本进行数据验证, 由于减少了一次服务器的往返,所以使用客户端脚本验证的 效率更高一些。
6.3 数据验证控件 6.3.1
数据验证控件概述
3. 验证控件的通用属性
6.3 数据验证控件 6.3.2
必须项验证控件( RequiredFieldValidator )
RequiredFieldValidator 控件用于判断用户是否完成了必 须填写的输入数据。正常情况下验证控件在页面中是不显示 的,只有在出现了输入错误时,才会在控件中显示出错提示 信息。在页面布局时,一般可将验证控件放置在被验证控件 的旁边。 当执行验证时,若验证控件的初始值( InitialValue 属性 值)没有改变,则导致验证失败。 InitialValue 的初始默认 值为空字符串。为了避免用户输入若干空格来通过验证,系 统会在验证前自动调用 Trim() 方法,将字符串前后多于的空 格移除。也就是说被验证控件中不能输入完全由空格组成的 字符串。 例 6-8
6.3 数据验证控件 6.3.3
比较验证控件( CompareValidator )
CompareValidator 将输入控件的值与常数或其他输入控 件中的值进行比较,以确定这两个值是否与由比较运算符 ( == 、 != 、 < 、 > 等)指定的关系匹配。 例 6-9
6.3 数据验证控件 6.3.4
范围验证控件( RangeValidator )
RangeValidator 控件的作用是计算被验证控件的值,以 确定该值是否处于指定的最大和最小值(范围)之间。 使用 RangeValidator 控件可以检查用户的输入是否在指定 的范围之间,可以检查由数字对、字母对和日期对限定的范 围,范围边界(最大值和最小值)用常数表示。 例 6-10
6.3 数据验证控件 6.3.5 正则表达式验证控件 ( RegularExpressionValidator ) RegularExpressionValidator 控件用于计算输入控件的 值以确定该值是否与某个正则表达式所定义的模式相匹配。 在使用 RegularExpressionValidator 控件时应注意以 下几个问题: 1) 如果输入控件的值为空,则不调用任何验证函数且可以 通过验证,这通常需要使用必须项验证控件的配合,以避免 用户跳过某项的输入。
2) 除非浏览器不支持客户端验证,或禁用了客户端验证, 否则客户端验证和服务器端验证都要被执行。客户端的正则 表达式验证语法与服务器端略有不同。在客户端使用的是 JScript 正则表达式语法,在服务器端使用的是 Regex 语法。 由于 JScript 正则表达式语法是 Regex 语法的子集,故最好
6.3 数据验证控件 6.3.6
自定义验证控件 (CustomValidator)
CustomValidator 控件用于计算输入控件的值,以确定它 是否通过自定义的验证逻辑。例如,可以通过自定义的验证 逻辑来创建 CustomValidator 控件,以控制用户输入的数据 不能包含汉字。 例 6-11
6.3 数据验证控件 6.3.7
验证摘要控件( ValidatorSummary )
若页面中存在有很多各类验证控件,则可能出现大量提 示信息占用较多页面的情况,这对 Web 页面的美观性十分不 利。 VS 2005 提供的 ValidatorSummary 控件可以将页面中 所有验证控件的提示信息集中起来,在指定区域或以一个弹 出信息框的形式显示给用户。 ValidatorSummary 控件为页面中每个验证控件显示的错 误信息,是由每个验证控件的 ErrorMessage 属性确定。若 某验证控件没有设置 ErrorMessage 属性,则在 ValidatorSummary 控件中不显示该控件的错误信息。 ValidatorSummary 控件必须与其他验证控件一起使用, 可分别将各验证控件的 Display 属性设置为“ None” ,而 通过 ValidatorSummary 控件收集所有验证错误,并在指定
6.4 用户自定义控件 6.4.1
用户自定义控件概述
使用 Web 用户控件可根据程序的需要方便地定义控件 ,且在设计用户控件时所使用的编程技术与设计 Web 页面的 技术完全相同,为了确保用户控件不能作为一个独立的 Web 窗体来使用,用户控件文件名以“ .ascx” 为扩展名进行标 识。 在用户控件上可以使用标准 Web 窗体上相同的 HTML 控件和 Web 服务器控件。例如,希望创建一个网站导航栏用 户控件,则可将若干 ImageButton 控件通过 HTML 表格进 行布局,并创建这些 ImageButton 的事件处理程序即可。 用户控件页与 Web 窗体页主要有以下两点区别: 1) 用户控件页只能以 .ascx 为扩展名; 2) 在用户控件文件中不能包含 <html> 、 <body> 、 <from>
6.4 用户自定义控件 6.4.2
创建用户控件
6.4 用户自定义控件 6.4.3
在设计视图中添加用户控件
用户控件的界面和事件处理程序编写完毕后,还必须将 其放置在一个 Web 窗体页中才能使用。在设计视图中打开希 望添加用户控件的 Web 窗体页面,注意一定要将页面切换到 “设计”视图。 在解决方案资源管理器中将设计完毕的用户控件直接拖 动到页面适当的位置。窗体设计器能自动向 Web 页面添加 @Register 页面指示符,从此开始用户控件就成为了 Web 窗体的一个组成部分。此外,当用户控件被添加到 Web 窗体 中后,该控件的公共属性、事件和方法也将向 Web 窗体公开 ,并可以通过编程的方式来使用。 例 6-13
6.4 用户自定义控件 6.4.4
程序运行时动态添加用户控件
用户控件也可以在程序运行时通过代码动态地加载,这 样就能根据实际需要向页面中添加不同的用户控件,或通过 循环向页面中添加若干个相同的用户控件。
在实际应用中,通常需要在主 Web 页面中添加一个容 器控件 PlaceHolder ,作为用户自定义控件的“占位”控件。 在程序运行时通过代码创建一个用户控件的实例,而后将用 户控件添加到容器控件中。例如: protected void Page_Load(object sender, EventArgs e) { Control head = LoadControl(“header.ascx”); PlaceHolder1.Controls.Add(head);
6.4 用户自定义控件 6.4.5
公开构成控件的属性
组成用户控件的控件称为“构成控件”。这些控件通常 被声明为私有的,因此开发人员不能访问它们。如果想要使 将来的用户可以使用这些控件的属性,则必须将其公开。通 过创建用户控件中的自定义属性,并使用该属性的 Get 和 Set 访问器,影响构成控件的私有属性,就可以使构成控件 的属性得以公开。 公开构成控件属性需要进行以下 3 个操作。 1) 创建用户控件的公共属性。 2) 在此属性的 get 部分,编写用于检索要公开的属性值 的代码。 3) 在此属性的 set 部分,编写用于将此属性的值传递给构 成控件的公开属性的代码。
6.4 用户自定义控件 6.4.5
公开构成控件的属性
组成用户控件的控件称为“构成控件”。这些控件通常 被声明为私有的,因此开发人员不能访问它们。如果想要使 将来的用户可以使用这些控件的属性,则必须将其公开。通 过创建用户控件中的自定义属性,并使用该属性的 Get 和 Set 访问器,影响构成控件的私有属性,就可以使构成控件 的属性得以公开。 公开构成控件属性需要进行以下 3 个操作。 1) 创建用户控件的公共属性。 2) 在此属性的 get 部分,编写用于检索要公开的属性值 的代码。 3) 在此属性的 set 部分,编写用于将此属性的值传递给构 成控件的公开属性的代码。
第 7 章 ASP.NET 内置对象 本章讲述的主要内容 7.1 类与对象概述
7.8 Session 对象
7.2 类的字段与属性
7.9 Application 对象
7.3 ASP.NET 对象概述 7.4 Page 对象 7.5 Response 对象 7.6 Request 对象 7.7 Server 对象
7.1 类与对象概述 7.1.1
类和对象的概念
现实生活中的类是人们对客观对象不断认识而产生的 抽象的概念,而对象则是现实生活中的一个个实体。例如, 人们在现实生活中接触了大量的汽车、摩托车、自行车等实 体,从而产生了交通工具的概念,交通工具就是一个类,而 现实生活中的具体的汽车、摩托车、自行车等,则是该类的 对象。 可以把类比作一种蓝图,而对象则是根据蓝图所创建 的实例,可以把类比作生产模具,而对象则是由这种模具产 生的产品(实例)。所以人们又把对象叫做类的实例。类是 对事物的定义,而对象则是该事物本身。
7.1 类与对象概述 7.1.2
类与对象的本质
对象通过类进行声明,由于类本质上是一种数据类型 ,所以用类声明对象的方法与用基本数据类型声明对象的方 法基本相同。事实上,在 VS 2005 中像 int 、 float 等基 本数据类型也是特殊的类。那么,用基本数据类型可以声明 变量,用类类型也可以声明变量,只不过用类数据类型声明 的变量叫类的对象或类的实例。用同一个类可以声明无数个 该类的对象,这些对象具有相同的数据,相同的数据操作方 法,所不同的仅仅是数据的具体值。正如只要是人,就具有 人所具备的共同特点,如身高、体型等,不同的仅仅是高矮 胖瘦而已。
7.1 类与对象概述 7.1.3
类成员
在类的定义中,包含有各种类成员,概括起来类的成 员有两种:存储数据的成员与操作数据的成员。存储数据的 成员叫“字段”,操作数据成员又有很多种,如属性、方法 、构造函数和析构函数等。
7.2 类的字段与属性 7.2.1
定义一个类
在类定义中需要使用关键字 class ,其简单的定义格 式为: class
类名 { 类体 }
“ 类名”是一个合法的 C# 标识符,表示数据类型 (类类型)名称,“类体”以一对大括号开始和结束,在一 对大括号后面可以跟一个分号,也可以省略分号。类的所有 成员均在类体内声明。
7.2 类的字段与属性 7.2.1
定义一个类
在类定义中需要使用关键字 class ,其简单的定义格 式为: class
类名 { 类体 }
“ 类名”是一个合法的 C# 标识符,表示数据类型 (类类型)名称,“类体”以一对大括号开始和结束,在一 对大括号后面可以跟一个分号,也可以省略分号。类的所有 成员均在类体内声明。 1. 声明字段 2. 声明属性 3. 访问控制
7.2 类的字段与属性 7.2.2
声明与使用对象
定义类之后,可以用定义的类声明对象,声明对象后 可以访问对象成员。每一个类对象均具有该类定义中的所有 成员,正如每一个整型变量均可以表示同样的数值范围一样 。 1. 声明对象 声明对象的格式与声明基本数据类型的格式相同,其 语法格式为: 类名 对象名 ;
7.2 类的字段与属性 7.2.2
声明与使用对象
2. 访问对象 访问对象实质是访问对象成员,对对象变量成员的访 问使用“ .” 运算符。例如: cubiod1.Length = 5; cubiod1.Width = 3; cubiod1.High = 2; 上面的代码通过属性为对象 cubiod1 的字段赋值。在 实际应用中也可以使用对象变量为另一对象变量整体赋值。
7.3 ASP.NET 对象概述 ASP.NET 的早期版本 ASP 中就包含有 Page 、 Response 、 Request 等对象。而在 ASP.NET 2.0 中,这些对象仍然存在,使用的方法也大致相同。不同 的是这些对象改由 .NET Framework 中封装好的类来实现 ,并且由于这些对象是在 ASP.NET 页面初始化请求时自动 创建的,所以能在程序中任何地方直接调用,而无需对类进 行实例化操作。
7.4 Page 对象 7.4.1
Page 对象的属性
7.4 Page 对象 7.4.2
Page 对象的常用方法
7.4 Page 对象 7.4.3
Page 对象的常用事件
7.4 Page 对象 7.4.3
Page 对象的常用事件
例 7-1
7.5 Response 对象 7.5.1
Response 对象的常用属性
7.5 Response 对象 7.5.2
Response 对象的常用方法
7.5 Response 对象 7.5.3
使用 Response 对象
1. 使用 Write 方法 使用 Response 对象的 Write 方法可以将信息写入 HTML 输出内容流。 Write 方法的语法格式如下: Response.Write(string) ; 2. 使用 WriteFile 方法 例 7-2
7.6 Request 对象 7.6.1
Request 对象的常用属性
7.6 Request 对象 7.6.2
Request 对象的常用方法
Request 对象的常用方法有两个: 1) MapPath(VirtualPath) :该方法将当前请求的 URL 中的虚拟路径 VirtualPath 映射到服务器上的物理路径。参 数 VirtualPath 用于指定当前请求的虚拟路径(可以是绝对 路径,也可以是相对路径)。返回值为与 VirtualPath 对应 的服务器端物理路径。 2) SaveAs(filename, includeHeaders) :该方法将客 户端的 HTTP 请求保存到磁盘。参数 filename 用于指定文 件在服务器上保存的位置;布尔型参数 includeHearders 用于指示是否同时保存 HTTP 头。
7.6 Request 对象 7.6.3
使用 Request 对象
1. 使用 UserHostAddress 属性 2. 使用 QueryString 属性 3. 使用 Browser 属性 4. 使用 Form 窗体变量集合
7.7 Server 对象 7.7.1
Server 对象的常用属性
Server 对象的常用属性有: 1) MachineName 属性:该属性用于获取服务器计算机 的名称。 2) ScriptTimeout 属性:该属性用于获取或设置请求超 时的时间(秒)。
7.7 Server 对象 7.7.2
Server 对象的常用方法
7.8 Session 对象 7.8.1
Session 的工作原理
当用户请求一个 ASP.NET 页面时,系统将自动创建 一个 Session (会话),退出应用程序或关闭服务器时该 会话撤销。系统在创建会话时将为其分配一个长长的字符串 ( SessionID )标识,以实现对会话进行管理和跟踪。该 字符串中只包含 URL 中所允许的 ASCII 字符。 SessionID 具有的随机性和惟一性保证了会话不会冲突,也不会被怀有 恶意的人利用新 SessionID 推算出现有会话的 SessionID 。
7.8 Session 对象 7.8.2
Session 对象的常用属性及方法
Session 对象的常用属性
7.8 Session 对象 7.8.2
Session 对象的常用属性及方法
Session 对象的常用方法
7.8 Session 对象 7.8.2
Session 对象的常用属性及方法
Session 对象的事件 Session 对象有以下两个事件: 1) Start 事件:在创建会话时发生。 2) End 事件:在会话结束时发生。需要说明的是,当用户 在客户端直接关闭浏览器退出 Web 应用程序时,并不会触发 Session_End 事件,因为关闭浏览器的行为是一种典型的客 户端行为,是不会被通知到服务器端的。 Session_End 事件 只有在服务器重新启动、用户调用了 Session_Abandon() 方 法或未执行任何操作达到了 Session.Timeout 设置的值(超 时)时才会被触发。
7.8 Session 对象 7.8.3
向 Session 对象中存入数据
向 Session 对象中存入数据的方法十分简单,下面的语 句使用户单击按钮时将 3 个字符串分别存入 2 个 Session 对 象和 1 个 Application 对象中。 protected void Button1_Click(object sender, EventArgs e) { Session["myval1"] = " 这是 Session 传递的数据 1"; string strVal2 = " 这是 Session 传递的数据 2"; Session["myval2"] = strVal2; }
7.8 Session 对象 7.8.4
从 Session 对象中取出数据
下面的语句表示了当目标页面装入时如何从 Session 对 象中取出数据的方法。 protected void Page _Load(object sender, EventArgs e) { Label1.Text = (string)(Session[ "myval1"]); Label2.Text = (string)(Session[ "myval2"]); }
7.9 Application 对象 7.9.1
Application 对象和 Session 对象的区别
Application 对象和 Session 对象都可在服务器端保存 数据或对象,使用方法和常用属性、事件、方法也基本相同。 但 Application 对象中保存的信息是为所有来访的客户端浏览 器共享的,而 Session 对象保存的数据则是仅为特定的来访 者使用的。 例如,在河南的 A 用户和在河北的 B 用户同时访问某一 服务器,若 A 修改了 Application 对象中存放的信息, B 用 户在刷新页面后就会看到修改后的内容;但若 A 修改了 Session 对象中存放的数据, B 用户是感觉不到的。此时只 有 A 可以看到和使用这些数据。也就是说 Session 对象中存 放的是专用信息。
7.9 Application 对象 7.9.2
Application 对象的常用属性、方法和事件
1. Application 对象的常用属性和方法 由于 Application 对象中存放的信息是共有的,有可能 发生在同一时间内多个用户同时操作同一 Application 对象的 情况,为了避免此类问题导致的出错。 Application 对象增加 了 Lock() 方法和 UnLock() 两个方法,用于在使用 set 方法 更改 Application 对象值时将其锁定,在更改完毕后再解除锁 定。 2. Application 事件的常用事件 Application 对象的常用事件有如下两个: 1) Start 事件:该事件在应用程序启动时被触发。 2) End 事件: Application_End 事件在应用程序结束时
7.9 Application 对象 7.9.3
Application 对象中的数据存取
1. 向 Application 对象写入数据 在向 Application 对象中保存数据时可使用如下所示的 语法格式: Application[" 对象名 "] = 对象值 ; 或: Application.Add(" 对象名 ", 值 ); 2. 修改 Application 对象中的数据 修改已存在 Application 对象中的数据,需要使用 Set 方法并配合 Lock() 和 UnLock() 方法。
7.9 Application 对象 7.9.3
Application 对象中的数据存取
3. 读取 Application 对象中的数据 读取 Application 对象中数据的方法如下所示: string user; user = Application("username").ToString(); 注意: Application(" 对象名 ") 的返回值是一个 Object 类型的数据,操作时应注意数据类型的转换。 例 7-11
第 8 章 设计数据库应用网站 本章讲述的主要内容 8.1 数据库基础知识 8.2 使用数据库系统 8.3 SQL 查询基础 8.4 ADO.NET 简介 8.5 使用数据控件访问数据库 8.6 使用 ADO.NET 对象
8.1 数据库基础知识 8.1.1
有关数据库的概念
1. 数据库 2. 数据库管理系统 3. 数据库应用程序 4. 数据库系统
8.1 数据库基础知识 8.1.2
关系数据库
关系型数据库是根据表、记录和字段之间的关系进行数据 组织和访问的一种数据库,它通过若干个表( Table )来存储数 据,并通过关系( Relation )将这些表联系在一起。 近几年来,关系型数据库已成为数据库设计事实上的标准, 这不仅因为关系模型本省具有强大的功能,而且还由于它提供了 称为结构化查询语言 Structure Query Language ( SQL )的标 准接口,该接口允许以一致的和可以理解的方法来一起使用多种 数据库工具和产品。 在一个关系型数据库中可以包含若干张表,每张表又由若干 记录组成,记录由若干字段组成。表与表之间通过关系连接。
8.1 数据库基础知识 8.1.2
关系数据库
1. 关系型数据库的分类 关系型数据库一般可分为两类,一类是桌面数据库, 如 Access 、 Paradox 、 FoxPro 和 dBase 等。另一类是客 户 / 服务器数据库,如 SQL Server 、 Oracle 、 Sybase 等。 2. 表、记录和字段 表( Table )是一种数据库对象,由若干条描述客观 对象多个特征的记录( Record )也称为行( Row )组成。 表中每一列( Column )表示客观对象的同一特征点,也称 为字段( Field )。见表 8-1 和表 8-2 。
8.1 数据库基础知识 8.1.2
关系数据库
3. 关键字 关键字是表中某个或多个字段,可以是唯一的,也可 以是非唯一的。唯一关键字可以指定为主键,用来唯一标识 一条记录。 4. 索引 为了更快地访问数据,大多数数据库都使用关键字对 表进行索引。也就是按关键字对数据库进行排序,并建立一 张索引表,每个索引输入项指向该记录在数据库中的行。 5. 关系 数据库中可以包含多张表,表与表之间可以用不同的 方式相互关联。这样做可以充分利用数据库中现有数据,减
8.2 使用数据库系统 8.2.1
Microsoft Access
Access 数据库管理系统是 Microsoft Office 的一个 组件,是最常用的本地数据库之一。在 C# 中可以方便 地使用数据库对象,操作 Access 数据库。 1. 创建数据库 2. 创建数据表
8.2 使用数据库系统 8.2.2
Microsoft S QL Server
前面介绍的 Access 数据库属于桌面数据库,主要在 本地(本计算机)运行。在本章中将主要介绍另一类数 据库的使用,即客户机/服务器( Client / Server ) 数据库,如 SQL Server 、 Oracle 和 Sybase 数据库 等。通过使用这种数据库系统,用户可以方便地访问远 程数据信息,而且这种数据库系统的多用户性使得信息 共享成为现实。本节将以安装在 Windows 2000 Server 中的 SQL Server 2000 企业版数据库管理系统 为背景介绍其使用方法。 在 SQL Server 2000 的企业管理器中用户可以十分方 便地创建数据库,创建数据库包括有创建数据库结构、 创建表、创建相应的视图及存储过程等项工作。
8.2 使用数据库系统 8.2.2
Microsoft S QL Server
1. 创建 SQL Server 数据库 2. 在 SQL Server 中创建表 3. 使用 SQL Server 客户端工具
8.3 SQL 查询基础 SQL 是 Structured Query Language ( 结 构 化 查 询 语言)的缩写。表 8-4 中列举了常用的 SQL 语句。 表 8-4 SQL 的主要语句及说明
8.3 SQL 查询基础 8.3.1 查询语句 Select SELECT 语 句 主 要 用 于 从 数 据 库 中 返 回 需 要 的 数 据 集 , 其 语法格式为: SELECT select_list [INTO new_table_name] FROM table_list [WHERE search_conditions] [GROUP BY group_by_list] [HAVING search_conditions] [ORDER BY order_list [ASC|DESC]]
8.3 SQL 查询基础 8.3.2 插入记录语句 Insert 使用 Insert 语句可以向表中插入一条记录,该语句的语法格 式为: INSERT INTO 表名称 ( 字段名 ) VALUE( 字段值 ) 8.3.3 修改记录语句 Update 使用 Update 语句可更新(修改)表中的数据,该语句的语法 格式为: UPDATE 表名称 SET 字段名 = 值 WHERE 条件 8.3.4 删除记录语句 Delete 使用 DELETE 语句可以删除数据表中指定行,该语句的语法 格式为:
8.4 ADO.NET 简介 8.4.1 数据库通用接口 美国微软公司提供的数据库通用接口程序,经过了 ODBC→OLEDB→ADO→ADO.NET 几个发展阶段。 1. ODBC 通用数据库接口 ODBC(Open Database Connectivity ,开放数据库互 联) 2. ADO 通用数据库接口 ADO ( Active Data Object ,动态数据对象) 3. ADO.NET 概述 在 .NET 框架的 System.Data 命名空间及其子空间中有 一些类,这些类被统称为 ADO.NET 。使用 ADO.NET 可以方 便地从 Microsoft Access 、 Microsoft SQL Server 或其
8.4 ADO.NET 简介 8.4.2 ADO.NET 的数据模型 ADO.NET 采用了层次管理的结构模型,各部分之间的逻辑 关系如图 8-18 所示。
8.4 ADO.NET 简介 8.4.3 数据源控件简介 数据源控件的类型主要有以下几种。 1. AccessDataSource AccessDataSource 数据源控件是专门为连接 Microsoft Access 数据库而设计的。 2. SqlDataSource SqlDataSource 数据源控件是专门为连接 Microsoft SQL Server 数据库而设计的。 3. ObjectDataSource 4. XmlDataSource 5. SiteMapDataSource
8.5 使用数据控件访问数据库 8.5.1 使用 GridView 数据控件 GridView 控件用于配合数据源控件实现对数据库进行浏览 、编辑、删除等操作。数据源控件主要包括用于连接 Access 数据库的 AccessDataSource 和用于连接 SQL Server 数据库的 SqlDataSource 。 1. 添加数据源控件 2. 添加 GridView 控件 3. 设置 GridView 控件的属性
8.5 使用数据控件访问数据库 8.5.2 使用 FormView 数据控件 FormView 控件与前面介绍过的 GridView 控件相似,也 是用于浏览或操作数据库的数据控件。它与 GridView 相比主 要的不同在于显示在 FormView 中的数据记录是分页的,即 每页只显示一条记录。
8.5 使用数据控件访问数据库 8.5.3 使用 Repeater 控件 Repeater 控件是一个数据绑定列表控件(数据浏览控件) ,它允许通过为列表中显示的每一项重复指定的模板来自 定义数据显示布局。 Repeater 控件是一个基本模板数据 绑定列表,它并没有内置的布局或样式,因此必须在这个 控件的模板内显式声明所有的 HTML 布局标记、格式设置 及样式标记等。也正因为此, Repeater 控件具有更好的 灵活性,但该控件没有内置的选择和编辑功能。 1. Repeater 控件的模板 2. 使用 Repeater 控件 例 8-2
8.5 使用数据控件访问数据库 8.5.4 使用 DetailsView 控件 DetailsView 控件顾名思义是用于查看细节信息的控件, 其作用主要是根据用户在父表中项的选择,在 DetailView 控 件中显示子表的信息。 1. 使用 DetailsView 控件查看子表信息 例 8-3
2. 使用 DetailsView 控件操作 SQL Server 数据库 例 8-4
8.6 使用 ADO.NET 对象 8.6.1 ADO.NET 对象概述 在 ADO.NET 中数据集与数据提供器是两个非常重要, 而又相互关联的核心组件。它们二者之间的关系如图 8-45 所 示。
8.6 使用 ADO.NET 对象 8.6.2 数据集( DataSet ) 数据集相当于内存中暂时存放的数据库,它不仅可以包 括多张数据表,还可以包括数据表之间的关系和约束。允许将 不同类型的数据表复制到同一个数据集中,甚至还允许数据表 与 XML 文档组合到一起协同操作。创建数据集对象的语法格 式为: DataSet 对象名 = new DataSet(); 或: DataSet 对象名 = new DataSet(" 表名 ")
8.6 使用 ADO.NET 对象 8.6.3 数据表( DataTable ) 数据表是用来存放数据的。一个数据集中可能包括多张 数据表,每张数据表又可包括多个行和列。数据表的创建有两 种方式: 1) 将数据夹在到数据集时,系统将自动创建一些数据表对 象。 2) 以编程的方式创建 DataTable 对象,然后将该对象添 加到数据集的 Tables 集合中。 提取数据集中数据表的语法格式为: DataTable 表对象名 = 数据集名 . 数据表名;
8.6 使用 ADO.NET 对象 8.6.4 数据行( DataRow ) 数据行是给定数据表中的一条记录(表中的一行),它 可能代表一个学生、一位用户或一件商品的相关数据集合。 数据行对象的方法提供了对表中数据的操作(如,插入、删除 、更新或查看等)。提取数据表中数据行的语法格式为: DataRow 数据行对象名 = 数据表对象名 .Rows[n];
8.6 使用 ADO.NET 对象 8.6.5 数据列( DataColumn ) 数据表中的数据列(也称为“字段”)表示了数据表的 结构。例如,可以用它确定列中的数据类型和大小,还可以对 其属性进行设置。例如,确定列中数据是否是只读的、是否是 主键、是否允许空值等。还可以让列在一个初始值的基础上按 自定义步长值自动增加。 获取某列的值需要在数据行的基础上进行,其语法格式如下: string dc = dr.Columns[" 字段名 "].ToString(); 或: string dc = dr.Column[index].ToString();
8.6 使用 ADO.NET 对象 8.6.6 数据关系( DataRelation ) 表之间的关系由相关的列定义。在关系型数据库中,关 系是指两个表之间外键约束的组合。为了将一张表与另一张表 联系起来,可以简单地创建一个 DataRelation ,它将指出表 中的哪一列与另一表中的哪一列相关联。
8.6 使用 ADO.NET 对象 8.6.7 Connection (连接) Connection 类提供了对数据源连接的封装。类中包括连接 方法及描述当前连接状态的属性。在 Connection 类中最重要 的属性是 ConnectionString (连接字符串),该属性用来 指定服务名称、数据源信息及其他登录信息。 ConnectionString 中有两个重要的重要的部分:字符串 的内容和数据提供器名称。 字符串内容中包含有“ DataSource” (数据 源)、“ Initial Catalog” (默认连接数据库)及用于描述 用户身份的“ User ID” 和“ Password” 。 例 8-5
8.6 使用 ADO.NET 对象 8.6.8 Command (命令) Command 对象可以在数据源中执行 SQL 语句或存储程序 ,并从数据源返回结果。 Command 对象常用的构造函数包 括两个重要的参数,一个是要执行的 SQL 语句,另一个是已 建立的 Connection 对象。 1. ExecuteNonQuery 方法 该方法对 Connection 对象建立的连接进行不返回任何 行的查询,如 Updeae (更新)、 Delete (删除)和 Insert (插入),该方法返回一个整型( Integer )数据,表 示受查询影响的行数。 2. ExecuteReader 方法 对 Connection 对象建立的连接执行一个 CommandText 属性中定义的命令,返回一个仅向前的、只
8.6 使用 ADO.NET 对象 8.6.8 Command (命令) 3. ExecuteScalar 方法 该方法对 Connection 对象建立的连接执行 CommandText 属性中定义的命令,但只返回结果集中的第 1 行第 1 列的值。
8.6 使用 ADO.NET 对象 8.6.9 DataAdapter (数据适配器) 1. DataAdapter 对象常用属性及方法 该对象包含有 SelectCommand (查 询)、 InsertCommand (插入)、 UpdateCommand (更新)和 DelectCommand (删除)四个属性,用来定义 处理数据存储中数据的命令,并且每个命令都是对 Command 对象的一个引用,可以共享同一个数据源。 该对象常用的方法有以下几个。 1) Fill 方法:该方法用来执行 SelectCommand ,用数据 源的数据填充 DataSet 对象。 2) FillSchema 方法:该方法使用 SelectCommand 提取 数据源中表的架构,并根据相应的约束在 DataSet 对象中创 建一个空表。
8.6 使用 ADO.NET 对象 8.6.9 DataAdapter (数据适配器) 2. 使用 DataAdapter 对象浏览数据库 例 8-9
8.6 使用 ADO.NET 对象 8.6.9 DataAdapter (数据适配器) 3. 使用 DataAdapter 对象操作数据库 SQL 语句可以通过以下两种方式传递给 DataAdapter 对 象: 1) 通过 DataAdapter 对象的构造函数执行 SQL 语句。 例如,下列语句在声明一个 DataAdapter 对象 da 的同 时,指定 da 对象要执行 strSQL 字符串变量表示的 SQL 语句 ,要使用 Connection 对象 conn 表示的数据库连接。 OleDbDataAdapter da = new OleDbDataAdapter(strSQL, conn); 2) 通过 DataAdapter 对象的 4 个常用属性执行 SQL 语 句。
8.6 使用 ADO.NET 对象 8.6.10 DataReader (数据读取器) 1. DataReader 对象的常用属性及方法 OleDbDataReader 和 SqlDataReader 对象常用的属性 和方法有以下几个。 1) FieldCount 属性 2) Read() 方法 3) GetValue() 方法 4) GetValues() 方法 5) NextResult() 方法 6) Close() 方法 2. 使用 DataReader 对象
例 8-11
8.6 使用 ADO.NET 对象
8.6.11 DataView (数据视图) DataView 表示用于排序、筛选、搜索、编辑和导航的 DataTable 的,可绑定数据的自定义视图。使用 DataView 可以 获取表中具有不同排序顺序的数据,也可以按行状态或基于过 滤器表达式来过滤数据,以声称 DataTable 中数据的子 集。 DataTable 也有一个 DefaultView 的属性,该属性返回表的 默认 DataView 。如果希望在表上创建自定义视图,只需在 DefaultView 返回的 DataView 上设置 RowFilter (行过滤)即可。 DataView 对象通过调用 DataView 类的构造函数来创建,其语 法格式如下: DataView 对象名 = new DataView(); 或: DataView 对象名 = new DataView(table); 或: DataView 对象名 = new DataView(table, rowfilter, sort, rowState);
8.6 使用 ADO.NET 对象 8.6.11 DataView (数据视图) 1. DataView 对象的常用属性 2. DataView 对象的常用方法 3. 使用 DataView 对象 例 8-12
第 9 章 创建和使用 Web Service 本章讲述的主要内容 9.1 Web Service 简介 9.2 创建 Web Service 9.3 在 ASP.NET 应用程序中调用 Web Service 9.4 在 Windows 应用程序中调用 Web Service
9.1 Web Service 简介 9.1.1
了解 Web Service
Web Service 由 4 个组成部分,分别是 Web 服务 ( Web Service 自身),服务的提供方( Service Provider ),服务的请求方( Service Requester )和 服务的注册机构( Service Registry )。通常我们将服务 的提供方、服务的请求方和服务的注册机构称为 Web Service 的三大角色。这三大角色及其行为共同构成了图 9-1 所示的 Web Service 的体系结构。
9.1 Web Service 简介 9.1.2
Web Service 的相关标准和规范
1. XML 和 XSD 2. SOAP 协议 3. WSDL 协议 5. 远程过程调用( RPC )与消息传递
9.2 创建 Web Service 9.2.1
创建 Web Service 项目
创建一个 Web Service 项目的方法与创建一个 ASP.NET 网站的方法基本一致,可在 VS 2005“ 起始 页”中单击创建“网站”,在图 9-2 所示的对话框中选择 “ ASP.NET 服务”模板,并填写站点文件的保存位置后单 击【确定】按钮。
9.2 创建 Web Service 9.2.2
编写实现 Web Service 功能的代码
9.2.3
测试 Web Service
9.3 在 ASP.NET 中调用 Web Service 9.3.1
添加 Web 引用
在“解决方案资源管理器”窗口空白处单击鼠标右键 ,在弹出的快捷菜单中执行“添加 Web 引用”命令,在对 话框 URL 栏中输入 Web Service 所在站点及文件名。 9.3.2
编写调用代码
WebReference.Service sv1 = new WebReference.Service(); DataSet ds = new DataSet(); ds = sv1.GetDataSet(); GridView1.Caption = " 员 工 工 资 表 "; GridView1.DataSource = ds; GridView1.DataBind();
9.4 在 Windows 中调用 Web Service 9.4.1
创建能接收参数的 Web Service
使用 Web Service 不但可以读取数据库中的数据返回 到客户端,也可以接收由客户端传递过来的数据进行某种计 算或处理,最后将结果返回到客户端。 9.4.2
创建调用 Web Service 的 Windows 程序
9.4 在 Windows 中调用 Web Service 9.4.1
创建能接收参数的 Web Service
使用 Web Service 不但可以读取数据库中的数据返回 到客户端,也可以接收由客户端传递过来的数据进行某种计 算或处理,最后将结果返回到客户端。 9.4.2
创建调用 Web Service 的 Windows 程序
第 10 章
发布 ASP.NET 网站
本章讲述的主要内容 10.1 在 Web 服务器中配置 IIS 10.2 创建 FTP 远程管理账号 10.3 发布 ASP.NET 网站 10.4 使用 Web 安装项目部署应用程序
10.1 在 Web 服务器中配置 IIS 10.1.1
为站点准备一个 IP 地址
任何一个站点能够被 Internet 或 Intranet 中其他用 户访问的最基本前提是该站点拥有一个固定的 IP 地址或域 名。如果在服务器中存在多个站点,可能需要在一块网卡上 创建多个 IP 地址, Windows Server 2003 允许为同一块 网卡设置多个 IP 地址,但设置数量过多将影响系统的稳定 性。 10.1.2
创建站点主目录
每个 Web 站点必须有一个“主目录”。该目录实际 上是位于服务器上存放站点所有文件的文件夹,可以在服务 器端通过 Windows 资源管理器创建该文件夹。但要求文件 夹所处的驱动器最好是 NTFS 分区。“主目录”是 Web 站 点的“根”目录,映射为站点的 IP 或域名。当用户使用不 带文件名的 URL 访问站点时,请求将自动指向该目录下的
10.1 在 Web 服务器中配置 IIS 10.1.3
配置 IIS
使用 IIS 管理器创建 Web 站点可以通过两个途径实现 :使用“网站创建向导”或使用导入网站配置文件的方法。 常用的是通过向导创建 Web 站点的方法。
10.2 创建 FTP 远程管理账号
在 IIS 中创建了发布 ASP.NET 网站需要的站点后,还 需要为用户提供一个用于远程上传文件的 FTP 服务器账号。 这就需要在运行 IIS 服务的 Web 服务器中还应同时运行有 一个 FTP 服务器,该服务器负责将不同用户上传的文件保 存到不同的文件夹中,而这个文件夹一般就是站点的主目录。 目前使用较为广泛的是 Serv-U FTP 服务器系统。
10.3 发布 ASP.NET 网站 10.3.1 使用 FTP 方式发布网站
10.3 发布 ASP.NET 网站 10.3.2
发布网站到本地文件夹
10.4 使用 Web 安装项目部署应用 程序 10.4.1
创建与生成 Web 安装程序
所谓 Web 安装程序,类似于常用的 Windows 安装程 序。用户可在服务器上运行安装包中的 setup.exe 文件启 动安装向导,并在向导的指引下一步步地将 ASP.NET 2.0 网站发布到 Web 站点中。 10.4.2
部署安装项目到 Web 服务器
将前面生成的安装程序通过光盘、移动硬盘、 U 盘或 网络传送到 Web 服务器中,双击安装包中 setup.exe 文件 启动安装向导。 安装过程与其他 Windows 应用程序的安装过程十分 相似,绝大多数步骤均可取系统提供的默认值,只是在出现 图 10-25 所示的“选择安装地址”对话框时,站点默认值 为 IIS 的“默认 Web 站点”,一般是 c:\intpub\wwwroot