1、第4章 模块3会员注册管理4.1 【任务任务7】会员注册会员注册UI设计设计4.2 【任务任务8】会员信息验证会员信息验证4.3 【任务任务9】会员注册信息存储会员注册信息存储【本章提要本章提要】本章围绕校园在线超市系统中会员注册管理模块的实现,首先通过会员注册UI设计任务的实现过程,介绍了ASP.NET2.0中选择类控件的使用;然后通过对会员信息的验证叙述了服务器验证控件的使用;最后以注册信息存储到数据库中为要求,介绍了ADO.NET数据访问模型的概念,并介绍了数据访问对象Connection、Command和DataReader的使用。【学习目标学习目标】掌握选择类控件的使用。掌握验证控件
2、。理解数据访问模型的概念。掌握Connection、Command、DataReader对象的使用。任务描述任务描述在校园在线超市系统中,要实现会员注册功能,首先应该有一个注册页面,能够输入会员的相关信息,如用户名、密码、性别、职业、爱好、电话、电子邮件等。那么,这些信息的录入需要哪些控件呢?这些控件又该如何访问呢?4.1 【任务任务7】会员注册会员注册UI设计设计 必备知识必备知识知识知识1 选择类控件的使用选择类控件的使用选择类控件主要包括单选按钮、复选按钮、下拉式列表和列表框。这类控件的属性中均有一个项目集合属性,单击后可出现添加项目窗口,并可设置项目的显示文本和相应的值,如图4-1所示
3、。同时,也可以通过编程的方式添加和移除项目。这类控件还支持数据源的数据绑定。1RadioButton控件和控件和RadioButtonList控件控件RadioButton控件是单个的单选按钮控件,RadioButtonList控件是作为单选按钮列表项集合的父控件,它们都可以实现单一选择。RadioButton控件的HTML标签:RadioButtonList控件的HTML标签男 女读取按钮组中的值:string sex=RadioButtonList1.SelectedItem.Value;设置单选按钮组的方向:RadioButtonList1.RepeatDirection=RepeatD
4、irection.Horizontal;图4-1 选择类控件添加项目2CheckBoxList控件控件作为复选框控件列表集合的父控件,CheckBoxList控件可以实现多项选择。CheckBoxList控件的HTML标签:体育音乐旅游看书上网统计复选框组中的项数:int number=CheckBoxList1.Items.Count;判断复选框组中的项是否被选中:if(CheckBoxList1.Itemsi.Selected=true);获取复选框组中项的值:string str=CheckBoxList1.Itemsi.Value;获取复选框组中每一项的值:for(int i=0;iC
5、heckBoxList1.Items.Count;i+)string strList=;if(CheckBoxList1.Itemsi.Selected=true)strList+=+CheckBoxList1.Itemsi.Value;3DropDownList控件DropDownList控件可以创建单一选择的下拉列表控件。DropDownList控件的HTML标签:大一 大二 大三改变选项后立即提交服务器:ContrGrade.AutoPostBack=true;获取下拉列表中选中项的值:string strList=DropDownList.SelectedItem.Value;事件选项
6、改变触发的事件处理程序:protected void ContrGrade_SelectedIndexChanged(object sender,EventArgs e)string strList=DropDownList1.SelectedItem.Value;Label1.Text=strList;任务实现步骤1 打开校园在线超市网站,在“解决方案资源管理器”的“User文件夹”中选择“增加新项”,设置名称为“Register.aspx”,语言为“Vistual C#”,勾选“选择母版页”,并点击“添加”按钮,如图4-2所示。图4-2 添加新项步骤2 在出现的“选择母版页”对话框中,选择
7、站点根目录下的母版“MasterPage.master”,并点击“确定”按钮,如图4-3所示。图4-3 选择母版页步骤3 从新建的内容页“user/Register.aspx”中切换到设计视图,将Label控件、TextBox控件、RadioButtonList控件、CheckBoxList控件、DropDownList控件、Button控件从工具箱拖放到页面,设置其属性,并采用表格布局,如图4-4所示。图4-4 Register.aspx内容页步骤4 为“性别”栏中所拖入的RadioButtonList控件添加两个选项,分别为“男”、“女”,其Text属性与Value属性相同,默认值为“男”
8、,并设置其RepeatDirection属性为Horizontal。步骤5 浏览“Register.aspx”页面,查看其显示效果。任务描述任务描述在校园在线超市系统中,当会员进行信息填写时,有必要对用户输入的信息进行验证,以保证输入数据的完整性和安全性。4.2 【任务任务8】会员信息验证会员信息验证 知识知识1 验证概述验证概述1.数据验证的必要性数据验证的必要性输入验证是检验Web窗体中用户的输入是否和期望的数据值、范围或格式相匹配的过程。通过数据验证可以有效减少等待错误信息的时间,降低发生错误的可能性,从而改善用户访问Web站点的体验。必备知识必备知识1)验证控件的值在很多情况下,我们期
9、望用户输入的值应该符合某种类型、在一定范围内或符合一定的格式等,对于这些要求,通过使用验证控件将能很容易地实现。2)错误阻塞处理当页面验证没有通过时,页面将不会被提交或不会被处理,直到验证通过,页面才可能被提交处理。3)对欺骗和恶意代码的处理验证还会保护Web页面避免两种威胁:欺骗和恶意代码。当恶意用户修改收到的HTML页面,并返回一个看起来输入有效或已通过授权检查的值时,就发生了恶意欺骗。由此可以看出,欺骗往往是通过绕过客户端验证来达到目的的。因此,运行ASP.NET服务器端验证将能有效地阻止欺骗。当恶意用户向Web页的无输入验证的控件添加无限制的文本时,就有可能输入了恶意代码。当这个用户向
10、服务器发送下个请求时,已添加的代码可能对Web服务器或任何与之连接的应用程序造成破坏。2数据验证过程数据验证过程数据发送到服务器端之前,验证控件会在浏览器内执行错误检查,并立即给出错误提示,如果发生错误,则不能提交网页。出于安全考虑,任何在客户端进行的输入验证都会在服务器再次进行验证。在服务器处理请求之前,验证控件会对该请求中输入控件的数据合法性进行验证,行使一个类似数据过滤器的角色,即在处理Web页或服务器逻辑之前对数据进行验证。如果有不符合验证逻辑的数据,则中断执行并返回错误信息。验证过程如图4-5所示。图4-5 数据验证过程知识知识2 验证的对象模型验证的对象模型验证控件在客户端上呈现的
11、对象模型与在服务器上呈现的对象模型几乎完全相同,但是在公开验证信息的方式上有所不同。服务器端通过对控件的属性设置来实现,而客户端则使用全局变量来实现。表4-1列出了客户端和服务器端对象模型。表4-1 客户端和服务器端对象模型在服务器端,通过使用由各个验证控件和页面公开的对象模型,可以与验证控件进行交互。每个验证控件都有自己的IsValid属性,该属性用来确定该控件是否通过验证测试。而每一个Web页面也公开一个IsValid属性,它汇总页面上所有验证控件的IsValid状态,该属性允许执行单个测试,以确定是否应该继续执行。页面还公开一个包含页面上所有验证控件的列表的Validators集合,利用
12、这一集合可依次检查单个验证控件的状态。在客户端,网页将包含对执行客户端验证所用的脚本库的引用,此外还包含客户端方法,以便在网页提交前截获并处理Click事件。知识知识3 ASP.NET的验证类型的验证类型在ASP.NET中,输入验证是通过向ASP.NET网页添加验证控件来完成的。验证控件为所有常用的标准验证类型提供了一种易于使用的机制以及自定义验证的方法。此外,验证控件还允许自定义向用户显示错误信息的方法。验证控件可与ASP.NET网页上的任何控件一起使用。常规的验证类型如表4-2所示。表4-2 验证类型知识知识4 服务器验证控件服务器验证控件1错误信息的布局与显示错误信息的布局与显示当错误信
13、息出现在页面上时,它成为页布局的一部分。因此,需要在进行页的布局设计时考虑这一因素,以放置可能出现的任何错误信息。一般通过设置验证控件的Display属性来控制布局,该属性的选项如表4-3所示。表4-3 验证控件的Display属性值2使用验证控件使用验证控件1)RequiredFieldValidator控件该控件可以强制用户在输入控件中输入内容。当验证执行时,如果输入控件包含的值为空,则验证失败。在页中添加 RequiredFieldValidator 控件并将其链接到相关的控件,可以指定用户在ASP.NET 网页上的相关控件中必须输入信息。如果验证在客户端执行,则用户可以在使用该页时将必
14、填字段设为空白(或保留默认值),但必须在提交页之前提供非默认值。但是,在字段中输入值之后,用户便无法清除该字段(或将其恢复为默认值)。如果清除该字段,用户在试图离开该字段时会立即见到错误信息。在服务器验证中,页提交之前不进行检查,用户在提交页后才会看到错误信息。在下面的示例中,RequiredFieldValidator控件验证TextBox控件“txtName”是否为空。Enter your nameRequiredFieldValidator验证控件的属性:ControlToValidate,表示要验证的控件ID。ErrorMessage,表示当检查不合法时,出现的错误提示信息。Text,
15、控件中显示的字符串。2)CompareValidator控件使用CompareValidator控件来测试用户的输入是否符合指定的值或者符合另一个输入控件的值。CompareValidator控件常常用在容易发生输入错误的地方,例如不显示用户实际输入的密码字段。在下面的示例中,一个CompareValidator控件验证两个TextBox控件txtPassword1和txtPassword2的值是否相同。Enter your passwordEnter your password againCompareValidator验证控件的属性:ControlToValidate,表示要验证的控件ID
16、。ControlToCompare,用来比较控件的ID。如果需要将一个输入控件的值同某个常数值相比较,则可以通过设置ValueToCompare属性指定要比较的常数值。ValueToCompare,用来确定要比较的某个常数值,使用管道字符“|”来分隔多个值。这个属性最好用来验证常量值(如一个最小年龄限制),而对于很可能变化的值,需要使用CustomValidator控件来比较。Type,表示要比较的控件的数据类型。如果希望输入控件中的值与某个数据类型匹配,可以使用这个属性。Operator,指定要使用的比较运算符。使用比较运算符的名称来指定运算符,如Equal、NotEqual、Greater
17、Than和GreaterThanEqual等。ErrorMessage,表示当检查不合格时,出现的错误提示信息。Text,控件中显示的字符串。3)RangeValidator控件RangeValidator控件用来测试输入值是否在给定的范围内。输入的值介于最小值和最大值之间(包括最小值和最大值)是有效的。RangeValidator控件通常被用来验证输入值(如年龄、身高、薪水和孩子个数)是否匹配预期的范围。RangeValidator控件可以把空输入控件作为有效控件进行验证。在下面的例子中,RangeValidator控件验证命名为txtAge的TextBox控件是否有一个介于1850之间的值
18、:Enter your age*RangeValidator验证控件的属性:ControlToValidate,表示要验证的控件ID。Type,表示要比较的控件的数据类型。在任何比较执行之前,比较的值会被转换成这种数据类型。MaximumValue,表示有效范围的最大值(对数字变量),或字符串的最大字符长度(对字符串变量)。MinimumValue,表示有效范围的最小值(对数字变量),或字符串的最小字符长度(对字符串变量)。ErrorMessage,表示当检查不合格时,出现的错误提示信息。Text,控件中显示的字符串。4)RegularExpressionValidator控件当验证一个用户的
19、输入是否匹配预定义的模式时(比如一个电话号码、邮政编码或者电子邮件地址),必须使用RegularExpressionValidator控件。这个验证控件把用户输入的字符、数字和符号的模式与控件中的一个或多个模式相比较。当在属性窗口单击ValidationExpression时,.NET提供一套预置的正则表达式模式。这些模式包括电子邮件、网站地址、电话号码和邮政编码。如要创建一种新的模式,可选择Custom(自定义)模板,此时可编辑最后一次选中的模式,并以此模式为基础创建自定义模式。正则表达式的控制字符集如表4-4所示。表4-4 正则表示式的控制字符集下面的代码显示了如何使用RegularExp
20、ressionValidator控件来检查用户是否输入了一个有效的电子邮件地址:说明:ControlToValidate,表示要验证的控件ID。RegularExpressionValidator,指定用于输入控件的正则表达式。ErrorMessage,表示当检查不合格时,出现的错误提示信息。Text,控件中显示的字符串。5)CustomValidator控件当使用自己定制的验证逻辑,针对变量、公式或其他来源的输入,检查用户输入时,就要用CustomValidator控件。CustomValidator控件通常用于类似密码验证的情形,将用户输入的密码和一个存储在用户数据库中的密码相比较。Cus
21、tomValidator控件既可以实现服务器端的验证,也可以实现客户端的验证。与其他的验证控件不同,必须为CustomValidator控件编写验证脚本,通过使用属性args.IsValid来设置CustomValidator控件有效或者无效。下面的例子中,显示一个CustomValidator控件的服务器端和客户端程序,检查输入控件中输入的数字是否为偶数。(1)客户端程序function MyClientFunction(source,arguments)alert(I am running on the client!);var intValue=arguments.Value;if(in
22、tValue%2=0)arguments.IsValid=true;else arguments.IsValid=false;(2)服务器端程序protected void MyServerFunction(object source,ServerValidateEventArgs args)int intValue=Convert.ToInt16(args.Value);if(intValue%2=0)args.IsValid=true;else args.IsValid=false;6)Page.IsValid属性和ValidationSummary控件Visual Studio.NET能
23、够在控件执行操作之前验证页面上所有的控件是否有效。有效性验证可以在客户端进行,也可以在服务器端进行,这取决于正在使用的浏览器。客户端使用ValidationSummary控件进行验证,而服务器端使用Page.IsValid属性进行验证。(1)Page.IsValid属性为了确定页面上所有的验证控件是否都是有效的,可以在运行时检查页面的IsValid属性。IsValid属性对页面上所有验证控件的值进行逻辑“与”运算,如果任意一个验证控件是无效的,那么这个IsValid属性就返回False。这个属性提供一个简单的方法来确定Web窗体上的输入控件是否都有效,以及Web窗体是否已经准备继续处理业务逻辑
24、。验证控件测试用户的输入,设置错误状态,并产生错误信息。然而,验证控件不改变页面的处理流程。例如,如果发现用户输入错误,则验证控件不会绕过代码。相反,在执行应用程序指定的逻辑之前,应该在代码里测试所有控件的状态。如果发现错误,应该终止自己代码的运行,页面继续处理,并将错误信息返回给用户。下面的示例显示了一个按钮事件处理程序,其功能是测试整个页面的IsValid属性。protected void Button1_Click(object sender,EventArgs e)if(Page.IsValid)Message.Text=Page is valid!;(2)ValidationSumm
25、ary控件当Page.IsValid属性返回False时,ValidationSummary控件将显示错误信息。ValidationSummary控件轮询页面上的每个验证控件,并集中显示每个验证控件的ErrorMessage消息。ValidationSummary控件显示一个消息框或文本区域,包括一个标题和一个错误列表。根据DisplayMode的值,以项目符号列表或者单一段落的方式显示错误列表。ValidationSu-mmary控件一般放在提交按钮的附近,这样,当触发验证控件时,用户可以很容易地看到所有的错误信息,如图4-6所示。图4-6 带有验证控件的用户注册页面下面的HTML显示一个典
26、型的ValidationSummary控件:ValidationSummary控件的属性如下:HeaderText,可以在此控件的标题部分指定一个自定义标题。ShowSummany,设置在消息中是否显示错误信息摘要。DisplayMode,指明可显示为列表或其他格式。ShowMessageBox,设置错误消息显示在弹出对话框中。当使用ValidationSummary控件时,在这个控件上显示ErrorMessage属性的同时,在验证控件的位置上也显示Text属性(如果被使用)。带有红色星号“*”的Text属性通常显示在输入控件的右边,以警告用户没有正确填充输入控件。带有输入错误描述的Error
27、Message属性显示在ValidationSummary控件中,这个控件通常放置在触发事件的控件附近。任务实现任务实现步骤1 打开校园在线超市网站,在“解决方案资源管理器”的“User”文件夹中打开“Register.aspx”。步骤2 添加验证控件,并设置其属性,如图4-7所示。要求:必须填写“用户名”、“密码”和“确认密码”,使用RequiredFieldValidator 控件;“密码”和“确认密码”必须一致,使用CompareValidator 控件;“手机号码”必须是1开头的数字,使用CustomValidator控件;“Email”必须符合格式要求,使用RegularExpres
28、sionValidator控件,“QQ”必须是数字,使用RegularExpressionValidator控件;将错误信息以对话框的形式显示在窗体上弹出,使用ValidationSummary控件。图4-7 添加验证控件步骤3 为CustomValidator控件添加客户端程序和服务器端程序。客户端程序如下所示:function ClientValidationPhone(source,arguments)var phone=arguments.Value.toString();var i;if(phone.charAt(0)!=1)arguments.IsValid=false;else
29、for(i=1;iphone.length;i+)if(phone.charAt(i)9)arguments.IsValid=false;if(i=phone.length)arguments.IsValid=true;服务器端程序如下所示:protected void CustomValidator1_ServerValidate(object source,ServerValidateEventArgs args)string phone=args.Value;if(phone0!=1)args.IsValid=false;else for(int i=1;i phone.Length;i
30、+)if(phonei 9)args.IsValid=false;if(i=phone.Length)args.IsValid=true;步骤4 双击“注册”按钮,给其添加事件处理过程,并在其事件处理过程中添加以下代码,提示用户验证成功:if(Page.IsValid)Response.Write(alert(验证成功!);步骤5 浏览“Register.aspx”页面并查看其效果。任务描述任务描述在校园在线超市系统中,会员注册信息验证成功后,应能保存会员注册的信息到数据库中。4.3 【任务任务9】会员注册信息存储会员注册信息存储 必备知识必备知识知识知识1 数据访问模型数据访问模型1数据访问
31、原理数据访问原理在ASP.NET中,数据访问必须依赖于.NET Framework所提供的功能。ASP.NET通过对ADO.NET的引用,实现获取数据和操作数据的目的。具体地说,数据访问涉及四个主要的组件:Web应用程序(ASP.NET)、数据层(ADO.NET)、数据提供程序和数据源。这些组件构成了所有数据访问Web应用程序的基础结构,如图4-8所示。图4-8 数据访问的主要组件1)数据存储(Data Store)数据存储是数据存放的源头,通过ADO.NET2.0和ASP.NET2.0的新增控件,Web应用程序能够访问多种数据存储中的数据,包括关系数据库、XML文件、Web服务、平面文件,或
32、诸如Microsoft Excel电子数据表程序中的数据。2)数据提供程序(Provider)为什么可以通过ADO.NET来访问许多不同的数据源呢?这是因为ASP.NET能提供程序模型,这些Provider相当于一个适配器,它将对不同的数据源的数据操作细节隐藏起来,这种模型的灵活性使开发人员只需编写一组数据访问代码就能访问各种类型的数据。3)数据操作层(DataLayer)在ADO.NET中,通过ADO.NET API定义的抽象层,使所有的数据源看起来都是相同的。不论何种数据源,提取信息的过程都具有相同的关键类和步骤。4)Web应用程序层ASP.NET提供一系列控件,这些控件的设计意图是为了减
33、少数据访问的代码量。例如,开发人员能够使用数据源向导自动创建和配置一个数据源,使用这个数据源发布查询和检索结果。此外,不同的控件能够绑定到一个数据源,因此,控件能够依据从数据源检索到的信息,自动设置控件的外观和内容。在数据访问的四个组件中,其中最主要的就是数据操作层(DataLayer)。通过ADO.NET,开发人员既可以通过编写代码来访问各种数据,也可以通过ASP.NET2.0新增控件实现无代码访问各种数据。2ADO.NET访问技术访问技术ADO.NET是一种把基于Microsoft.NET的Web应用程序以及Microsoft Windows应用程序连接到诸如SQL Server数据库或X
34、ML文件等数据源的技术。ADO.NET专门为诸如Internet这样的无连接的工作环境而设计,它提供了一种简单而灵活的方法,便于开发人员把数据访问和数据处理集成到Web应用程序中。1)ADO.NET组成ADO.NET包括两个核心组件,分别是.NET Framework数据提供程序和DataSet数据集。(1)数据提供程序数据提供程序用于连接到数据库,执行命令和检索结果。数据提供程序中包含的核心对象如表4-5所示。表4-5 ADO.NET的核心对象为了满足不同数据库和不同开发的要求,.NET Framework提供了四个数据提供程序:SQL Server.NET Framework数据提供程序
35、OLE DB.NET Framework数据提供程序 ODBC.NET Framework数据提供程序 Oracle.NET Framework数据提供程序SQL Server.NET Framework数据提供程序和OLE DB.NET Framework数据提供程序使用的对象名称不同,前者通过SqlConnection、SqlCommand、SqlDataRea-der、SqlDataAdapter对象来访问,后者通过OleDBConnection、OleDBCommand、OleDBDataReader、OleDBDataAdapter对象来访问。组成ADO.NET的各个对象被包含在不同
36、的命名空间中。如果要处理SQL Server 2005数据库中的数据,需要导入System.Data和System.Data.SqlClient;如果要处理Access、SQL Server 7.0以下版本、dBase和Oracle数据库中的数据,需要导入System.Data和System.Data.OleDb。(2)DataSet对象在Web应用程序中,DataSet对象用于存储从数据源中收集的数据。处理存储在DataSet中的数据并不需要ASP.NET Web窗体与数据源保持连接。并且,使用DataSet对象不仅能获取数据源中心的数据,而且还能获得数据源的类型信息,它无需知道从中接受数据
37、的数据源的其他任何信息。仅当数据源中的数据随着改变而被更新的时候,才会重新建立连接。DataSet对象把数据存储在一个或多个DataTable中。每个DataTable可由来自唯一数据源中的数据组成。与DataSet相关的对象见表4-6所示。表4-6 与DataSet相关的对象2)使用ADO.NET访问数据ADO.NET提供了一套丰富的对象,用于对几乎任何种类的数据存储的连接式或断开式访问,当然包括关系型数据库。在此模式下,连接会在程序的整个生存周期中保持打开,而不需要对状态进行特殊处理。随着应用程序开发的发展演变,数据处理越来越多地使用多层结构,断开方式的处理模式可以为应用程序提供更好的性能
38、和伸缩性。ADO.NET技术满足了这一需求。图4-9显示了如何使用ADO.NET访问数据。图4-9 使用ADO.NET访问数据(1)断开式数据访问模式断开式数据访问模式指的是客户不直接对数据库操作。在.NET平台上,使用各种开发语言开发的数据库应用程序一般并不直接对数据库操作,而是先连接数据库和通过数据适配器填充DataSet对象,然后客户端再通过读取DataSet来需要的数据。同样,在更新数据库中的数据时,也需要首先更新DataSet,然后再通过数据适配器来更新数据库中对应的数据。使用断开式数据访问模式的基本过程如下:使用连接对象Connection连接并打开数据库。使用数据适配器DataA
39、dapter填充数据集DataSet。关闭连接,对DataSet进行操作。操作完成后打开连接。使用数据适配器DataAdapter更新数据库。断开式数据访问模式适用于远程数据处理、本地缓存数据及执行大量数据的处理,不需要与数据源保持连接,从而将连接资源释放给其他客户端使用。(2)连接式数据访问模式连接式数据访问模式是指用户在操作过程中,与数据库的连接一直保持。如果不需要DataSet所提供的功能,则打开连接后,可以直接使用命令对象Command进行数据库相关操作。使用DataReader对象可以只进只读方式返回数据并显示,从而提供应用程序的性能。在实际应用中,选择数据访问模式的基本原则是首先满
40、足需求,而后考虑性能优化。知识2 使用Connection对象连接数据库访问数据库的第一项工作就是和数据库建立连接,然后通过这个连接向数据库发送命令和读取返回的数据,在ADO.NET中,这是由Connection对象来实现的。1编写代码创建数据库连接编写代码创建数据库连接对于不同的数据库的连接,使用的连接对象有所区别,连接字符串也有不同。1)使用SQL Server.NET数据提供程序连接SQL Server 2005数据库如果需要访问的是SQL Server 2005数据库,则需要使用SQL Server.NET数据提供程序,相关的类在System.Data.SqlClient命名空间中,此
41、时需要使用SqlConnection对象来连接数据库。SqlConnection对象最重要的属性就是ConnectionString属性,该属性将建立连接的详细信息传递给SqlConnection对象,SqlConnection对象通过这个属性所提供的连接字符串来连接数据库。在连接字符串中至少需要包含服务器(Server)、数据库名(Database)和身份验证(User ID/Password)等信息。ConnectionString中常见的属性如表4-7所示。表4-7 ConnectionString的属性连接字符串可以在创建SqlConnection对象时作为参数传递,也可以通过Conn
42、ectionString属性来设置。下面这个例子是一个非常基本的连接字符串,可以用于建立到位于运行代码的同一台机器上的SQLServer的连接:SqlConnection sqlconn=new SqlConnection(Server=(local);Database=SuperMarketDB;Integrated Security=SSPI;);下面的例子显示一个可用于连接到“使用SQL Server身份验证”的远程服务器MyServer的连接字符串。设置Connection Timeout为60秒。SqlConnection sqlconn2=new SqlConnection(Ser
43、ver=MyServer;Userid=aa;Database=SuperMarketDB;Passord=abcd;Connection Timeout=60;);在创建SqlConnection对象并正确设置好连接字符串后,.NET并不会自动建立和数据库的连接,还需要使用SqlConnection的Open方法打开连接,从而真正在网上实现一个数据库的连接。连接被打开后就可以通过它访问数据库中的数据,访问完毕之后还需要使用Close方法关闭连接,直到下一次访问数据库时再打开。表4-8 SqlConnection对象的主要方法2)使用OLEDB.NET数据提供程序连接Access数据库如果需要
44、访问的是Access 2000数据库,则使用SQL OLEDB.NET数据提供程序,相关的类都在System.Data.OleDB命名空间中,此时需要使用OleDBConnection对象来连接数据库。OleDBConnection和SqlConnection的使用基本是一样的,唯一的区别就是ConnectionString的取值有所不同。访问Access数据库的连接字符串中至少需要包含提供者(Provider)和数据库文件名(Data Source)这两个信息,其中的Provider用来指定数据库类型,访问Access时应该为“Microsoft.Jet.OLEDB.4.0”。下面的例子显示
45、了如何访问Access数据库StudentMS.mdb:OleDbConnection oledbconn;oledbconn.ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;DataSource=f:SuperMarketDB.mdb;oledbconn.Open();oledbconn.Close();2使用使用Web.Config文件定义数据连接字符串文件定义数据连接字符串在Web应用程序中,往往有多个窗体需要访问数据库,这些页面中都要创建Connection对象,而每次创建Connection对象时又必须设置ConnectionStr
46、ing属性为合适的连接字符串。这样就会造成一个问题,一旦数据库信息发生变化(如SQL Server服务器名改变或者Access数据库文件的存储路径变化),就必须把每个页面中的连接字符串都做改动,为应用程序的维护带来了麻烦。利用ASP.NET的Web.config文件就可以很好地解决这个问题。下面的示例将连接字符串保存在Web.config文件中:上例在Web.config文件中建立了一个connectionString“DBConnStr”,其中保存了所需的数据库连接字符串(Value的值)。这样,在窗体中创建连接对象时,只需要读取“DBConnStr”的值就行了。string myconns
47、tr=ConfigurationManager.ConnectionStringsDBConnStr.ConnectionString;SqlConnection sqlconn=new SqlConnection(myconnstr);sqlconn.Open();3有关有关Connection对象的更多内容对象的更多内容在编写Web应用程序时,常常会遇到如何使用Connection对象的问题。如果每次访问数据库前打开连接,访问完毕后关闭连接,就会在网络上频繁地建立和撤销到数据库的连接路径,如果在网速较慢或网络工作繁忙的情况下,就可能产生几秒钟的时间延迟。反之,如果为了要减少连接的建立和撤销
48、的次数,而保持连接一直处于打开状态,则在规模较大的应用中,又会使得网络中同时存在过多的连接路径,从而降低网络的利用率。连接池(Connection Pool)就是解决方法之一。1)连接池的概念连接池是一个简单概念。当关闭一个连接时,并不直接撤销网络中的物理数据库连接路径,而是把包括身份验证细节在内的连接详细信息保存在资源池(Resource Pool)中。如果后来又提出连接请求,则首先会检查资源池,查看身份验证信息细节都相同的地方是否有现成的连接可用,且是否正在连接相同的服务器和数据库。如果有与要求的连接标准相匹配的现成连接,就使用它而不必再创建一个新的连接。不过,如果连接池中没有合适的连接可
49、用,那么就需要新建一个连接。ADO.NET中默认情况下会启用连接池。如果用户要防止某一连接在关闭后被加入到连接池中,也可以将连接字符串中的Pooling属性设置为False。下面的代码设置连接池禁用:SqlConnection conn=new SqlConnection(Database=library;User Id=sa;Password=;Pooling=False);物理数据库连接不能同时由多个对象共享,因此可以将连接池当作当前未使用的数据库连接的保存工具。调用SqlConnection对象的Open方法可以使连接池将现有数据库连接释放给请求连接的对象。在没有明确调用SqlConne
50、ction的Close方法前,数据库连接都不能放回到连接池中。如果将数据库连接返回到连接池中,其他SqlConnection对象就可以使用它。为了发挥连接池的作用,需要注意以下两点:在结束使用SqlConnection对象时必须调用Close方法,以便连接返回到连接池中,SqlConnection对象超出范围时是不会将连接返回到连接池中的。使用连接池的所有连接都应有完全相同的连接字符串,它包括Connection-String属性中的所有内容(例如Pooling)。如果这些字符串不相同,那么就会创建多个连接池,也就是说,每个不同的连接字符串都有一个连接池。2)连接池的大小连接池的大小是影响网络