【问题标题】:How validate data before insert to database C#?如何在插入数据库 C# 之前验证数据?
【发布时间】:2018-10-08 17:48:12
【问题描述】:

我需要在插入数据库之前验证数据。我的网站从 excel 中获取数据,将这些数据复制到 sql server 中。但现在我需要在此之前验证数据 并留下错误消息,因为数据库的结构。 我需要帮助和一些指导我。我是新手请

【问题讨论】:

  • 您是否尝试编写在从 Excel 读取数据和将数据插入数据库之间运行的代码?该代码如何无法按预期工作?
  • 首先你尝试了什么?如果文件较小,您可以将文件导入 C#,或者可以将较大的文件导入临时表,在那里进行验证(甚至将错误附加到每一行),然后将错误保存或发布回您的站点。当您保存它们时,请从临时表中获取并保存到真实表中
  • 您要验证什么?数据是特定格式的吗?它不包含淘气的话?具体说明你在做什么。提供例子
  • 我还没有尝试过任何东西,我想获得建议并选择最佳选择。 Excel 文件包含带有文本和数字的字段以及大约 1000 条记录。例如。如果在列名(varchar)中有人输入了一个数字,我需要在复制到数据库之前验证它并告诉用户。
  • 那么你必须编写一些代码来完成它。

标签: c# asp.net excel model-view-controller


【解决方案1】:

您可以通过多种方式验证数据,根据您的 Excel 文件和流程,您可能需要组合使用。由于最终需要创建一个对象来保存数据,因此您可以实施的一个简单解决方案是利用框架中的 System.ComponentModel.DataAnnotations 命名空间。这使您可以访问[Required][Email] 等验证属性(您也可以扩展和创建自定义验证)。

简单解决方案(利用框架):这基本上是 MVC、EF 和其他框架在添加属性时所做的事情。

   private Tuple<bool, IEnumerable<ValidationResult>> ValidateAnnotations(object model)
   {
            var context = new ValidationContext(model, serviceProvider: null, items: null);
            var validationResult = new List<ValidationResult>();
            var isValid = Validator.TryValidateObject(model, context, validationResult, validateAllProperties: true);

            return new Tuple<bool, IEnumerable<ValidationResult>>(isValid, validationResult);
   }

注意:这是处理手动验证以及属性驱动的另一种方式odetocode

在流程方面;从 excel 解析并生成 sql insert 的有效条目列表和错误报告的无效条目后,您基本上可以验证每一行数据。

【讨论】:

  • 如果你不介意额外的依赖,你也可以使用像fluentvalidation.net 这样的包,它工作得很好,但是你可以选择分离模型和验证所在的位置。这使您可以灵活地根据业务规则为单个模型提供多个验证。
  • 谢谢,我试试
猜你喜欢
  • 1970-01-01
  • 2015-10-25
  • 2015-04-14
  • 1970-01-01
  • 2015-08-15
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多