Неизвестная ошибка чтения файла Excel с пустыми строками с помощью предложения WHERE - PullRequest
0 голосов
/ 25 октября 2011

Таким образом, клиенты загружают файлы Excel нам, и у нас есть служба Windows, которая периодически захватывает новые файлы и загружает содержимое на наш сервер SQL, например:

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties=\"Excel 12.0;HDR=YES;\"";

using (OleDbConnection excelConnection = new OleDbConnection(excelConnectionString))
{
  excelConnection.Open();
  OleDbCommand cmd;
  cmd = new OleDbCommand("Select " + fileID.ToString() + " as [FileID],[AccountName],[Author],[Title],[Body] from [Sheet1$] where [Body] is not null;", excelConnection);
  OleDbDataReader dReader;
  dReader = cmd.ExecuteReader();
  using (SqlBulkCopy sqlBulk = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["VI.OpenAmplify.Properties.Settings.DBConnection"].ConnectionString))
  {
      sqlBulk.DestinationTableName = "Web_OpenAmp_Posts";
      sqlBulk.ColumnMappings.Add("FileID", "FileID");
      sqlBulk.ColumnMappings.Add("AccountName", "AccountName");
      sqlBulk.ColumnMappings.Add("Author", "Author");
      sqlBulk.ColumnMappings.Add("Title", "Title");
      sqlBulk.ColumnMappings.Add("Body", "Body");

      sqlBulk.WriteToServer(dReader);
  }
}

Прекрасно работает большую часть времени, даже если внизу есть несколько пустых строк (об этом заботится предложение WHERE). Но иногда мы получаем эти странные файлы с большим количеством (около миллиона) пустых строк внизу, и мы получаем исключение с неизвестным в качестве сообщения. Если я удалю предложение WHERE из объявления OleDbCommand, файл загрузится нормально, но мы также вставим миллион пустых строк. Есть идеи как с этим бороться?

1 Ответ

0 голосов
/ 01 марта 2012

У нас было Распространяемый Microsoft Access Database Engine 2010 драйвера x_64, установленные на нашем 64-битном сервере Windows.При компиляции проекта для запуска с такой конфигурацией для Platform Target для проекта должно быть установлено значение Любой ЦП.Каким-то образом у нас был выбран x86 по умолчанию (который работает на компьютере разработчика).Изменение этого параметра устранило проблему.

...