Gestione di campi vuoti in csv durante l'importazione di massa nel database

c# csv idatareader sqlbulkcopy

Domanda

Sto importando i dati del codice geografico nel nostro database da un file CSV.

Ho usato la seguente libreria Un veloce lettore csv per leggere il csv e quindi usare SqlBulkCopy

Ecco un esempio dei dati che sto importando

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

Funziona bene con dati validi, ma nella riga superiore genererà un'eccezione perché il database è impostato per non accettare valori nulli.

C'è un modo per dire a bulkcopy di ignorare i cattivi dati? Ho cercato di far sì che il lettore csv ignorasse le righe errate usando le proprietà built-in della libreria in questo modo ma non sembrano funzionare.

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

Immagino che un'altra opzione sarebbe di pre-analizzare il csv e rimuovere tutte le righe offensive. Forse c'è una migliore libreria csv là fuori per .net?

Risposta accettata

Per gestire le voci nulle ho finito per analizzare il csv in un oggetto DataTable 1000 voci alla volta e poi le ho importate mentre andavo.


Risposta popolare

Se potessi pubblicare il tuo codice lettore csv, potremmo aiutare di più. Ma guardando il codice sulla tua pagina collegata, potresti fare qualcosa del genere:

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

Vedi dove ho aggiunto quell'operatore a coalescenza nulla? Questo dovrebbe cambiare il tuo output da:

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

a

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


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow