Попытка чтения или записи защищенной памяти при преобразовании в CSV - PullRequest
0 голосов
/ 28 февраля 2019

Я прочитал об этой ошибке, но не знаю, как исправить.Краткий обзор автоматизации:

  1. Я получил файл из приложения в формате .txt, содержащий HTML-теги.

  2. Iнеобходимо преобразовать этот файл в csv и изменить некоторые заголовки, прежде чем передать его в конечный пункт назначения.

  3. , чтобы упростить это, я подключаюсь к текстовому файлу через OleDB

  4. Я получаю эту ошибку, возможно, на 1% файлов, обработанных сотнями файлов, обработанных до сих пор.

  5. Я сегментировал код для запускатолько это, чтобы устранить другие потенциальные ошибки в коде.

  6. Я добавил ниже, чтобы позволить ему попасть в процесс обработки ошибок, но ошибка остается, когда я пытаюсь переместить файл к ошибкепапка журнала.

[System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute ()]

Любая помощь очень полезна.

Вот фрагмент кода.

    public static void ConvertExcelToCsv(string excelFilePath, string csvOutputFile, string fileExtType, int worksheetNumber = 1,  bool SQLDataInsert = false)
    {

      switch (fileExtType)
        {
             case ".txt":
                    cnnStr = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"HTML Import;IMEX=1;HDR=NO\"", excelFilePath);
               break;
            default:
                cnnStr = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;IMEX=1;HDR=NO\"", excelFilePath);
                break;
        }
       var cnn = new OleDbConnection(cnnStr);  
       var dt = new DataTable();
       try
        {
            cnn.Open();  // fails here
            string worksheet = schemaTable.Rows[worksheetNumber - 1]["table_name"].ToString().Replace("'", "");
            string sql = String.Format("select * from [{0}]", worksheet);
            var da = new OleDbDataAdapter(sql, cnn);
            da.Fill(dt);
        }
        catch (Exception e)
        {
             cnn.Dispose();
             GeneralFunctions.DisplayTextConsole("Error received trying to process File: " + excelFilePath.ToString(), ConsoleColor.Red, ConsoleColor.White, false);
             File.Move(excelFilePath, Constant._ErrorFileDir + @"\" + Path.GetFileName(ErrFileName));
         }
      }
...