Search code examples
csvhelper

In CsvHelper how to catch a conversion error and know what field and what row it happened in?


I am using the class CsvReader successfully and am happy with it, however, the file that I consume is being produced by a group which changes column formats without letting me know.

So, one moment everything is working, then the next morning things break and the try catch block around csv.GetRecord<MyType>() catches the error and logs the error, however I can't gather any valuable info from the Exception instance. It just says: "The conversion cannot be performed." and the InnerException has nothing. Not very useful. I don't even know which one of my 150 columns are causing the problem.

Can you help me figure out how I can pinpoint which column in which row is causing the problem?

Thanks


Solution

  • First of all, it seems that I need to catch CsvTypeConverterException.

     while (csv.Read())
        {
           try
           {    
              var record = csv.GetRecord<MyType>();    
           }
           catch (CsvTypeConverterException ex)
           {
             //ex.Data.Values has more info...
           }
        }
    

    I now know how to investigate what went wrong, but how do I make sure that that field is skipped but the rest of the fields in that row are converted, so that not the entire row is thrown away?

    Thanks