System.InvalidOperationException: 未在本機電腦上註冊“Microsoft.ACE.OLEDB.12.0”提供者。

來源:互聯網
上載者:User

標籤:

   最近用MVC3 做了一個項目,發布時項目的中的資料匯入功能(Excel格式,有固定的匯入資料範本)居然不能用,查看報錯日誌,發現是“System.InvalidOperationException: 未在本機電腦上註冊“Microsoft.ACE.OLEDB.12.0”提供者............”。 在網上找一些資料,把問題解決了。如所示。

 

 

     

    後台功能代碼:匯入與匯出實現代碼。

  1    #region -使用IO寫入Excel-  2         /// <summary>  3         ///  使用IO寫入Excel  4         /// </summary>  5         /// <param name="table">表</param>  6         /// <param name="file">儲存路徑</param>  7         public static bool dataTableToCsv(System.Data.DataTable table, string file)  8         {  9             string title = ""; 10             try 11             { 12                 FileStream fs = new FileStream(file, FileMode.OpenOrCreate); 13  14                 //FileStream fs1 = File.Open(file, FileMode.Open, FileAccess.Read); 15  16                 StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default); 17  18                 for (int i = 0; i < table.Columns.Count; i++) 19                 { 20  21                     title += table.Columns[i].ColumnName + "\t"; //欄位:自動跳到下一儲存格 22  23                 } 24  25                 title = title.Substring(0, title.Length - 1) + "\n"; 26  27                 sw.Write(title); 28  29                 foreach (System.Data.DataRow row in table.Rows) 30                 { 31                     string line = ""; 32                     for (int i = 0; i < table.Columns.Count; i++) 33                     { 34                         line += row[i].ToString().Trim() + "\t"; //內容:自動跳到下一儲存格 35                     } 36                     line = line.Substring(0, line.Length - 1) + "\n"; 37                     sw.Write(line); 38                 } 39                 sw.Close(); 40                 fs.Close(); 41                 return true; 42  43             } 44             catch (Exception) 45             { 46                 return false; 47             } 48         } 49  50         #endregion 51  52         #region- 讀取csv格式的Excel檔案的方法- 53         ///<summary> 54         ///讀取csv格式的Excel檔案的方法  55         ///</ummary> 56         ///<param name="path">待讀取Excel的全路徑</param> 57         ///<returns></returns> 58         public static DataTable ReadExcelWithStream(string path) 59         { 60             DataTable dt = new DataTable(); 61             bool isDtHasColumn = false; //標記DataTable 是否已經產生了列 62             StreamReader reader = new StreamReader(path, System.Text.Encoding.Default); //資料流 63             while (!reader.EndOfStream) 64             { 65                 string meaage = reader.ReadLine(); 66                 string[] splitResult = meaage.Split(new char[] { ‘,‘ }, StringSplitOptions.None); //讀取一行 以逗號分隔 存入數組 67                 DataRow row = dt.NewRow(); 68                 for (int i = 0; i < splitResult.Length; i++) 69                 { 70                     if (!isDtHasColumn) //如果還沒有產生列 71                     { 72                         dt.Columns.Add("column" + i, typeof(string)); 73                     } 74                     row[i] = splitResult[i]; 75                 } 76                 dt.Rows.Add(row); //添加行 77                 isDtHasColumn = true; //讀取第一行後 就標記已經存在列 再讀取以後的行時,就不再產生列 78             } 79             return dt; 80         } 81         #endregion 82  83         #region -讀取xls\xlsx格式的Excel檔案的方法- 84         ///<summary> 85         ///讀取xls\xlsx格式的Excel檔案的方法  86         ///</ummary> 87         ///<param name="path">待讀取Excel的全路徑</param> 88         ///<returns></returns> 89         public static DataTable ReadExcelToTable(string path) 90         { 91             DataSet ds = new DataSet(); 92             //如果HDR=YES,DataTable預設的列名為Excel 第一行資料... 93             //如果HDR=NO,DataTable預設的列名為F1,F2,F3... 94             string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=‘Excel 12.0;HDR=YES;IMEX=1‘;"; // Office 07及以上版本 不能出現多餘的空格 而且分號注意 95             using (OleDbConnection conn = new OleDbConnection(strConn)) 96             { 97                 conn.Open(); 98                 DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); //得到所有sheet的名字 99                 string firstSheetName = sheetsName.Rows[0][2].ToString(); //得到第一個sheet的名字100                 string strExcel = string.Format("select * from [{0}]", firstSheetName);101                 OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn);102                 adapter.Fill(ds);103                 conn.Close();104             }105             return ds.Tables[0];106         }107         #endregion

   發布時,伺服器的PC 一定安裝 Office 07 以上版本。不是匯入資料會失敗!

System.InvalidOperationException: 未在本機電腦上註冊“Microsoft.ACE.OLEDB.12.0”提供者。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.