【发布时间】:2012-06-01 22:35:31
【问题描述】:
在加载到 SQL 之前,我正在使用 schema.ini 来验证 CSV 文件中的数据类型/列。如果一行中存在数据类型不匹配,它仍将导入该行,但将该特定不匹配单元格留空。如果有任何问题和/或提供错误报告(即哪一行有问题),我是否可以阻止用户导入 CSV 文件。
【问题讨论】:
标签: asp.net sql validation csv schema
在加载到 SQL 之前,我正在使用 schema.ini 来验证 CSV 文件中的数据类型/列。如果一行中存在数据类型不匹配,它仍将导入该行,但将该特定不匹配单元格留空。如果有任何问题和/或提供错误报告(即哪一行有问题),我是否可以阻止用户导入 CSV 文件。
【问题讨论】:
标签: asp.net sql validation csv schema
最好的方法是检查文件是否有任何不匹配;但是在大文件的情况下,那么这是不可行的。 您可能需要先加载它,然后检查表中加载的数据是否不匹配。这比检查文件要快得多(您可以使用简单的 T-SQL 脚本来检查表中的空值)。 如果发现不匹配,则可以通知用户,然后可以清除表。
【讨论】:
看看他的 FileHelpers 库:http://www.filehelpers.com/
这是一个非常强大的库,可以进行各种导入,包括 csv,它们还有一个非常简洁的错误处理部分
使用不同的错误模式 FileHelpers 库支持 用于 3 种错误处理。
在标准模式下,您可以在发生故障时捕获异常。 这种方法还不错,但是您会丢失一些有关当前的信息 记录,你不能使用记录数组,因为没有分配。
更智能的方法是使用 ErrorMode.SaveAndContinue 的 错误管理器:
使用这样的引擎,您可以在记录中获得良好的记录 数组,在 ErrorManager 中你有错误的记录并且可以 随心所欲。
另一种选择是忽略错误并继续显示 这个例子
1 engine.ErrorManager.ErrorMode = ErrorMode.IgnoreAndContinue; 2 3 条记录 = engine.ReadFile(... 复制到剪贴板 | 查看纯文本 | 打印 | ? engine.ErrorManager.ErrorMode = ErrorMode.IgnoreAndContinue;
records = engine.ReadFile(... 在 records 数组中你只有 良好的记录。
【讨论】: