已解決問題:從Excel中讀資料到資料庫,本地VS執行都成功,網站釋出後不能讀取資料
阿新 • • 發佈:2019-01-24
問題如標題:先上程式碼
經過跟蹤,發現執行到 conn.Open()時就掛了,以前掛在另一個伺服器上沒問題,現在換了一個伺服器就不行了,在本地VS裡面除錯也沒問題,
--------------------------------------------
--------------------------------------------------
給出幾個參考連結
C#讀取Excel幾種方法的體會:
http://developer.51cto.com/art/201302/380622.htm
Excel訪問連線字串中的的HDR=YES; IMEX=1含義
http://blog.csdn.net/ecnuzhangsq/article/details/5907689
Persist Security Info引數的作用:
http://sanduole.blog.51cto.com/101253/21259
CSDN論壇帖子
http://bbs.csdn.net/topics/390221016?page=1#post-394464344
提供與訪問Excel表資料的連線字串
http://www.connectionstrings.com/excel
.net如何讀取客戶端Excel檔案
http://social.msdn.microsoft.com/Forums/zh-CN/2212/thread/a31ed577-7ad9-4f56-b8bc-54ea4aefb0eb/
ActiveXObject 物件
http://msdn.microsoft.com/zh-cn/library/6958xykx(VS.80).aspx
C#操作Excel(讀取)
http://www.cnblogs.com/canyan3073/archive/2010/08/20/1804701.html
String path = Server.MapPath("~/UploadExcel/"); string FileName = path + DateTime.Now.ToString("yyyyMMddHHmmss") + fuload.FileName; fuload.PostedFile.SaveAs(FileName); string connstr2003 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'"; string connstr2007 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=\"Excel 12.0;HDR=YES\""; OleDbConnection conn; if (fileExtenSion.ToLower() == ".xls") { conn = new OleDbConnection(connstr2003); } else { conn = new OleDbConnection(connstr2007); } conn.Open(); …………
經過跟蹤,發現執行到 conn.Open()時就掛了,以前掛在另一個伺服器上沒問題,現在換了一個伺服器就不行了,在本地VS裡面除錯也沒問題,
--------------------------------------------
解決方法:
一、確認字串拼寫正確,例如:
string FileName = path + DateTime.Now.ToString("yyyyMMddHHmmss") + System.IO.Path.GetFileName(fuload.FileName);
二、
你傳的是什麼檔案?xlsx?伺服器是否安裝Microsoft.ACE.OLEDB.12.0;和Microsoft.Jet.OLEDB.4.0;驅動
三、
如果伺服器是64位系統的IIS7,則是因為Oledb.4.0在64位系統上不支援,在對應的 IIS 應用程式池中,“設定應用程式池預設屬性”/“常規”/”啟用32位應用程式”,設定為 true;
檢查以上各個問題
-------------------------------------------
貼上一段執行成功的完整程式碼 /// <summary> /// 讀取Excel檔案到DataSet中 /// </summary> /// <param name="filePath">檔案路徑</param> /// <returns></returns> public static DataSet ToDataTable(string filePath) { string connStr = ""; string fileType = System.IO.Path.GetExtension(fileName); if (string.IsNullOrEmpty(fileType)) return null; if (fileType == ".xls") connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filePath+ ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\""; else connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath+ ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\""; string sql_F = "Select * FROM [{0}]"; OleDbConnection conn = null; OleDbDataAdapter da = null; DataTable dtSheetName= null; DataSet ds = new DataSet(); try { // 初始化連線,並開啟 conn = new OleDbConnection(connStr); conn.Open(); // 獲取資料來源的表定義元資料 string SheetName = ""; dtSheetName= conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); // 初始化介面卡 da = new OleDbDataAdapter(); for (int i = 0; i < dtSheetName.Rows.Count; i++) { SheetName = (string)dtSheetName.Rows[i]["TABLE_NAME"]; if (SheetName .Contains("$") && !SheetName .Replace("'", "").EndsWith("$")) { continue; } da.SelectCommand = new OleDbCommand(String.Format(sql_F, SheetName ), conn); DataSet dsItem = new DataSet(); da.Fill(dsItem, tblName); ds.Tables.Add(dsItem.Tables[0].Copy()); } } catch (Exception ex) { } finally { // 關閉連線 if (conn.State == ConnectionState.Open) { conn.Close(); da.Dispose(); conn.Dispose(); } } return ds; }
--------------------------------------------------
給出幾個參考連結
C#讀取Excel幾種方法的體會:
http://developer.51cto.com/art/201302/380622.htm
Excel訪問連線字串中的的HDR=YES; IMEX=1含義
http://blog.csdn.net/ecnuzhangsq/article/details/5907689
Persist Security Info引數的作用:
http://sanduole.blog.51cto.com/101253/21259
CSDN論壇帖子
http://bbs.csdn.net/topics/390221016?page=1#post-394464344
提供與訪問Excel表資料的連線字串
http://www.connectionstrings.com/excel
.net如何讀取客戶端Excel檔案
http://social.msdn.microsoft.com/Forums/zh-CN/2212/thread/a31ed577-7ad9-4f56-b8bc-54ea4aefb0eb/
ActiveXObject 物件
http://msdn.microsoft.com/zh-cn/library/6958xykx(VS.80).aspx
C#操作Excel(讀取)
http://www.cnblogs.com/canyan3073/archive/2010/08/20/1804701.html