ASP.NET 2.0 ObjectDataSource控件用法实例
ObjectDataSource控件是ASP.NET2.0里新推出的控件,功能强大.ObjectDataSource控件与SqlDataSource控件的对象模型是类似的。ObjectDataSource没有ConnectionString属性,它暴露了TypeName属性,用于指定需要实例化的执行数据操作的对象类型(类名)。ObjectDataSource控件与SqlDataSource的命令属性相似,也支持SelectMethod、UpdateMethod、InsertMethod和DeleteMethod等属性,用于指明执行这些数据操作的关联类型的方法。本文将解释建立数据访问层和业务逻辑层组件,并通过ObjectDataSource对象展示ASP.NET 2.0数据组件的技术。
绑定到数据访问层
数据访问层组件封装了那些使用SQL命令查询和修改数据库的ADO.NET代码。在典型情况下,它抽象了建立ADO.NET连接和命令的细节信息,暴露了可以通过适当参数调用的方法。典型的数据访问层组件可能暴露了下面一些方法:
| public class MyDataLayer { public DataView GetRecords(); public DataView GetRecordsByCategory(String categoryName); public DataView GetRecordByID(int recordID); public int UpdateRecord(int recordID, String recordData); public int DeleteRecord(int recordID); public int InsertRecord(int recordID, String recordData); } |
ObjectDataSource可以使用下面的方式来关联到这个类型:
| <asp:ObjectDataSource TypeName="MyDataLayer" SelectMethod="GetRecords" UpdateMethod="UpdateRecord" DeleteMethod="DeleteRecord" InsertMethod="InsertRecord" runat="server"/> |
ObjectDataSource要求对象有非常特殊的设计模式。这些约束都是Web应用程序请求所处的无状态的(stateless)环境引起的。由于在典型情况下,对象的建立和销毁都是为了服务于一个请求,因此通过对象数据源绑定的对象也是无状态的。在默认情况下,ObjectDataSource采用TypeName属性指定的类型的默认的构造函数(不带参数),尽管通过处理ObjectCreating事件来建立一个自定义对象实例,并把它指定给事件参数的ObjectInstance属性,从而实现实例化也是可行的。与SelectMethod属性关联的对象方法可以返回任何对象、Ienumerable列表、集合或数组。在上面的数据访问层示例中,DataView对象实现了IEnumerable接口。我们在下一部分将讨论到,这些方法也可以返回强化类型的集合或对象。
| GetProducts() -> ProductCollection GetProductsDataSet() -> DataSet GetProduct (int productId) -> Product |
Update、Insert和Delete一般把单独的数据项字段作为参数,也可以把带有数据项字段公共属性的集合类对象作为参数。
| UpdateProduct (int id, String name, double price, bool inStock) UpdateProduct (Product p) // p.ID, p.Name, p.Price, p.InStock DeleteProduct (int id) |
与SqlDataSource的例子类似,传递到Update、Insert和Delete方法的数据项的参数名称或属性必须与SelectMethod返回的字段相同,这样GridView/DetailsView才能自动地进行更新/删除/插入操作。与SqlDataSource类似,ObjectDataSource方法的参数也可以与数据参数对象相关联,使用SelectParameters、FilterParameters、UpdateParameters、DeleteParameters或InsertParameters集合。
下面的例子演示了一个通过数据访问层组件(AuthorsDB)暴露数据的ObjectDataSource控件。这个类型的类文件存放在应用程序的App_Code目录中,在运行时ASP.NET动态地编译它。
| <asp:ObjectDataSource ID="ObjectDataSource2" Runat="server" TypeName="AuthorsDB" SelectMethod="GetStates"/> <asp:ObjectDataSource ID="ObjectDataSource1" Runat="server" TypeName="AuthorsDB" SelectMethod="GetAuthorsByState" UpdateMethod="UpdateAuthor" OldValuesParameterFormatString="{0}"> <SelectParameters> <asp:ControlParameter Name="state" PropertyName="SelectedValue" ControlID="DropDownList1"/> </SelectParameters> </asp:ObjectDataSource> |
关于数据访问层,我们还需要重点的注意的是,由于SelectMethod把执行查询的结果作为数据视图返回,它仍然把下层数据库的大纲暴露给了显示页面。还有,在数据访问层没有业务规则;它只是简单地执行查询和返回结果。如果需要把显示与数据库大纲隔离开来,并引入业务规则或验证过程,通常需要把数据访问层包装到业务逻辑层中。
业务逻辑层与DAL类似,它给ObjectDataSource暴露了无状态的方法,用于绑定Web页面中的控件。但是,它一般不会直接返回ADO.NET结果,而是返回强化类型的对象,这些对象表现了应用程序所使用的业务实体。这种显示层与下层数据存储大纲的分离,使我们更容易地单独维护站点中的数据访问部分,而不用修改使用数据的页面。只要有恰当的中间层,你就可以全面修改下层数据存储大纲,而不用更新应用程序中的独立页面。
最新文章
- 客户端与服务器端对URL字符编码和解 [05-07]
- 高手过招 ASP.NET中防范SQL注入式攻 [12-25]
- ASP.NET2.0 AJAX中调用服务器Webse [11-29]
- ASP.NET中检测浏览器属性的方法及代 [11-29]
- ASP.NET2.0中Web Parts介绍及使用实 [11-29]
- 如何实现ASP.NET网站个性化的元素及 [11-24]
- 自定义控件把脚本文件编译为内嵌资 [11-24]
- ASP.NET2.0向其它网页传递信息的方 [11-24]
- 组合ASP.NET数据控件构建接口强大的 [11-24]
- Asp.net中创建类似Google自动感应的 [11-24]
推荐文章


热点文章
亲密接触ASP.Net(1-14)----站长强
ASP.NET中常用的优化性能方法详解
HTML图像热区基本介绍及实例代码
ASP.NET1.1中如何实现动态树实例
ASP.NET 2.0 ObjectDataSource控
Asp.Net时间格式转换方法
ASP.NET生成静态网页的方法
编程高手谈ASP.NET状态管理之客户
Asp.net页面之间跳转的三种方法比
ASP.NET的 Session 详解
深入分析编译asp.net 2.0项目到d
ASP.NET状态保存的方法详细介绍
ASP.NET性能优化-数据库方面的选
ASP.NET页面间传值方法大集会
实例:利用AJAX和ASP.NET实现简单
探讨ASP.NET的本质之IIS以及进程
ASP.NET用户控件返回事件的原理及
如何用ASP.NET 2.0主题控制网站外
ASP.NET性能优化-页面及控件
使用ASP.NET AJAX实现幻灯片效果
请慎用ASP.Net的validateRequest
ASP.NET2.0全新增加控件之ImageM
教你如何利用ASP.net编写发送Ema
完美教程:Asp.net如何导出pdf格式
ASP.NET2.0中CSS失效解决方案大集
结合工作经验总结asp.net几个常用
深入探讨ASP.NET实现回调实现的步
ASP.NET中如何实现通过对话框方式
asp.net数据校验部分的封装与应用
.NET用户控件基本使用及如何创建

