ASP.NET 2.0数据教程:给DataRow添加字段级验证

开发 后端
本文主要介绍了asp.net 2.0数据操作中的业务逻辑层的第三步:给DataRow添加字段级验证。

给DataRow添加字段级验证是指在插入或更新时检查业务对象所涉及到的所有属性值。拿产品来举个例,某些字段级的验证规则如下所示:

 ·         ProductName字段不得超过40个字符

·         QuantityPerUnit字段不得超过20个字符

·         ProductID、ProductName以及Discontinued字段是必填的,而其他字段则是可填可不填的

·         UnitPrice、UnitsInStock、UnitsOnOrder以及ReorderLevel字段不得小于0

这些规则可以或者说是应该在数据库层被描述出来。ProductName和QuantityPerUnit字段上的字符数限制可以通过Products表中相应列的数据类型来实现(分别为nvarchar(40) and nvarchar(20))。字段“是否必填”可以通过将数据库中表的相应列设置为“允许为NULL”来实现。为了保证UnitPrice、UnitsInStock、UnitsOnOrder以及ReorderLevel字段的值不小于0,可以分别在它们的相应列上加一个约束。

除了在数据库中应用了这些规则之外,它们同时也将被其应用在DataSet上。事实上,字段长度和是否允许为空等信息已经被应用到了各DataTable的DataColumn集合中。我们可以在数据集设计器(DataSet Designer)中看到已经存在的字段级验证,从某个DataTable中选择一个字段,然后在属性窗口中就可以找到了。如图四所示,ProductDataTable中的QuantityPerUnit字段允许空值并且***长度为20各字符。如果我们试图给某个ProductsDataRow的QuantityPerUnit属性设置一个长度大于20个字符的字符串,将会有一个ArgumentException被抛出。

DataColumn提供了基本的字段级验证 

图四:DataColumn提供了基本的字段级验证

不幸的是,我们不能通过属性窗口指定一个边界检查,比如UnitPrice的值不能小于0。为了提供这样的字段级验证,我们需要为DataTable的ColumnChanging事件建立一个Event Handler。正如上一节教程中所提到的那样,由类型化数据集创建的DataSet、DataTable还有DataRow对象可以通过partial类来进行扩展。使用这个技术,我们可以为ProductDataTable创建一个ColumnChanging的Event Handler。我们先在App_Code文件夹中新建一个名为ProductsDataTable.ColumnChanging.cs的类文件,如下图所示。

在App_Code文件夹中添加新类 

图五:在App_Code文件夹中添加新类

然后,给ColumnChanging事件创建一个Event handler,以保证UnitPrice、UnitsInStock、UnitsOnOrder以及ReorderLevel字段的值不小于0。如果这些列的值超出范围就抛出一个ArgumentException。

  1. public partial class Northwind    
  2. {    
  3.     public partial class ProductsDataTable    
  4.     {    
  5.         public override void BeginInit()    
  6.          {    
  7.             this.ColumnChanging += ValidateColumn;    
  8.          }    
  9.    
  10.          void ValidateColumn(object sender, DataColumnChangeEventArgs e)    
  11.          {    
  12.             if(e.Column.Equals(this.UnitPriceColumn))    
  13.             {    
  14.                if(!Convert.IsDBNull(e.ProposedValue) && (decimal)e.ProposedValue <  0)    
  15.                {    
  16.                   throw new ArgumentException("UnitPrice cannot be less than zero""UnitPrice");    
  17.                }    
  18.             }    
  19.             else if (e.Column.Equals(this.UnitsInStockColumn) ||    
  20.                     e.Column.Equals(this.UnitsOnOrderColumn) ||    
  21.                    e.Column.Equals(this.ReorderLevelColumn))    
  22.             {    
  23.                 if (!Convert.IsDBNull(e.ProposedValue) && (short)e.ProposedValue <  0)    
  24.                 {    
  25.                     throw new ArgumentException(string.Format("{0} cannot be less than zero", e.Column.ColumnName), e.Column.ColumnName);    
  26.                 }    
  27.             }    
  28.          }    
  29.     }    
  30. }   

这样就实现了asp.net 2.0数据操作中的业务逻辑层的第三步:给DataRow添加字段级验证。

【编辑推荐】

  1. 如何在IIS6.0中部署asp.net mvc程序
  2. 用Winform傻瓜式搭建asp.net mvc框架
  3. ASP.NET Session失效的编程思路
  4. ASP.NET Session 状态的存储
  5. 了解ASP.NET Web应用程序模型

责任编辑:book05 来源: 博客园
相关推荐

2009-07-24 16:55:53

添加aspx页面

2009-07-24 13:08:03

BLL类ASP.NET 2.0

2009-07-24 14:23:16

定制编码DAL

2009-07-27 03:21:00

breadcrumb导

2009-07-24 17:08:31

添加站点地图asp.net

2009-07-27 09:28:55

TableAdapte

2009-07-27 03:23:00

Default.asp

2009-07-24 13:45:28

添加参数化

2009-07-27 08:51:24

ObjectDataS

2009-07-24 17:15:52

SiteMapData

2009-07-27 09:35:57

业务逻辑层

2009-07-27 16:09:05

GridView显示数

2009-07-24 12:41:21

BLL类

2009-07-24 16:37:04

创建母版页asp.net 2.0

2009-07-27 09:01:44

ObjectDataS

2009-07-27 16:22:54

GridView选择行

2009-07-24 13:25:43

创建数据访问层

2010-06-25 08:51:46

ASP.NET MVC

2015-07-10 09:05:33

ASP.NET路由优先级

2015-10-29 13:15:50

ASP.NETWebApi路由
点赞
收藏

51CTO技术栈公众号