2017-06-21 59 views
1

我知道這個問題有十幾個答案和帖子,但沒有任何適用於我的作品。'Microsoft.ace.oledb.12.0'不從服務器上的.xlsx文件讀取所有行(IIS7)

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

我們正在做進口/出口數據從/到excel進行批量輸入。

我們確實在Office 2007的.xlsx格式的一張工作表中有20000左右的數據(文件保存爲Excel工作簿)。

現在,當我通過使用下面的代碼讀取數據時,它只讀取4000-5000行左右的數據。

這整個下面的代碼在我的本地機器在那裏我做的代碼和讀取所有20000點的數據從「的Excel 97-2003工作簿以.xls」 但與「Excel工作簿正與的.xlsx工作正常」。

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數據庫引擎2010可再發行組件。

-Installing 2007 Office系統驅動程序:數據連接組件

我們搞不清爲什麼它的工作我的本地機器上,而不是工作的服務器。

請對這個問題..

提供任何想法或解決方案我曾嘗試: - 從解決方案資源管理器中右鍵單擊您的項目,然後單擊屬性。 - 單擊生成選項卡 - 將平臺目標更改爲:任何CPU至x86 |任何CPU到x64 - 重新構建您的解決方案 - 也使用啓用32位應用程序的高級設置中的IIS更改爲True/False。

回答

1

一些時間,而從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);   
    } 
} 
+0

感謝Tanay更新.. 但這也沒有解決我的問題。 我已經通過此鏈接給出的連接stirngs,但無論如何它不是整個20000記錄 它只是讀取4000-5000記錄只有.xlsx格式 https://www.connectionstrings.com/ace-oledb -12-0/ –

+0

這是不對的。 IMEX = 1意味着提供者將混合colums作爲文本對待,而不是將它視爲文本。令人遺憾的是,提供商仍然會掃描前8行,並對列中的數據類型做出決定。如果沒有IMEX = 1,那麼它將返回Null,表示沒有評估到所處理數據類型的所有內容。這不是一個問題,如果它評估它們爲文本,但如果它認爲它們是數字,那麼你會在文本單元中得到空值。在這種情況下,IMEX = 1將返回列的前8個單元格中混合數據類型的列的文本。 –

0

試試這個。我也有一些問題。

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

Jet提供程序已過時,不應再使用。 –