1. 程式人生 > >已解決問題:從Excel中讀資料到資料庫,本地VS執行都成功,網站釋出後不能讀取資料

已解決問題:從Excel中讀資料到資料庫,本地VS執行都成功,網站釋出後不能讀取資料

問題如標題:先上程式碼
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