中操作数据::在 在 ASP.NET 2.0 中操作数据 在 ASP.NET 页面中 处理 BLL/DAL 层的异常
导言
在一个使用了分层体系架构的 ASP.NET web 应用
系统里处理数据,一般遵循以下几步: 1. 确定业务逻辑层需要调用哪个方法, 并且需要出入哪些参数. 这些参数可以通过硬编码 设置,程序自动设定,或者由用户输入. 2. 3. 调用此方法. 处理结果.当调用一个返回数据的 BLL 方法时,这包括绑定数据到 Data Web 服务器 控件.而对于修改数据的 BLL 方法而言,这包括基于返回值的基础上执行某些动作,或 者适当地处理在第二步中引发的异常. 正如我们在前一节里看到的,无论 ObjectDataSource 控件还是数据 Web 服务器控件,都为 第 1 和第 3 步提供了可扩展性.例如 GridView 控件,触发它的 RowUpdating 事件之前把它 的字段的值赋值到 ObjectDataSource 的 UpdateParameters 集合; ObjectDataSource 在 完成它的操作之后触发 RowUpdated 事件. 我们已经检测到第 1 步中触发的事件,并且看过了如何使用它们实现自定义出入参数或者取消 操作.这一节我们将把我们的注意力转到操作完成后所触发的事件.通过这些 post 级的 event handler 和其它,可以判断在操作过程中是否产生了一个异常,并且适当地处理它,在屏幕中 显示友好的错误信息要优于转到 ASP.NET 的默认错误处理页. 为了举例说明这些 post 级事件的
工作方式, 让我们创建一个页面, 它在一个可编辑的 GridView 中列出产品信息.当更新一个产品时,如果引发了一个异常,我们的 ASP.NET 页面会在 GridView 控件的上方显示一个简短的信息,说明出现了一个
问题.好吧,让我们开始!
第一步: 第一步 为产品创建一个可编辑的 GridView
这一节里我们创建一个可编辑的 GridView,它仅仅包含两个的字段,ProductName 和 UnitPrice .这需要为 ProductsBLL 类的 UpdateProduct 方法增加一个额外的重载,它 仅仅接受 3 个输入参数(product's name,unit price,和 ID),相对于接受每一个产品的
字段的方法.在本节里让我们再一次练习一下这些技巧,创建一个可编辑的 GridView,它显示 产品的 name,quantity per unit,unit price,和 units in stock,但仅仅允许 name,unit price,和 units in stock 可编辑. 为了提供这个场景,我们需要对 UpdateProduct 方法的另一个重载,它接收 4 个参数: product's name,unit price,units in stock 和 ID.在 ProductsBLL 类中添加下面这个方 法: 1 [System.ComponentModel.DataObjectMethodAttribute(System.ComponentMo del.DataObjectMethodType.Update, false)] 2 public bool UpdateProduct(string productName, decimal? unitPrice, short? unit sInStock, int productID) 3 4 { Northwind.ProductsDataTable products = Adapter.GetProductByProductID
(productID); 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // Return true if precisely one row was updated, otherwise false // Upda
te the product record int rowsAffected = Adapter.Update(product); product.ProductName = productName; if (unitPrice == null) product.SetUnitPriceNull(); else product.UnitPrice = unitPrice.Value; if (unitsInStock == null) product.SetUnitsInStockNull(); else product.UnitsInStock = unitsInStock.Value; Northwind.ProductsRow product = products[0]; if (products.Count == 0) // no matching record found, return false return false;
21 22 } 23
return rowsAffected == 1;
完成了此方法后,我们可以创建一个 ASP.NET 页面,它允许编辑这四个产品字段.打开 EditInsertDelete 文件夹里的 ErrorHandling.aspx 页面,并通过设计器添加一个 GridView 控件到页面中.绑定这个 GridView 到一个新的 ObjectDataSource 控件,映射 Select()方法到 ProductsBLL 类的 GetProducts()方法, 方法 Update()映射到刚刚创建 的 UpdateProduct 重载.
方法重载, 图 1: