ASP.NET 2.0數(shù)據(jù)教程:給DataRow添加字段級驗證
給DataRow添加字段級驗證是指在插入或更新時檢查業(yè)務(wù)對象所涉及到的所有屬性值。拿產(chǎn)品來舉個例,某些字段級的驗證規(guī)則如下所示:
· ProductName字段不得超過40個字符
· QuantityPerUnit字段不得超過20個字符
· ProductID、ProductName以及Discontinued字段是必填的,而其他字段則是可填可不填的
· UnitPrice、UnitsInStock、UnitsOnOrder以及ReorderLevel字段不得小于0
這些規(guī)則可以或者說是應(yīng)該在數(shù)據(jù)庫層被描述出來。ProductName和QuantityPerUnit字段上的字符數(shù)限制可以通過Products表中相應(yīng)列的數(shù)據(jù)類型來實現(xiàn)(分別為nvarchar(40) and nvarchar(20))。字段“是否必填”可以通過將數(shù)據(jù)庫中表的相應(yīng)列設(shè)置為“允許為NULL”來實現(xiàn)。為了保證UnitPrice、UnitsInStock、UnitsOnOrder以及ReorderLevel字段的值不小于0,可以分別在它們的相應(yīng)列上加一個約束。
除了在數(shù)據(jù)庫中應(yīng)用了這些規(guī)則之外,它們同時也將被其應(yīng)用在DataSet上。事實上,字段長度和是否允許為空等信息已經(jīng)被應(yīng)用到了各DataTable的DataColumn集合中。我們可以在數(shù)據(jù)集設(shè)計器(DataSet Designer)中看到已經(jīng)存在的字段級驗證,從某個DataTable中選擇一個字段,然后在屬性窗口中就可以找到了。如圖四所示,ProductDataTable中的QuantityPerUnit字段允許空值并且***長度為20各字符。如果我們試圖給某個ProductsDataRow的QuantityPerUnit屬性設(shè)置一個長度大于20個字符的字符串,將會有一個ArgumentException被拋出。
圖四:DataColumn提供了基本的字段級驗證
不幸的是,我們不能通過屬性窗口指定一個邊界檢查,比如UnitPrice的值不能小于0。為了提供這樣的字段級驗證,我們需要為DataTable的ColumnChanging事件建立一個Event Handler。正如上一節(jié)教程中所提到的那樣,由類型化數(shù)據(jù)集創(chuàng)建的DataSet、DataTable還有DataRow對象可以通過partial類來進(jìn)行擴(kuò)展。使用這個技術(shù),我們可以為ProductDataTable創(chuàng)建一個ColumnChanging的Event Handler。我們先在App_Code文件夾中新建一個名為ProductsDataTable.ColumnChanging.cs的類文件,如下圖所示。
圖五:在App_Code文件夾中添加新類
然后,給ColumnChanging事件創(chuàng)建一個Event handler,以保證UnitPrice、UnitsInStock、UnitsOnOrder以及ReorderLevel字段的值不小于0。如果這些列的值超出范圍就拋出一個ArgumentException。
- public partial class Northwind
- {
- public partial class ProductsDataTable
這樣就實現(xiàn)了asp.net 2.0數(shù)據(jù)操作中的業(yè)務(wù)邏輯層的第三步:給DataRow添加字段級驗證。
【編輯推薦】