簡體   English   中英

“Microsoft.ace.oledb.12.0”未從服務器 (IIS7) 上的 .xlsx 文件中讀取所有行

[英]'Microsoft.ace.oledb.12.0' not read all the rows from .xlsx file on server (IIS7)

我知道這是這個問題有十幾個答案和帖子,但對我來說沒有任何作用。

我們有我的 MVC4 應用程序,我將它部署到 IIS7 到我的服務器和另一台我們沒有安裝 Visual Studio 的機器。

我們正在從/向 excel 導入/導出數據以進行批量輸入。

我們在 Office 2007 的 .xlsx 格式的一張工作表中確實有大約 20000 條數據(文件另存為 Excel 工作簿)。

現在,當我使用以下代碼讀取數據時,它只讀取大約 4000-5000 行的數據。

下面的整個代碼在我的本地機器上運行良好,我在其中編寫代碼並從“帶有 .xls 的 Excel 97-2003 工作簿”中讀取所有 20000 行數據,但不能與“帶有 .xlsx 的 Excel 工作簿”一起使用。

private void FillDataSet(HttpPostedFileBase file, DataSet ds)
{
  using (
    var con =
      new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0"))
  {
      con.Open();
      var dtSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
      var strSheetName = "";
      strSheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();          
      var cmd = new OleDbCommand();
  var da = new OleDbDataAdapter();
  cmd.Connection = con;
  cmd.CommandType = CommandType.Text;
  cmd.CommandText = "SELECT * FROM [" + strSheetName + "]";
  da = new OleDbDataAdapter(cmd);
  da.Fill(ds);        
  }
}

我已經完成了以下步驟和解決方案,但它對我不起作用。

- 安裝 Microsoft Access Database Engine 2010 Redistributable。

- 安裝 2007 Office System 驅動程序:數據連接組件

我們很困惑為什么它在我的本地機器上工作而不是在服務器上工作。

請提供有關此問題的任何想法或解決方案..

我嘗試過的: - 從解決方案資源管理器中右鍵單擊您的項目,然后單擊屬性。 - 單擊構建選項卡 - 將平台目標從:任何 CPU 更改為 x86 | 任何 CPU 到 x64 - 重新構建您的解決方案 - 還對 IIS 提前設置進行了更改,將 32 位應用程序啟用為 True/False。

在從 excel 讀取數據的一段時間內,您需要將所有數據轉換為文本格式

舊連接字符串

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0"

更新的連接字符串

"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0;HDR=YES;IMEX=1';"

這會將您的所有數據轉換為文本格式,所有數據都將顯示。

更新代碼

private void FillDataSet(HttpPostedFileBase file, DataSet ds)
{
  using (
    var con =
      new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0;HDR=YES;IMEX=1';"))
  {
      con.Open();
      var dtSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
      var strSheetName = "";
      strSheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();          
      var cmd = new OleDbCommand();
  var da = new OleDbDataAdapter();
  cmd.Connection = con;
  cmd.CommandType = CommandType.Text;
  cmd.CommandText = "SELECT * FROM [" + strSheetName + "]";
  da = new OleDbDataAdapter(cmd);
  da.Fill(ds);        
  }
}

試試這個。 我也遇到了一些問題。

  new OleDbConnection(@"Provider=Provider=Microsoft.Jet.OLEDB.4.0;Data Source;Data Source=" File Path";Extended Properties=\"Excel 8.0;HDR=Yes;\";))

我有同樣的問題。 該程序在我的本地/SIT 環境中運行良好,但我無法讀取所有 Excel 行。 它不允許我將平台目標從Any CPU更改為x86 | x64 在讀取 Excel 文件 ( .xlsx ) 時,我的生產環境在 Windows Server 2012 R2 和 IIS8 上找到了工作。

我能夠通過以下步驟解決這個問題:

  1. 檢查 IIS 應用程序池 >高級設置>啟用 32 位應用程序True | 假的。 (我認為這導致程序使用 x32 | x64 位驅動程序)
  2. 搜索您的ODBC 數據源並檢查相關的 x32 | x64 驅動程序。 並將驅動程序從 v12 升級到 v14(刪除Access Database Engine 2007 ,安裝Access Database Engine 2010
  3. 連接字符串: "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=FilePath;Extended Properties=\\"Excel 12.0;HDR=NO;IMEX=1;"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM