我正在将地理编码数据从 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阅读器代码,那么我们可以提供更多帮助。 但是查看链接页面上的代码,您可以执行以下操作:
while (csv.ReadNextRecord())
{
for (int i = 0; i < fieldCount; i++)
Console.Write(string.Format("{0} = {1};",
headers[i],
csv[i] ?? "null"));
Console.WriteLine();
}
看看我在哪里添加了那个空合并运算符? 这应该将您的输出从:
"AB10","1BH","L",0,0,,,20
自
"AB10","1BH","L",0,0,null,null,20
我使用Microsoft文本驱动程序导入项目的CSV信息。效果很好。我定义了一个 Schema.ini 文件来指定列标题、数据类型、要扫描的行数(MaxScanRows=0,将扫描整个文件)。
我还没有尝试过这个,但是当您使用文本驱动程序时Microsoft您发出选择查询以将数据从 csv 文件中提取出来,我想知道您是否可以添加条件来过滤掉空记录。
如何从.csv填充 IDataReader 以与 SqlBulkCopy.WriteToServer (IDataReader) 一起使用
http://msdn.microsoft.com/en-us/library/windows/desktop/ms709353(v=vs.85).aspx
http://www.connectionstrings.com/textfile
希望这有帮助。
为了处理空条目,我最终将 csv 解析为一次 1000 个条目的 DataTable 对象,然后在我去的时候导入它们。