程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET 2.0數據教程之十八:在ASP.NET頁面中處理BLL/DAL層的異常

ASP.NET 2.0數據教程之十八:在ASP.NET頁面中處理BLL/DAL層的異常

編輯:關於ASP.NET

返回“ASP.NET 2.0數據教程目錄”

導言

在一個使用了分層體系架構的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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved