设为首页收藏本站language 语言切换
查看: 1358|回复: 0
收起左侧

验证

[复制链接]
发表于 2010-2-25 10:31:08 | 显示全部楼层 |阅读模式
<p ><B>适用于:</b><p >Microsoft&reg; .NET 应用程序<p ><B>摘要:</b><p >学习向 Microsoft .NET 应用程序公开数据的最佳方式,以及如何实现一个有效的策略以便在分布式应用程序的层间传递数据。(本文包含一些指向英文站点的链接。)<p ><b>目录</b><p ><ul><li>简介<p ><li>将关系数据映射到业务实体<p ><li>实现数据访问逻辑组件<p ><li>实现业务实体<p ><li>事务处理<p ><li>验证<p ><li>异常管理<p ><li>授权与安全性<p ><li>部署<p ><li>附录及其合作者</UL>您可以在应用程序的许多层上进行数据验证。各层适用不同的验证类型:<p ><ul><li>在提交数据之前,客户端应用程序可以在本地验证业务实体数据。 <p ><li>使用 XSD 架构接收业务文档时,业务过程可以验证这些文档。 <p ><li>数据访问逻辑组件和存储过程可以验证数据,以确保引用的完整性并强制遵循约束以及重要的业务规则。</ul>常用验证有两种:<p ><ul><li>即时点验证。这是在一个特定时点执行的验证。例如,在接收 XML 文档时由业务过程对其进行验证。 <p ><li>连续验证。这是在应用程序的许多不同层次上持续进行的一种验证。连续验证的示例包括:<p ><ul><li>用户界面可以指定字段的最大长度以防止用户输入过长的字符串。 <p ><li>DataSet 可以指定数据列的最大长度。 <p ><li>自定义业务实体组件可以对实体数据执行范围检查、长度检查、非空检查以及其他简单测试。 <p ><li>数据访问逻辑组件、存储过程和数据库本身可以执行类似的测试,以便在将数据保存到数据库之前确保其有效性。</ul></ul>有时,您可能希望实现额外的聚合过程或转换过程。这种方法在验证和转换经常变化时可能很有用,但会损失性能。例如,如果一个 ISV 想要使用相同的组件支持数据库架构的两个版本,则您可以创建一个单独的组件来执行两个数据库架构版本之间的验证和转换。<p ><B>如何使用 XSD 架构验证 XML</b><p >要使用 XSD 架构验证 XML 文档,请执行以下步骤:<p ><ol><li>创建一个 XmlValidatingReader 对象作为 XmlTextReader 对象的包装,如以下代码所示:<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>' 创建 XmlValidatingReader 对象,以读取和验证 Product.xmlXmlTextReader tr = new XmlTextReader(&quotroduct.xml&quot;);XmlValidatingReader vr = new XmlValidatingReader(tr);</ccid_code></pre></td></tr></table></ccid_nobr><p ><li>通过使用 ValidationType 枚举指定所需的验证类型。.NET Framework 支持三种类型的 XML 验证:<p >文档类型定义 (DTD);指定 ValidationType.DTD <p >Microsoft XML 精简数据 (XDR) 架构;指定 ValidationType.XDR <p >W3C 标准 XSD 架构;指定 ValidationType.Schema<p >以下代码显示了 ValidationType 枚举的使用:<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>vr.ValidationType = ValidationType.Schema; ' 指定 XSD 架构验证</ccid_code></pre></td></tr></table></ccid_nobr><p ><li>注册一个验证事件处理程序方法,如以下代码所示:<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>vr.ValidationEventHandler += new ValidationEventHandler(MyHandlerMethod);</ccid_code></pre></td></tr></table></ccid_nobr><p ><li>提供一个验证事件处理程序方法的实现,如以下代码所示:<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>public void MyHandlerMethod(object sender, ValidationEventArgs e){   Console.WriteLine(&quot;验证错误:&quot; + e.Message);}</ccid_code></pre></td></tr></table></ccid_nobr><p ><li>读取和验证文档,如以下代码所示。验证错误将被验证事件处理程序方法拾取。<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>try{   while (vr.Read())   {      // 适当处理 XML 数据...   }}catch (XmlException ex){   Console.WriteLine(&quot;XmlException: &quot; + ex.Message);}vr.Close();</ccid_code></pre></td></tr></table></ccid_nobr></ol><p ><B>如何在业务实体组件的属性存取器中验证数据</b><p >以下代码片段显示了如何在自定义实体的属性存取器中进行简单验证。如果验证测试失败,您可以发出一个异常以显示问题的性质。也可以在属性存取器集合中使用正则表达式来验证特定的数据和格式。<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>public class ProductDALC{ ...  public short ReorderLevel  {    get { return reorderLevel; }  }  set  {    if (value &lt; 0)    {      throw new ArgumentOutOfRangeException(&quot;ReorderLevel 不能为负数。&quot;);    }    reorderLevel = value;  }  // 加上 ProductDALC 类中的其他成员...}</ccid_code></pre></td></tr></table></ccid_nobr><p >                                 <p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-6 18:14 , Processed in 0.085232 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表