首页 / 网页编程 / ASP.NET / ASP.NET 2.0数据教程之十八:在ASP.NET页面中处理BLL/DAL层的异常
ASP.NET 2.0数据教程之十八:在ASP.NET页面中处理BLL/DAL层的异常2010-08-09 翻译:cnblogs №.零零伍返回“”导言在一个使用了分层体系架构的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.ComponentModel.DataObjectMethodType.Update, false)]
2public bool UpdateProduct(string productName, decimal? unitPrice, short? unitsInStock, int productID)
3{
4 Northwind.ProductsDataTable products = Adapter.GetProductByProductID (productID);
5 if (products.Count == 0)
6 // no matching record found, return false
7 return false;
8
9 Northwind.ProductsRow product = products[0];
10
11 product.ProductName = productName;
12 if (unitPrice == null) product.SetUnitPriceNull();
13 else product.UnitPrice = unitPrice.Value;
14 if (unitsInStock == null) product.SetUnitsInStockNull();
15 else product.UnitsInStock = unitsInStock.Value;
16
17 // Update the product record
18 int rowsAffected = Adapter.Update(product);
19
20 // Return true if precisely one row was updated, otherwise false
21 return rowsAffected == 1;
22}
23