Я импортирую данные геокода в нашу базу данных из файла 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();
}
Смотрите, где я добавил, что оператор с нулевым коалесцентом? Это должно изменить ваш результат:
"AB10","1BH","L",0,0,,,20
в
"AB10","1BH","L",0,0,null,null,20