在批量导入到数据库期间处理csv中的空字段

c# csv idatareader sqlbulkcopy

我正在从csv文件将地理编码数据导入我们的数据库。

我使用了以下库快速csv阅读器来读取csv然后使用SqlBulkCopy

这是我正在导入的数据的示例

"AB10","1BH","L",0,0,,,20
"AB10","1BR","L",39320,80570,57.14214,-2.11400,21

它在良好的数据上运行正常但在顶行它会引发异常,因为数据库设置为不接受空值。

有没有办法告诉批量检查忽略坏数据?我试图通过使用库的内置属性来让csv阅读器忽略坏行,但它们似乎不起作用。

csv.SkipEmptyLines = true;
csv.MissingFieldAction = MissingFieldAction.ParseError;
csv.DefaultParseErrorAction = ParseErrorAction.AdvanceToNextLine;

我想另一个选择是预先解析csv并删除所有违规行。也许有一个更好的csv库为.net?

一般承认的答案

为了处理空条目,我最终一次将csv解析为一个DataTable对象1000个条目,然后在我去的时候导入它们。


热门答案

如果您可以发布您的csv阅读器代码,那么我们可以提供更多帮助。但是查看链接页面上的代码,您可以执行以下操作:

while (csv.ReadNextRecord())
    {
        for (int i = 0; i < fieldCount; i++)
            Console.Write(string.Format("{0} = {1};",
                          headers[i],
                          csv[i] ?? "null"));
        Console.WriteLine();
    }

看看我添加了null-coalescing运算符的位置?这应该改变你的输出:

"AB10","1BH","L",0,0,,,20

"AB10","1BH","L",0,0,null,null,20


许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因