使用WHERE子句读取包含空行的Excel文件时出现未知错误

excel oledbcommand oledbdatareader sqlbulkcopy

所以客户端上传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子句负责处理),大部分时间都可以工作。但有时候我们会在底部得到这些奇怪的文件,其中包含很多(大约一百万个)空行,我们会得到一个Exception with Unknown作为消息。如果我从OleDbCommand声明中删除WHERE子句,文件加载正常,但我们也插入了一百万个空白行。关于如何处理这个的任何想法?

一般承认的答案

我们在64位Windows服务器上安装了Microsoft Access数据库引擎2010可再发行驱动程序x_64 flavor。在编译要使用此类配置运行的项目时,需要将项目的Platform Target设置为Any CPU。不知怎的,我们默认选择了x86(适用于开发机器)。更改此设置可解决问题。



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因