0

したがって、クライアントは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句がそれを処理します)。しかし、時々、下部に多くの(約100万)空白行があるこれらの奇妙なファイルを取得し、メッセージとして不明の例外を取得します。OleDbCommand宣言からWHERE句を削除すると、ファイルは正常にロードされますが、100万行の空白行も挿入されます。これに対処する方法について何かアイデアはありますか?

4

1 に答える 1

0

64ビットWindowsサーバーにMicrosoftAccessDatabaseEngine2010再頒布可能ドライバーx_64フレーバーをインストールしましたこのような構成で実行するプロジェクトをコンパイルする場合、プロジェクトのプラットフォームターゲットを任意のCPUに設定する必要があります。どういうわけか、デフォルトでx86が選択されていました(これは開発マシンで動作します)。この設定を変更すると、問題が修正されました。

于 2012-03-01T16:57:13.197 に答える