演练:向 N 层数据应用程序添加验证
更新:2007 年 11 月
“验证数据”是指确认输入到数据对象(例如,DataTable 或 LINQ to SQL 类)中的值是否符合对象架构内的约束的过程。 验证还可确保符合为应用程序建立的规则。在将更新发送到基础数据库之前对数据进行验证是一种很好的做法,这样可以减少错误。还可以减少应用程序和数据库之间的潜在往返行程次数。
本演练提供向 n 层应用程序(在演练:创建 N 层数据应用程序主题中创建的解决方案)添加验证的分步说明。
在本演练中,您将学习如何执行以下任务:
使用数据集设计器自动生成分部类。
添加代码,在各个列中的值更改时执行验证。
先决条件
若要完成此演练,需要满足以下条件:
在演练:创建 N 层数据应用程序中创建的解决方案和关联项目。
能够访问 Northwind 示例数据库。有关更多信息,请参见如何:安装示例数据库。
说明: |
---|
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您使用的 Visual Studio 版本及设置。有关更多信息,请参见Visual Studio 设置。 |
打开 NTierWalkthrough 解决方案
打开 NTierWalkthrough 解决方案
在“文件”菜单上指向“打开”,单击“项目/解决方案”,然后定位到 NTierWalkthrough.sln 文件的位置。
说明: NTierWalkthrough.sln 文件是在演练:创建 N 层数据应用程序主题中创建的,它是完成本演练的必备条件。如果尚未完成演练:创建 N 层数据应用程序主题,请将其完成,完成后保存所有项目。
添加验证,在单个列更改过程中检查数据
此过程将添加验证,以验证新订单中的 OrderDate 列是否设置为当前日期或更早日期的值。此应用程序的要求是 OrderDate 列不能有晚于今天的日期;不允许出现将来的订单。
添加验证,验证输入 OrderDate 列中的值
在解决方案资源管理器中双击 DataAccessTier 项目中的 NorthwindDataSet.xsd 文件,以在数据集设计器中打开数据集。
在设计器中双击 Orders 表的 OrderDate 列。此操作将创建 ColumnChanging 事件处理程序。
说明: 数据集设计器不会自动为 C# 事件创建事件处理程序。处理该事件所需的 C# 代码包含在本过程的后面部分。该代码创建 SampleColumnChangingEvent,然后使用 EndInit 方法订阅 ColumnChanging 事件。
添加代码以验证 OrderDate 列的 e.ProposedValue 是否包含当前日期或更早日期。如果建议的值无效,请设置该列,指示其包含一个错误。
下面的代码示例验证 OrderDate 列是否包含当前日期或更早日期。如果 OrderDate 值为晚于今天的日期,则 OrderDate 列设置为错误。如果 OrderDate 为今天或更早,则 Else 子句清除该错误。
将 Visual Basic 代码粘贴到 ColumnChanging 事件处理程序中。将 C# 代码粘贴到 OrdersDataTable 分部类声明中。
If (e.Column.ColumnName = Me.OrderDateColumn.ColumnName) Then If CType(e.ProposedValue, DateTime) > Today Then e.Row.SetColumnError(e.Column, "OrderDate cannot be in the future") Else e.Row.SetColumnError(e.Column, "") End If End If
// Replace the NorthwindDataSet partial class with the following: public partial class NorthwindDataSet { partial class OrdersDataTable { public override void EndInit() { base.EndInit(); // Configure the ColumnChanging event // to call the SampleColumnChangingEvent method. ColumnChanging += SampleColumnChangingEvent; } public void SampleColumnChangingEvent(object sender, System.Data.DataColumnChangeEventArgs e) { if (e.Column.ColumnName == OrderDateColumn.ColumnName) { if ((System.DateTime)e.ProposedValue > System.DateTime.Today) { e.Row.SetColumnError("OrderDate", " OrderDate cannot be in the future"); } else { e.Row.SetColumnError("OrderDate", ""); } } } } }
测试应用程序
若要测试该应用程序,请将 OrderDate 列的值更改为一个无效的日期。
测试应用程序
按 F5。
来自 Customers 和 Orders 表的数据出现在窗体上。
在包含订单的 DataGridView 中,将(任何记录的)OrderDate 列中的值更改为明天的日期。
将光标从该行移开以接受更改。
验证失败,并且在包含无效值的 OrderDate 单元格中出现一个错误图标。
将鼠标指针停留在错误图标之上以查看验证错误。
关闭窗体。
后续步骤
根据应用程序的要求,在向 n 层应用程序添加验证之后,可能还要执行多个步骤。例如,可能要对此应用程序进行如下增强:
- 添加验证,在整条记录更改时对更改进行验证。有关信息,请参见如何:向 N 层数据集添加验证。