第8章数据源控件修改增加内容了.docx
- 文档编号:17158041
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:38
- 大小:675.10KB
第8章数据源控件修改增加内容了.docx
《第8章数据源控件修改增加内容了.docx》由会员分享,可在线阅读,更多相关《第8章数据源控件修改增加内容了.docx(38页珍藏版)》请在冰点文库上搜索。
第8章数据源控件修改增加内容了
第八章数据源控件
数据访问的关键在于安全和高效。
ASP.NET2.0在提高数据访问安全和效率方面进行了卓有成效的改进,其中,最引人注目的就是使用数据源控件实现数据绑定技术。
目前大多数企业应用程序都是在多层体系结构之上生成的,比较常见的是把ASP.NET应用程序分为三个层:
表示层、业务逻辑层和数据访问层。
各层相对独立,可以单独修改,整个程序易于扩展、维护等。
而通过数据源控件ObjectDataSource就可以轻松实现应用程序的三层结构。
本章主要围绕ASP.NET2.0中诸如SqlDataSource、ObjectDataSource、AccessDataSource、SiteMapDataSource等几个重要数据源控件的使用方法展开讨论。
并就基于ObjectDataSource数据源控件构建三层结构的技术实现进行重点讲述。
8.1数据源控件概述
上一章,我们多用手动编写代码的方式完成连接数据库,进行读写操作。
显然,效率不高,且手动编码方式,很容易出错,安全性也不高。
但是,若通过数据源控件、数据绑定控件等技术,就能够使得开发人员在不编写或者少编写代码的情况下完成数据访问、显示、编辑等等操作。
数据源控件主要用于从不同的数据源获取数据,包括连接到数据源、使用SQL语句获取和管理数据等。
数据源控件处理与数据源进行交互的所有低级操作,而且拥有智能化、更加自动化。
本质上说,数据源控件是对ADO.NET的进一步包装。
表8.1列出了目前ASP.NET2.0提供的几个新的数据源控件:
SqlDataSource、ObjectDataSource、XmlDataSource、AccessDataSource和SiteMapDataSource。
它们都可以用来从它们各自类型的数据源中检索数据,并且可以绑定到各种数据绑定控件。
数据源控件减少了为检索和绑定数据甚至对数据进行排序、分页或编辑而需要编写的自定义代码的数量。
表8.1数据源控件列表
数据源控件
说明
ObjectDataSource
允许您使用业务对象或其他类,并创建依赖于中间层对象来管理数据的Web应用程序。
SqlDataSource
使用连接字符串连接数据库,数据源可以是SQLServer、Access、OLEDB、ODBC或Oracle等。
AccessDataSource
数据源是MicrosoftAccess数据库。
从SqlDataSource类继承而来。
使用Jet4.0OLEDB提供程序与数据库连接。
XmlDataSource
数据源是XML文件,该XML文件对诸如TreeView或Menu控件等分层ASP.NET服务器控件极为有用。
SiteMapDataSource
类似于XmlDataSource,只是专门为站点导航使用而做了优化。
数据源默认是以.sitemap为扩展名的XML文件。
每个数据源控件都具有类似的属性,以便与其各自的数据源进行交互。
SiteMapDataSource和XmlDataSource主要用于检索分层结构的数据。
XmlDataSource控件可以读取和写入XML数据,因此,可以通过某些控件(如TreeView和Menu控件)来使用该控件。
SiteMapDataSource控件使用ASP.NET站点地图,并提供站点导航数据。
此控件通常与Menu控件一起使用。
AccessDataSource应用面比较窄,只能用于从Access数据库中检索数据。
比较常用的两个基本数据源控件是SqlDataSource和ObjectDataSource。
前者用于直接连接数据库,后者用于连接业务对象。
SqlDataSource看起来好像只能使用SQLServer,但实际上可以用来从任何OLEDB或符合ODBC的数据源中检索数据。
无论和什么样的数据源交互,数据源控件都提供了统一的基本编程模型和API。
只要学会一种数据源控件的使用方法,那么,类似的控件就能一同百通。
8.2SqlDataSource数据源控件
8.2.1SqlDataSource控件简介
SqlDataSource控件应用非常广泛,该控件能够与多种常用的数据库进行交互,包括SQLServer、Access、OLEDB、ODBC或Oracle等。
在数据绑定控件的支持下,能够完成多种数据访问任务。
1、SqlDataSource控件常用属性:
表8.1 SqlDataSource控件的常用属性
属性
说 明
ConnectionString
用于获取或设置连接到数据库而使用的字符串,通常我们将连接字符串保存到Web.config文件中。
EnableCaching
获取或设置一个布尔值,用于确定是否启用SqlDataSource控件的数据缓存功能,默认值是true。
ProviderName
获取或设置SqlDataSource控件连接数据源时所使用的提供程序名称。
.NET框架包含了5个提供程序---System.Data.Odbc、System.Data.OleDb、System.Data.OracleClient、System.Data.SqlClient和Microsoft.sqlServerCe.Client。
默认值是System.Data.SqlClient。
InsertCommand
获取或设置用于为数据库添加数据记录的SQL语句或者存储过程。
DeleteCommand
获取或设置用于为数据库删除数据记录的SQL语句或者存储过程。
SelectCommand
获取或设置用于为数据库选择数据记录的SQL语句或者存储过程。
UpdateCommand
获取或设置用于为数据库更新数据记录的SQL语句或者存储过程。
2、SqlDataSource控件常用方法:
表8.2 SqlDataSource控件的常用方法
方法
说 明
Insert()
根据InsertCommand及其参数,执行一个添加操作。
Delete()
根据DeleteCommand及其参数,执行一个删除操作。
Select()
根据SelectCommand及其参数,执行一个选择操作,从数据库中获取数据记录。
Update()
根据UpdateCommand及其参数,执行一个更新操作。
3、SqlDataSource控件常用事件:
表8.2 SqlDataSource控件的常用事件
事件
说 明
Deleted
该事件在删除操作完成后发生。
可用于验证删除操作的结果。
Deleting
该事件在删除操作进行前发生。
可用于取消删除操作。
Inserted
该事件在添加操作完成后发生。
可用于验证添加操作的结果。
Inserting
该事件在添加操作进行前发生。
可用于取消添加操作。
Selected
该事件在选择操作完成后发生。
可用于验证选择操作的结果。
Selecting
该事件在选择操作进行前发生。
可在相关事件处理程序中验证、修改参数值。
Updateed
该事件在更新操作完成后发生。
可用于验证更新操作的结果。
Updating
该事件在更新操作进行前发生。
可用于取消更新操作。
8.2.2SqlDataSource控件应用示例
我们通过一个实例来演示如何通过SqlDataSource控件来获取并显示数据库中的数据。
这里,为便于观察结果,我们借助数据绑定控件GridView控件在页面上来显示获取的数据。
有关GridView控件的详细用法,在后面的小节里还会专门讨论。
例8.1通过SqlDataSource控件检索数据库中的资料。
1、使用SqlDataSource控件连接到数据库
(1)首先在VisualStudio2005中创建一个新网站,命名为SQLDS,选择“文件系统”存放方式。
向导将自动生成一个Default.aspx的文件。
(2)从工具箱中分别找到SqlDataSource和数据绑定控件GridView,拖放到页面中适当的位置,如图8.1所示。
如果SqlDataSource控件上没有显示“SqlDataSource任务”快捷菜单,则用鼠标右键单击SqlDataSource控件,然后,在系统弹出的快捷菜单上选择“显示智能标记”。
图8.1使用SqlDataSource控件连接到数据库
(3)单击“SqlDataSource任务”菜单上的“配置数据源”,系统就会弹出“配置数据源”向导。
其中,第一步就是选择数据连接,单击“新建连接”按钮,即出现“添加连接”对话框,如图8.2所示。
图8.2“添加连接”对话框
在这里,数据源选项可以通过“更改”按钮选择:
MicrosoftSQLServer(SqlClient);服务器名设置为localhost;因为SQLServer在本地,使用Windows身份验证即可;在“选择或输入一个数据库名”单选下拉框中,选择Northwind;最后,单击“测试连接”,在确认该连接正确无误后,单击“确定”。
(4)向导的下一步会询问是否将刚才定义好的连接字符串保存到Web.config文件中。
与将连接字符串存储在页面中相比,将字符串存储在配置文件中能带来许多好处,如更安全且可以重复使用,所以,我们勾选“是”,选择将连接字符串保存到Web.config文件中。
然后单击“下一步”。
(5)向导进入“配置Select语句”画面,如图8.3所示。
图8.3“配置Select语句”对话框
在这里,我们可以指定要从数据库中获取哪些数据。
在“指定来自表或视图的列”下的“名称”下拉列表中,选择“Products”;在“列”下,勾选“ProductID”、“ProductName”、“SupplierID”、“CategoryID”字段。
更复杂的定制Select语句,可以通过单击“WHERE”、“ORDERBY”、“高级”等按钮进行配置。
(6)单击“下一步”,进入“测试查询”画面。
可以通过单击“测试查询”按钮进行测试以确保前面所做配置无误,获取的数据是所需数据。
单击“完成”按钮。
至此,使用SqlDataSource控件连接到数据库的配置任务完成。
2、将SqlDataSource控件和数据绑定控件进行绑定
(1)在页面设计窗体上选择GridView控件,如果未显示“GridView任务”快捷菜单,同样用鼠标右键单击GridView控件,然后,在系统弹出的快捷菜单上选择“显示智能标记”。
因为,前面已经配置好了SqlDataSource控件,所以直接在“选择数据源”列表框中选择已定义好的SqlDataSource1控件即可,如图8.4。
图8.4设置GridView控件的数据源
如果前面没有进行SqlDataSource控件的配置,在这里,可以通过在“选择数据源”列表框中选择“新建数据源”,系统会出现“数据源配置向导”对话框,如图8.5所示。
图8.5“数据源配置向导”对话框
在这里,选择“数据库”获取数据,并单击“确定”按钮,随即就会出现“配置数据源”向导,后面的步骤就和前面的一样了。
(2)将前面配置好的SqlDataSource控件设置为GridView控件的数据源,本质上就是将GridView控件和SqlDataSource控件绑定到了一起。
因此,GridView控件将显示SqlDataSource控件返回的数据。
图8.6是最后的运行结果画面。
图8.6运行结果
通过上述示例,我们看到SqlDataSource数据源控件功能的强大,使用SqlDataSource数据源控件,只需设置正确的连接字符串信息,定义简单的SQL语句,我们没有手写一行代码,甚至连数据提供程序都不需要定义,就实现了很复杂的功能。
应当说明,SqlDataSource数据源控件本质上是对ADO.NET托管数据提供程序的进一步包装。
因为ADO.NET托管数据提供程序提供对MicrosoftSQLServer、OLEDB、ODBC或Oracle等各类数据库的访问,所以SqlDataSource数据源控件能够从ADO.NET托管数据提供程序支持的数据源中检索数据。
使用SqlDataSource数据源控件访问ODBC、Oracle等数据源的方法,大家可以参考上述例子,此处就不再赘述了。
8.3ObjectDataSource数据源控件
8.3.1ObjectDataSource控件简介
ObjectDataSource控件是另外一个重要的数据源控件,和SqlDataSource控件用于直接连接数据库不同,ObjectDataSource控件的数据源是一个符合一定规范的类(包含一些特殊的方法成员),因此,通常用来指定一个业务层的对象。
为了讨论ObjectDataSource控件,有必要简单回顾一下应用程序的N层结构这一概念。
ASP.NET应用程序开发中目前广泛使用N层结构来改善程序的可维护性以及代码的可重用性。
最常用的是把ASP.NET应用程序分为三个层:
表示层、业务逻辑层和数据访问层。
各层相对独立,通过相应的接口,层与层之间进行信息的传递。
其他N层结构都是三层结构的扩展版本。
表示层:
主要包含窗体、页面元素等用户界面部分。
表示层首先实现与用户的交互,同时还需要事先从业务逻辑层获取数据。
业务逻辑层:
主要包括核心业务相关的逻辑,程序中大多将此部分封装在类中。
业务逻辑层主要负责处理来自数据层的数据,实现系统的业务功能,并将结果返回给表示层。
数据访问层:
主要包括数据存储和与它交互的组件或服务。
显然,采用分层方式设计应用程序,使得每一层相对独立,可以单独修改,整个程序易于扩展、维护等等。
但一般的数据源控件,如前述的SqlDataSource控件,却把表示层和业务逻辑层混合在了一起。
这在应用程序规模较小、功能不复杂的情况下,还看不出有多大的缺陷。
但当应用程序规模扩大,采用SqlDataSource这类控件的缺陷就明显化了。
为此,ASP.NET2.0提供了一个专门的数据源控件ObjectDataSource控件,用于在表示层、业务逻辑层和数据访问层之间构建一座桥梁。
包含ObjectDataSource控件的三层程序结构可用图8.7表示。
图8.7包含ObjectDataSource控件的三层程序结构
1、ObjectDataSource控件常用属性:
表8.4 ObjectDataSource控件的常用属性
属性
说 明
EnableCaching
获取或设置一个布尔值,用于确定是否启用ObjectDataSource控件的数据缓存功能,默认值是true。
InsertMethod
获取或设置一个在控件中实现数据添加的方法名称,默认值为空。
DeleteMethod
获取或设置一个在控件中实现数据删除的方法名称,默认值为空。
SelectMethod
获取或设置一个在控件中实现数据选择的方法名称,默认值为空。
UpdateMethod
获取或设置一个在控件中实现数据更新的方法名称,默认值为空。
CacheDuration
获取或设置由SelectMethod属性值所指定方法返回的缓存数据在内存中存储的时间。
单位为妙,默认值为无限大。
2、ObjectDataSource控件常用方法:
表8.5 ObjectDataSource控件的常用方法
方法
说 明
Insert()
根据InsertMethod指定的方法及其参数,执行一个添加操作。
Delete()
根据DeleteMethod指定的方法及其参数,,执行一个删除操作。
Select()
根据SelectMethod指定的方法及其参数,执行一个选择操作,以实现从数据库中获取数据记录。
Update()
根据UpdateMethod指定的方法及其参数,执行一个更新操作。
3、ObjectDataSource控件常用事件:
ObjectDataSource控件常用事件和SqlDataSource控件的常用事件是一致的,主要包括Deleted、Deleting、Inserted、Inserting、Selected、Selecting、Updateed、Updating等,具体含义,可以参阅表8.4所示。
8.3.2ObjectDataSource控件应用示例
我们通过一个示例来演示ObjectDataSource控件的用法。
同样,为便于观察结果,我们借助数据绑定控件GridView控件在页面上来显示获取的数据。
为在网站中集中连接数据库,建立集中连接数据库的类:
Conn.CS。
类中代码如下:
publicstaticSqlConnectionCreateCon()
{
//连接SQLServer库
returnnewSqlConnection("Server=.;uid=sa;pwd=;database=S_Class");
}
例8.2通过ObjectDataSource控件检索并更新SQLServer数据库Northwind中Products表中的资料。
因为ObjectDataSource控件将用户自己创建的对象绑定到数据控件中,所以,需要用户首先准备好用于表达业务逻辑的中间层,这里用一个类来表达。
1、创建一个Products类
(1)参考上一个示例,在VisualStudio2005中创建一个新网站,命名为ObjectDS。
(2)右击“解决方案资源管理器”中对应项目位置,在系统弹出的快捷菜单中选择“添加新项”,如图8.8所示。
图8.8在项目中添加新项
系统会显示出“添加新项”对话框,在对话框中,选择添加“类”,并将这个类命名为Products。
一般情况下,因为是首次手工添加代码,系统会提示你将你将要建立的“类”放在App_Code文件夹中,我们选择“是”即可。
(3)系统自动打开Products类的代码窗体。
因为是模版,所以大部分的固定内容系统一经自动生成,我们需要添加一个命名空间的:
usingSystem.Data.SqlClient。
然后,在类中添加一个名为GetProducts方法成员。
代码如下:
publicDataSetGetProducts()
{
SqlConnectionoCon=Conn.CreateCon();
stringstrSql="SELECTProductID,ProductName,SupplierID,CategoryIDFROMProducts";
SqlDataAdapteroDA=newSqlDataAdapter(strSql,oCon);
DataSetoDS=newDataSet();
oDA.Fill(oDS,"Products");
returnoDS;
}
根据前面我们所学知识,不难看懂这段代码的含义:
通过定义一个SqlConnection连接对象oCon和一个SqlDataAdapter数据适配器对象oDA,将Northwind数据库的Products表中所有记录取出并填充至内存中的DataSet对象oDS中,最后以DataSet形式返回。
2、添加ObjectDataSource和GridView控件。
(1)切换到主页面Default.aspx的设计视图,从工具箱中分别找到ObjectDataSource控件和数据绑定控件GridView,拖放到页面中适当的位置,如图8.9所示。
图8.9添加ObjectDataSource和GridView控件
如果ObjectDataSource控件上没有显示“ObjectDataSource任务”快捷菜单,则用鼠标右键单击ObjectDataSource控件,然后,在系统弹出的快捷菜单上选择“显示智能标记”。
(2)单击“ObjectDataSource任务”菜单上的“配置数据源”,系统就会弹出“配置数据源”向导。
首先,需要选择业务对象,如图8.10所示。
在“选择业务对象”下拉列表中,可以看到我们刚刚定义好的一个类Products这一业务对象,选择它,并单击“下一步”按钮。
图8.10选择业务对象
(3)向导转入“定义数据方法”画面,如图8.11所示。
我们已经在Products类中定义好了一个用于返回数据集对象的方法GetProducts,所以,可以选择它。
因为,我们在类Products中并没有定义诸如Update,Insert,Delete等更复杂的SQL语句方法,所以,这里对应Update,Insert,Delete等选项为空。
图8.11定义数据方法
(4)单击“完成”,结束ObjectDataSource控件配置数据源任务。
(5)回到主页面Default.aspx的设计视图。
在页面设计窗体上选择GridView控件,确保显示“GridView任务”快捷菜单。
在“选择数据源”列表框中选择已定义好的ObjectDataSource1控件即可,如图8.12。
图8.12设置GridView控件的数据源
这一步,我们实现了数据源于数据显示控件的绑定。
实际上,到这一步,后面的操作就类似于上一个例子了。
图8.13显示了最终的运行结果。
图8.13运行结果
3、对记录进行编辑和修改
(1)修改Products类
上述操作仅仅是通过ObjectDataSource控件实现数据的读取,要想实现对数据记录的修改更新也不是难事。
当然,同样需要在业务逻辑层进行必要的设置。
打开前面定义好的Products类的代码窗体。
在类中继续添加一个名为UpdateProducts方法成员。
代码如下:
publicvoidUpdateProduct(intproductID,stringproductName,intSupplierID,intcategoryID)
{
SqlConnectionoCon=Conn.CreateCon();
stringupdateString="UPDATEProductssetProductName=@ProductName,SupplierID=@SupplierID,CategoryID=@CategoryIDwhereProductID=@ProductID";
SqlCommandcmd=newSqlCommand(updateString,oCon);
cmd.Parameters.AddWithValue("@ProductID",productID);
cmd.Parameters.AddWithValue("@ProductName",productName);
cmd.Parameters.AddWithValue("@SupplierID",SupplierID);
cmd.Parameters.AddWithValue("@CategoryID",categoryID);
oCon.Open();
cmd.ExecuteNonQuery();
oCon.Close();
}
这段代码也不是很麻烦,通过定义一个连接对象oCon和一个数据适配器对象oDA,从数据库中提取资料并填充到数据集对象oDS中。
然后,定义了一个数据行对象DataRow,其字段结构等同于数据集对象oDS中刚刚填充好的数据表。
定义DataRow
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据源 控件 修改 增加 内容