Error desconocido al leer el archivo de Excel con filas en blanco usando la cláusula WHERE

excel oledbcommand oledbdatareader sqlbulkcopy

Pregunta

Entonces, los clientes nos cargan archivos de Excel y tenemos un servicio de Windows que periódicamente toma nuevos archivos y carga de forma masiva los contenidos a nuestro servidor SQL, de esta manera:

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);
  }
}

Funciona bien la mayor parte del tiempo, incluso si hay algunas filas en blanco en la parte inferior (la cláusula WHERE se ocupa de eso). Pero a veces obtenemos estos archivos extraños con muchas (aproximadamente un millón) filas en blanco en la parte inferior y obtenemos una Excepción con Desconocido como el mensaje. Si elimino la cláusula WHERE de la declaración OleDbCommand, el archivo se carga bien, pero también tenemos un millón de filas en blanco insertadas. ¿Alguna idea sobre cómo lidiar con esto?

Respuesta aceptada

Teníamos instalado el motor x_64 de Microsoft Access Database Engine 2010 Redistributable en nuestro servidor de Windows de 64 bits. Al compilar el proyecto para que se ejecute con dicha configuración, Platform Target para el proyecto debe configurarse en Cualquier CPU. De alguna manera tuvimos x86 seleccionado de forma predeterminada (que funciona en la máquina dev). Cambiar esta configuración solucionó el problema.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué