![](/img/trans.png)
[英]The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine (server)
[英]'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 上找到了工作。
我能夠通過以下步驟解決這個問題:
"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.