Web应用程序开发技术.ppt
第6章.NET Web应用程序开发技术,(学时数:10学时),学习要点:,1掌握C#语言编程技术2了解ASP.NET的运行模式3熟悉ASP.NET的服务器对象4掌握ASP.NET基本控件的使用5学会配置Web.config文件6掌握ADO.NET数据库访问技术7学会使用VS2005创建Web服务8掌握进行.NET控件开发的技术,.NET Web应用程序开发技术,要学好ASP.NET的编程,必须掌握一种编程语言。本章将首先介绍C#语言,为读者编程提供参考(详细的C#编程方法请看专门书籍);然后介绍了主要Web服务器标准控件、服务器端验证控件和ASP.NET内置服务器对象等的使用,介绍了Web.config文件的作用和常用配置参数;重点介绍了ADO.NET数据库访问技术以及执行存储过程、数据库的事务处理、跨数据库访问、数据绑定技术等内容;给出了创建和访问Web服务的实例;以案例方式对.NET中的代码重用实现技术,包括Web开发中的类库构建与访问、Web自定义控件和工具箱控件开发等进行了初步介绍;最后实例演示了如何在 ASP.NET中进行XML编程。,第6章.NET Web应用程序开发技术,6.1 C#语言初步6.2 常用ASP.NET控件的使用6.3 Web.config文件的配置6.4 ASP.NET内置服务器对象与Global.asax文件6.5 ADO.NET数据库访问技术6.6 用VS2005创建和访问Web服务实例6.7 Web开发中的类库构建与访问6.8 Web控件开发实例6.9 ASP.NET中XML编程基础,6.1 C#语言初步,6.1.1 C#程序的基本结构6.1.2 C#中的数据类型6.1.3 C#变量声明及其初始化6.1.4 C#表达式6.1.5 C#控制语句6.1.6 C#类声明,6.2 常用ASP.NET控件的使用,服务器端标准控件服务器端验证控件6.2.3 服务器控件使用注意事项6.2.4 服务器端数据访问控件,6.4 ASP.NET内置服务器对象与Global.asax文件,6.4.1 ASP.NET内置服务器对象6.4.2 Global.asax 文件,6.5 ADO.NET数据库访问技术,6.5.1 Connection对象6.5.2 Command对象6.5.3 DataReader对象6.5.4 Dataset对象与DataAdapter对象执行存储过程6.5.6 数据库事务处理跨数据库访问数据绑定技术,6.7 Web开发中的类库构建与访问,在Web开发中构建一个类库6.7.2 在Web开发中访问类库,6.8 Web控件开发实例,建立用户自定义控件工具箱控件的创建与使用,6.1.1 C#程序的基本结构,C#是由C和C+发展而来的面向对象和类型安全的编程语言。C#读作C Sharp,它和JAVA非常相近,其目标在于把Visual Basic的高生产力和C+本身的能力结合起来。下面我们通过一个C#语言的简单例子来了解一些概念和用C#语言编写程序的方法。例6.1:using System;class Hello static void Main()Console.WriteLine(Hello,world);,下面对这个程序进行一些说明:1)C#程序的源代存储在扩展名为.cs的文件中;2)using System 引用名称空间。名称空间是在Microsoft.NET类库中提供的。使用“using”命令后,就可以无障碍地使用名称空间中的各种类型员。例如System名称空间下有一个IO名称空间,IO名称空间下又有一个File名称空间,现在我们要使用该空间则在引用的时候可以写成,3)Main方法是类Hello中的一个成员,它有static的说明符,所以它是类Hello中的一个方法而不是此类中的实例。Main方法是应用程序的主入口点,也称作开始执行应用程序的方法。4)C#语言编译器CSC.EXE只是将程序员编写的代码编译成 MSIL(Microsoft Intemediate Language)中间语言。中间语言在安装时被运行库编译成本机代码或者首次运行时被实时编译。因此例6.1中的hello.exe只是一个由中间语言可执行文件头组成的可移植执行文件。下面我们从以下几个方面对C#语言进行详细介绍。,6.1.2 C#中的数据类型,C#支持两种类型:数据类型和引用类型。数据类型和引用类型的区别在于,数据类型变量直接包含它们的数据,而引用类型变量是存储对于对象的引用。对于引用类型,有可能两个变量引用相同的对象,因而可能出现对一个变量的操作影响到其它变量所引用对象的情况。对于数据类型,每个变量都有它们自己对数据的拷贝,所以不太可能因为对一个进行操作而影响到其它变量。,6.1.3 C#变量声明及其初始化,我们结合表6-1来介绍数据类型变量声明及其初始化表6-1:,C#中有静态变量、引用参数、数组变量、实例变量、值参数、输出参数和局部变量7种变量类型。具体参照下表,6.1.4 C#表达式,C#的表达式大致包含了算术表达式、赋值表达式、关系表达式和逻辑表达式。(1)算术表达式 用算术操作符把数值连接在一起的、符合C#语法的表达式称为算术表达式。算术操作符包括+、-、*、/、%、+、-。,(2)赋值表达式 C#赋值操作符的运算规则下表所示:,(3)关系表达式=、!=、=等操作符称为关系操作符。用关系操作符把运算对象连接起来并符合C#语法的式子称为关系表达式。关系表达式要么返回true要么返回false。(4)逻辑表达式&(and)、|(or)和!(not)操作符称为逻辑操作符。用逻辑操作符把运算对象连接起来并符合C#语法的式子称为逻辑表达式。,6.1.5 C#控制语句,C#中控制语句主要包括分支和循环语句。分支语句有3种:1)三元运算符,例如:a=(b5)?100:10表示b5时a=100,否则a=10;2)if语句;3)switch语句。循环语句有4种:1)已知步长的for语句;2)foreach语句;3)while语句;4)do while语句。它们的语法结构如表6-4所示。其中switch语句可一次将测试变量与多个值比较,而if仅仅测试一个条件。对于循环语句可用break和continue语句决定是否跳出循环或继续执行循环。foreach语句可以遍历一个集合中的所有元素。,6.1.6 C#类声明 类是一种将数据成员、函数成员和嵌套类型等进行封装的数据结构。它在面向对象基础上引入了接口、属性、方法、事件等组件特性。其数据成员可以是常量或域,函数成员可以是方法、属性、索引、事件、操作符或静态构造函数和析构函数。构造函数在创建对象时被自动调用,用来执行对象的初始化操作,其函数名总是与类名相同。析构函数在释放对象时被调用,用来删除对象前做一些清理工作。类的访问修饰符有五种可能形式,如下表所示:,下面简要介绍类成员的有关概念。,(1)常数 一个常数是一个代表常数值的类成员即某个可以在编译时计算的数值。只 要没有循环从属关系,允许常数依赖同一程序中的其它常数。(2)域 域是一个代表和某对象或类相关的变量的成员。域可以是静态的。只读域 可以用来避免错误的发生。对于一个只读域的赋值,只会在相同类中的部 分声明和构造函数中发生。(3)方法 方法是一个执行可以由对象或类完成的计算或行为的成员。方法有一个形 式参数列表(可能为空),一个返回数值(或void),并且可以是静态也 可以是非静态。静态方法要通过类来访问。非静态方法,也称为实例方 法,通过类的实例来访问。方法可以被重复调用,这意味着只要有一个唯一的签名,多个方法可能有 相同的名称。方法的签名包括方法、数据、修饰符和它的形式参数的各种 类型的名称。方法的签名不包括return类型。,(4)属性 属性是提供对对象或类的特性进行访问的成员。属性的例子包括字符串的长度、字体的大小、窗口的焦点、用户的名字等等。属性是域的自然扩展。两者都是用相关类型成员命名,并且访问域和属性的语法是相同的。然而,与域不同,属性不指示存储位置。作为替代,属性有存取程序,它指定声明的执行来对它们进行读或写。属性是由属性声明定义的。属性声明的第一部分看起来和域声明相当相似。第二部分包括一个get存取程序和一个set存取程序。(5)事件 事件是使得对象和类提供通知的成员。一个类通过提供事件声明来定义一个事件,这看起来与域和事件声明相当类似,但是有一个event关键字。这个声明的类型必须是delegate类型。(6)操作符 操作符是一个定义了可以用来使用在类的实例上的表达式。(7)索引器 索引器(indexer)是使得对象可以像数组一样被索引的成员。属性使类似域的访问变得可能,索引器使得类似数组的访问变得可能。索引器的声明类似于属性的声明,最大的不同在于索引器是无名的(由于this是被索引,所以用于声明中的名称是this)。class或struct只允许定义一个索引器,而且索引器总是包含单个索引参数。索引参数在一对方括号中提供,用于指定要访问的元素。,(8)实例构造函数 实例构造函数是实现对类中实例进行初始化的行为的成员,是一种特殊的方法。它与类同名,能获取参数,但不能返回任何值。每个类都必须至少有一个构造函数。如果类中没有提供构造函数,那么编译器会自动提供一个没有参数的默认构造函数。(9)析构函数 析构函数(destructor)是实现破坏一个类的实例的行为的成员。析构函数完成对象被垃圾回收时需要执行的整理工作,在碎片收集时会被自动调用。在C#中,没有提供一个delete操作符,由运行库控制何时摧毁一个对象。析构函数的语法是首先写一个符号,然后跟上类名。析构函数不能有参数,不能带任何访问修饰符(比如public),而且不能被调用。不能在一个struct中声明一个析构函数。(10)静态构造函数 静态构造函数是实现对一个类进行初始化的行为的成员。静态构造函数不能有参数,不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用。,(11)继承 继承(Inheritance)是面向对象的一个关键概念,它描述了类之间的一 种关系。假如多个不同的类具有大量通用的特性,而且这些类相互之间的关系非常清晰,那么使用继承就能避免大量重复的工作。类支持单继承,System.Object类是所有类的基类。所有类都是隐式地从System.Object类派生而来的。方法、属性和索引器都可以是虚拟(virtual)的,这意味着他们可以在派生的类中被覆盖(override)。可以通过使用abstract关键字来说明一个类是不完整的,只是用作其它类的基类。这样的类被称为抽象类。抽象类可以指定抽象函数非抽象派生类必须实现的成员。(12)接口 接口定义了一个连接。一个类或结构必须根据它的连接来实现接口。接口可以把方法、属性、索引器和事件作为成员。类和结构可以实现多个接口。因为通过外部指派接口成员实现了每个成员,所以用这种方法实现的成员称为外部接口成员。外部接口成员可以只是通过接口来调用。,(13)委派 委派(delegates)是指向一个方法的指针。委派与C+中的函数指针相似,与函数指针不同委派是类型安全并且可靠的。委派是引用类型,它从公共基类:System.Delegate派生出来。一个委派实例压 缩了一个方法-可调用的实体。对于静态方法,一个可调用实体由类和类中的 静态方法组成。委派的一个有趣而且有用的特性是它不知道或不关心与它相关的对象的类型。对象所要做的所有事情是方法的签名和委派的签名相匹配,这使得委派很适合“匿名”调用,而这是个很有用的功能。定义和使用委派分为三步:声明、实例化和调用。用delegate声明语法来声明委派:delegate void SimpleDelegate();声明了一个名为SimpleDelegate的委派,它没有任何参数并且 返回类型为void。(14)枚举 枚举类型的声明为一个符号常数相关的组定义了一个类型名称。枚举应用于“多选择”的场合,运行时间是由在编译时所知道的固定的选择数目所决定。因为使用枚举可以使代码更可读还可以自归档,所以使用枚举比使用整数常数要好。代码的自归档特点也使得开发工具可以帮助编写代码和进行一些其它的“设计者”行为。在本小节最后,我们给出一个范例,6.2 常用ASP.NET控件的使用,ASP.NET控件主要分为以下八类,如表所示,服务器端标准控件,(1)Label和Literal控件 使用 Label 控件在网页的设置位置上显示文本,可以通过 Text 属 性自定义显示文本。Text属性中可以包含其它HTML元素。Literal 控件和Label控件类似,但它不可向文本中添加任何 HTML 元素。因此,Literal 控件不支持包括位置属性在内的任何样式属 性。转换成客户端HTML代码后,Literal则是什么标记都不带,但 Literal 控件允许指定是否对内容进行编码。通常情况下,当希望 文本和控件直接呈现在页面中而不使用任何附加标记时,可使用 Literal 控件。(2)TextBox文本框控件 该控件用于获取用户输入的文本或显示文本。Text控件常用的 属性如下表所示。,(3)Image控件 该控件是用来插入图片的,常用的属性如下表所示。,(4)BUTTON、LINKBUTTON、IMAGEBUTTON控件 这三个控件分别表示普通按钮、超链接形式的按钮和图像按钮。每当用户单击按钮时,即调用CLICK事件处理程序。这三个控件常用的属性如下表所示。,CommandName、CommandArgument 使用范例,(5)HyperLink控件 该控件用于制作文本或图片超级链接。常用的属性下表所示。,(6)RadioButton单选按钮 该控件为用户提供由两个或多个互斥选项组成的选项集。当用户选择某单选按钮时,同一组中的其它单选按钮不能同时被选定。当单击RadionButton按钮时,其Checked属性设置为true,并且调用Click事件处理程序。当Checked属性的值更改时,将引发CheckedChanged事件。用户可以通过用Text属性设置控件内显示的文本。RadioButton控件常用的属性如下表所示。,(7)CheckBox复选框 该控件通常是成组使用来完成多重选项的目的,Checkbox控件常用的属性如表所示。,CheckBox控件 使用范例,(8)DropDownList控件 DropDownList控件使用户可以从下拉列表框中进行选择。DropDownList控件常用属性及说明如下表所示。,DropDownList控件使用范例,(9)ListBox列表框 列表框通过显示多个选项供用户选择达到与用户对话的目的。ListBox控件常用的属性如下表所示。,(10)FileUpload文件上载控件 该控件可实现让用户在客户端选择一个文件,然后放到Web服务器的某个指定的文件夹下。FileUpload文件上载控件使用范例(11)Panel和Placeholder控件 Panel和Placeholder控件都属于容器控件。容器控件是指该控件可以动态容纳其它控件或HTML元素。要在运行时刻向Web页面中动态添加内容,利用容器控件即可实现动态添加内容到Web页中。Panel 和 Placeholder 控件(占位控件)转换成客户端HTML代码后,呈现为 div 元素。Placeholder Web 服务器控件可以将空的容器控件放置到页内,然后在运行时动态添加、删除子元素等。该控件只呈现其子元素,不具有自己的基于 HTML 的输出。Panel服务器控件最终在客户端呈现为div元素,但在Web开发时允许用户在该控件中添加其它控件,而且在运行过程中也允许动态添加控件。,6.2.2 服务器端验证控件 服务器端验证控件是ASP.NET控件中新产生的一类验证控件。当用户输入错误时,验证控件可以显示错误信息。验证控件在正常工作情况下是不可见的,只有当用户输入数据有误时,它们才是可见的。在具体介绍每个控件之前先了解一下它们的公共属性。验证控件的公共属性如下表所示。,服务器端验证控件包含RequiredFieldValidator、RangeValidator、RegularExpressionValidator、CompareValidator、CustomValidator、ValidationSummary六种验证控件。(1)RequiredFieldValidator控件 该控件又称非空验证控件,常用于文本输入框的非空验证。若在网页上 使用此控件,则当用户提交网页到服务器端时,系统自动检查被验证控件的输入是否为空。如果为空,则网页显示错误信息。(2)RangeValidator控件 该控件又称范围验证控件。当用户输入不在验证范围内的值时将印发页 面错误。该控件提供Integer、String、Date、Double和Currency五种验证。(3)RegularExpressionValidator控件 该控件又称正则表达式验证控件,它的验证功能比非空验证控件和范围 验证控件更强大,用户可以自定义或书写自己的验证表达式。(4)CompareValidator控件 该控件又称比较验证控件,主要用来验证TextBox控件内容或者某个控件的内容与某个固定表达式的值是否相同。,(5)CustomValidator控件 该控件又称自定义控件,它使用自定义的严整函数来使用验证方式。CustomValidator控件与其它验证控件的最大区别是该控件可以添加客户端验证 函数和服务器端验证函数。客户端验证函数总是在ClientValidatorFunction属性 中指定的,而服务器端验证函数总是通过OnServerValidate属性来设定,并指定为ServerValidate事件处理程序。(6)ValidationSummary控件 该控件又称错误总结控件,主要是收集本页中所有验证错误信息,并将它们组织好后显示出来。,6.2.3 服务器控件使用注意事项,使用VS2005进行Web开发的初学者很容易产生对服务器控件的依赖性,几乎所有Web页面都采用服务器控件,HTML控件(客户端控件)被束之高阁,当然这是一种简便的编程方法,但却是一种不考虑运行效率的做法。我们在本节开头已介绍了客户端控件和服务器控件的区别。服务器控件意味着要消耗更多的网络带宽和服务器资源,而客户端控件的处理逻辑全部在浏览器中进行。因此不能养成使用服务器控件的习惯性思维,在使用控件的时候有必要思考一下采用客户端控件的可能性。,6.2.4 服务器端数据访问控件,数据访问控件根据所实现的功能分为两大类:数据源控件和数据绑定控 件。数据源控件可实现对不同数据源的数据访问,数据绑定控件主要用于以 多种方式显示数据。数据源控件和数据绑定控件如下表所示。,(接上表),数据源控件分为两种:普通数据源控件和层次化数据源控件(树型结构)。普通数据源控件包括SqlDataSource、ObjectDataSource、AccessDataSource主要检索带有行和列的基于数据表的数据源;层次化数据源控件包括XmlDataSource和 SiteMapDataSource,主要检索包含层次化数据的数据源。(1)SqlDataSource控件 SqlDataSource控件可以用来从任何OLEDB 或者符合ODBC的数据源中检索数据,能够访问目前主流的数据库系统。该控件常用的属性及说明如下表所示。,6.2.4.1 数据源控件,(2)AccessDataSource控件 AccessDataSource 是.NET提供了一种访问Access数据库的专用数据源控件,该控件能够快速连接Access数据库,并且通过SQL语句等对数据库记录实现操作。该控件常用的属性及说明如下表所示。,(3)ObjectDataSource控件,多数 ASP.NET 数据源控件,如 SqlDataSource等,都在两层应用程序层次结构中使用。在该层次结构中,表示层(ASP.NET 网页)可以与数据层(数据库和XML 文件等)直接进行通信。但是,常用的应用程序设计原则是,将表示层与业务逻辑相分离,而将业务逻辑封装在业务对象中。这些业务对象在表示层和数据层之间形成一层,从而生成一种三层应用程序结构。ObjectDataSource 控件通过提供一种将相关页上的数据控件绑定到中间层业务对象的方法,为三层结构提供支持。在不使用扩展代码的情况下,ObjectDataSource 使用中间层业务对象以声明方式对数据执行选择、插入、更新、删除、分页、排序、缓存和筛选操作。ObjectDataSource 控件使用反射调用业务对象的方法,以对数据执行选择、更新、插入和删除操作。设置 ObjectDataSource 控件的 TypeName 属性来指定要用作源对象的类名称。,(3)XmlDataSource控件,XmlDataSource控件是专门针对XML数据而发布的数据源控件。该控件常用的属性及说明如下表所示。,(4)SiteMapDataSource控件,SiteMapDataSource 控件用来连接包含来自站点地图的导航数据。此数据包括有关网站中的页的信息,如 URL、标题、说明和导航层次结构中的位置。该控件的使用较为复杂,有兴趣的读者可参阅其它专门书籍。,6.2.4.2 数据绑定控件,(1)GridView控件 GridView控件采用表格形式显示从数据库中获取的数据集合。通过使用GridView控件,用户可以显示、编辑、删除、排序和翻阅多种不同的数据源中的表格数据。该控件常用的属性及说明如下表所示。,GridView控件使用范例,(2)Repeater控件 数据绑定控件Repeater的主要功能是以更自由的方式来控制数据的显示。它会按照所要求的样式严格地输出数据记录。Repeater 控件使用范例(3)DataList控件 DataList服务器控件使用模板和样式来显示数据。它需要连接到某个数据源控件,实现不同布局的数据显示。DataList控件所支持的模板类型类似于Reapter控件,但增加了编辑和选择模板。编辑模板可用来删除和修改记录;选择模板可用来处理选中某个记录后的显示方式。模板类型如下表所示。,DataList控件的常用事件及说明如下表所示,DataList控件使用范例,(3)DetailsView控件 DetailsView控件的主要功能是以表格形式显示和处理来自数据源的单条数据记录,DetailsView控件支持以下功能:绑定至数据源控件;内置插入功能;内置更新和删除功能;内置分页功能;以编程方式访DetailsView对象模型从而动态设置属性、处理事件等;可通过主题和样式进行自定义外观。下表列出了可以在DetailsView控件中使用的7种不同行字段类型。,DetailsView同样支持模板功能。下表列出了它所支持的模板。,DetailsView控件常用属性与GridView控件相似,可以参照学习DetailsView控件的常用事件及说明如下表所示。,DetailsView控件使用范例,(4)FormView控件 FormView控件用于显示数据源中的单个记录。FormView控件则默认创建一个空白的区域(实际上所创建的是一个只有一行一列的表格)。FormView控件不具备自动创建表格显示数据的功能。FormView控件需要开发人员自定义ItemTemplate、PagerTemplate等模板属性,以自定义方式显示各个字段。FormView控件支持以下功能:支持绑定到数据源控件;内置数据插入、更新和删除功能;内置分页功能;允许以编程方式访问FormView控件对象模型,以动态设置属性、处理事件等;通过用户定义的模板、主题和样式自定义外观。FormView控件作为一个数据绑定控件,可与数据源控件结合实现各种数据操作。当FormView控件通过DataSouceID属性连接数据源控件后,该控件可利用数据源控件的内置功能,在自身内置功能的支持下,实现数据更新、删除、添加和分页等操作。由于FormView控件使用模板属性,因此,没有提供自动生成命令按钮的功能。开发人员必须在模板属性中,自行定义各种命令按钮,这样才能实现数据操作功能。DetailsView控件支持的模板见下表,FormView控件使用范例,(5)ReportViewer控件 ReportViewer服务器控件用来呈现表格格式数据、聚合数据和多维数据,它可以图表的形式显示数据。ReportViewer服务器控件可以配置成以本地处理模式或远程处理模式运行。“本地处理模式”是指 ReportViewer 控件在客户端应用程序中处理报表。所有报表都是使用应用程序提供的数据作为本地过程处理的。“远程处理模式”是指由 SQL Server 2005 Reporting Services 报表服务器处理报表。在远程处理模式下,ReportViewer 控件用作查看器,显示已经在 Reporting Services报表服务器上发布的预定义报表。ReportViewer 控件中常用的属性如下表所示。,6.6.2.3 正确使用GridView、Repeater和DataList控件 数据绑定控件GridView、Repeater和DataList是显示数据的有力控件。其中GridView是迄今为止功能最为丰富的数据显示控件,大部分功能可通过属性设置来完成,甚至不需要编写一行代码就能实现强大的数据处理功能。许多初学者在进行Web开发时,只要遇到数据处理或显示就习惯性地使用GridView控件。虽然使用GridView大大减少了开发者的编程工作量,但最大的问题就是该控件在处理数据时需要占用很多Web服务器资源,生成在客户端呈现的HTML文件也非常大,而且只能以表格形式输出数据,最终导致系统响应性能降低。我们建议在用户数据量不大且不需要出色的界面效果、特别是当需要编辑、分页、排序功能的时候,快的处理性能,具有更好的显示效果的时候推荐使用Reapter控件,Reapter控件允许对用户通过模板自定义数据项的输出,处理速度非常快。但Reapter控件的缺点是,必须在各个模板中进行手工编写代码,对于分页、排序、编辑等都必须编写代码。DataList控件的使用性能介于GridView和Repeater之间。可在DataList中通过属性设置定义各个模板,然后部分地通过编程实现分页、排序、数据编辑。,6.3 Web.config文件的配置,ASP.NET的应用程序配置文件web.config是基于XML格式的纯文本文件,存在于应用的各个目录下。它决定了站点所在目录及其子目录的配置信息,并且子目录下的配置信息覆盖其父目录的配置。(1)配置文件的语法规则 标记 配置内容被置于web.config文件中的标记和之间。格式如下:配置内容 配置段句柄说明 ASP.NET的配置文件架构并未指定任何文件格式或者是支持的配置属性。相反,它提出了“配置段句柄申明”的概念来支持任意的用户定义配置段。格式如下:配置段 具体定义配置的内容,供应用使用。配置段使用范例,(2)ASP.NET定义的标准配置段 ASP.NET定义的标准配置段及其说明如下表所示,所有配置信息都驻留在 和 根 XML 标记之间。标记间的配置信息分为两个主区域:配置节处理程序声明区域和配置节设置区域。配置节处理程序声明出现在配置文件顶部 和 标记之间。包含在 标记中的每个声明都指定提供特定配置数据集的节的名称和处理该节中配置数据的.NET 框架类的名称。配置节设置区域位于 区域之后,它包含实际的配置设置。区域中的每个声明都有一个配置节。每个配置节都包含子标记,这些子标记带有包含该节设置的属性。,(3)WebConfig文件详解 节 作用:配置 ASP.NET 身份验证支持(为Windows、Forms、PassPort、None四种)。该元素只能在计算机、站点或应用程序级别声明。元素必需与 节配合使用。节 作用:控制对 URL 资源的客户端访问(如允许匿名用户访问)。此元素可以在任何级别(计算机、站点、应用程序、子目录或页)上声明。必需与 节配合使用。节 作用:配置 ASP.NET 使用的所有编译设置。默认的debug属性为“True”.在程序编译完成交付使用之后应将其设为True(Web.config文件中有详细说明,此处省略示例),作用:为 ASP.NET 应用程序提供有关自定义错误信息的信息。它不适用于 XMLWeb services 中发生的错误。节 作用:配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。作用:标识特定于页的配置设置(如是否启用会话状态、视图状态,是否检测用户的输入等)。可以在计算机、站点、应用程序和子目录级别声明。作用:为当前应用程序配置会话状态设置(如设置是否启用会话状态,会话状态保存位置)。作用:配置 ASP.NET 跟踪服务,主要用来程序测试判断哪里出错。,(4)自定义Web.config文件配置节 自定义Web.config文件配置节过程分为两步:一是在在配置文件顶部 和 标记之间声明配置节的名称和处理该节中配置数据的.NET Framework 类的名称。二是在 区域之后为声明的节做实际的配置设置。(5)访问Web.config文件 你可以通过使用ConfigurationSettings.AppSettings 静态字符串集合来访问。Web.config文件配置节和访问范例,6.4 Global.asax 文件,开发应用程序的时候,有时候需要编写一些处理程序级别的事件以及添加程序级别的逻辑代码,这些代码并不会处理单个的页面请求,而是用于处理高层的应用程序级别的事件,比如Application_Star、Application_End、Application_Error、Session_Start、Session_End等。这些代码是放在Global.asax文件中。Global.asax 文件继承自HttpApplication 类,它维护一个HttpApplication 对象池,并在需要时将对象池中的对象分配给应用程序。Global.asax 文件包含以下事件:(1)Application_Init:在应用程序被实例化或第一次被调用时,该事件被触发。对于所有的HttpApplication 对象实例,它都会被调用。(2)Application_Disposed:在应用程序被销毁之前触发。这是清除以前所用资源的理想位置。,(3)Application_Error:当应用程序中遇到一个未处理的异常时,该事件被触发。(4)Application_Start:在HttpApplication 类的第一个实例被创建时,该事件被触发。它允许你创建可以由所有HttpApplication 实例访问的对象。(5)Application_End:在HttpApplication 类的最后一个实例被销毁时,该事件被触发。在一个应用程序的生命周期内它只被触发一次。(6)Application_BeginRequest:在接收到一个应用程序请求时触发。对于一个请求 来说,它是第一个被触发的事件,请求一般是用户输入的一个页面请求(URL)。(7)Application_EndRequest:针对应用程序请求的最后一个事件。(8)Application_PreRequestHandlerExecute:在 ASP.NET 页面框架开始执行 诸如页面或 Web 服务之类的事件处理程序之前,该事件被触发。(9)Application_PostRequestHandlerExecute:在 ASP.NET 页面框架结束执行一个事件处理程序时,该事件被触发。,(10)Applcation_PreSendRequestHeaders:在 ASP.NET 页面框架发送 HTTP 头给请求客户(浏览器)时,该事件被触发。(11)Application_PreSendContent:在 ASP.NET 页面框架发送内容给请求客户(浏览器)时,该事件被触发。(12)Application_AcquireRequestState:在 ASP.NET 页面框架得到与当前请 求相关的当前状态(Session 状态)时,该事件被触发。(13)Application_ReleaseRequestState:在 ASP.NET 页面框架执行完所有的事件处理程序时,该事件被触发。这将导致所有的状态模块保存它们 当前的状态数据。(14)Application_ResolveRequestCache:在 ASP.NET 页面框架完成一个授权请求时,该事件被触发。它允许缓存模块从缓存中为请求提供服务,从而绕过事件处理程序的执行。,(15)Application_UpdateRequestCache:在 ASP.NET 页面框架完成事件处理程序的执行时,该事件被触发,从而使缓存模块存储响应数据,以供响应后续的请求时使用。(16)Application_AuthenticateRequest:在安全模块建立起当前用户的有效的身份时,该事件被触发。在这个时候,用户的凭据将会被验证。(17)Application_AuthorizeRequest:当安全模块确认一个用户可以访问资源之后,该事件被触发。(18)Session_Start:在一个新用户访问应用程序 Web 站点时,该事件被触 发。(19)Session_End:在一个用户的会话超时、结束或他们离开应用程序Web 站点时,该事件被 触发。Global.asax文件使用范例,6.5 ADO.NET数据库访问技术,ADO.NET是微软在.NET平台下一种全新的数据库访问机制。,ADO.NET满足了ADO无法满足的三个重要需求:为适应WEB环境的编程需要提供了断开的数据访问模型;提供了与XML的紧密集成;提供了与.NET框架的无缝连接。,6.5.1 Connection对象,数据库应用程序与数据库进行数据交互,首先必须建立与数据库的连接。ADO.NET中,使用Connection对象完成此项功能。在这里要指出的是在创建连接之间要在程序中添加System.Data和两个命名空间。建立与数据库的连接是通过数据库连接字符串来实现的,在连接字符串中要设置一些参数的值,连接Sql Server数据库的常用参数如下表所示:,Connection对象常用的方法如下表所示:,Connection对象使用范例,6.5.2 Command对象,常用的Command对象的属性有以下几种。CommandText属性:获取或设置要对数据源执行的sql命令、存储过程或者数据表名称,当调用ExecuteNoQuery、ExecuteReader、ExecuteScalar、ExecuteXmlReader中的任意一个方法时,Command对象会执行CommandText属性所指定的内容。CommandTimeout属性:获取或设置Command对象超时时间,单位为秒,默认为30。如果Command对象在30秒时间内不能执行CommandText属性设定的内容便返回失败。CommandType属性:获取或设置CommandText属性代表的意义,可以为CommandType.StoreProcedure(存储过程)、CommandType.Text等。默认为Text。Parameters属性:获取ParameterCollectionConnection属性:获取或设置Command对象要使用的数据连接,值为Connectiion对象,常用的Command对象的方法有以下几种:Cancle:取消Command对象的执行。CreateParameter:执行CommandText属性指定的内容,并返回被影响的列 数。只有update、insert、delete三个sql语句回返回被影响的列数,其它的返回的都是-1ExecuteReader:执行Com