WHERE 절을 사용하여 빈 행이있는 Excel 파일을 읽는 중 알 수없는 오류가 발생했습니다.

excel oledbcommand oledbdatareader sqlbulkcopy

문제

그래서 클라이언트는 Excel 파일을 우리에게 업로드하고 주기적으로 새 파일을 가져 와서 SQL 서버에 내용을 대량로드하는 Windows 서비스를 제공합니다.

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 절은이를 처리합니다). 그러나 때로는 바닥에 빈 행 (약 백만 개)이있는 이상한 파일을 가져오고 메시지로 알 수없는 예외가 발생합니다. OleDbCommand 선언에서 WHERE 절을 제거하면 파일이 잘로드되지만 100 만 개의 빈 행이 삽입됩니다. 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

수락 된 답변

우리는 Microsoft Access Database Engine 2010 재배포 가능 드라이버 x_64 flavor를 64 비트 Windows 서버에 설치했습니다. 이러한 구성으로 실행할 프로젝트를 컴파일 할 때 프로젝트의 플랫폼 대상을 모든 CPU로 설정해야합니다. 어떻게 든 우리는 x86 (dev 머신에서 작동)을 기본적으로 선택했습니다. 이 설정을 변경하면 문제가 해결되었습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.