1. 程式人生 > >MVC4.0 上傳Excel並存入資料庫

MVC4.0 上傳Excel並存入資料庫


這裡的這個功能實現在WebForm很好實現,上傳階段簡單的一個FileUoLoad控制元件就搞定了,什麼取值,什麼上傳都是浮雲,微軟都幫我們封裝好了,我們只需要一拖一拽就OK了,但這些在MVC中是不行的!

     MVC實現了顯示和控制的分離就不可能再使用服務端控制元件了,所以我們就又回到了原始的表單提交,AJAX非同步提交資料什麼的,不多說直接上程式碼,簡單的寫一下

     View: 

               <form id="form" name="form" enctype="multipart/form-data" method="post" action="/DataInfoAndCal/Cal">

                   <input type="file" name="fileName" />

                   <input name="info" type="submit" value="http://www.cnblogs.com/a164266729/p/導  入" class="bt_bg" />

              </form>

在控制器中接受選中的檔案 可以這樣子:  HttpPostedFileBase fb = Request.Files[0];

                                                     string fileName = fb.FileName;  //獲取到檔名  xx.xls

                                                     fb.SaveAs(Server.MapPath("~/App_Data/Excel/Model.xls"));

 判斷什麼的都是浮雲就不寫上去了

好了上傳成功,注意 <input type="file" name="fileName" />這個標籤使用 HttpPostedFileBase fb = Request.Files[0];在Chome瀏覽器下只能夠獲得檔名稱而不能夠獲得完整路徑 這個問題還沒解決

好的下一步將Excel轉換為DataSet資料集,這個在這裡就好WebForm沒什麼區別了 直接上程式碼

 DataSet dsCal = new DataSet();

dsCal = GetDataSet(fb.FileName);

//下面是方法

#region EXCEL資料轉換DataSet
/// <summary>
/// EXCEL資料轉換DataSet
/// </summary>
/// <param name="filePath">檔案路徑</param>
/// <param name="search">表名</param>
/// <returns></returns> 
protected DataSet GetDataSet(string filePath)
{
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("~/App_Data/Excel/Model.xls") + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';";
OleDbConnection objConn = null;
objConn = new OleDbConnection(strConn);
objConn.Open();
DataSet ds = new DataSet();
List<string> List = new List<string> { };
DataTable dtSheetName = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
foreach (DataRow dr in dtSheetName.Rows)
{
if (dr["Table_Name"].ToString().Contains("$") && !dr[2].ToString().EndsWith("$"))
{
continue;
}
string s = dr["Table_Name"].ToString();
List.Add(s);
}
try
{
for (int i = 0; i < List.Count; i++)
{
ds.Tables.Add(List[i]);
string SheetName = List[i];
string strSql = "select * from [" + SheetName + "]";
OleDbDataAdapter odbcCSVDataAdapter = new OleDbDataAdapter(strSql, objConn);
DataTable dt = ds.Tables[i];
odbcCSVDataAdapter.Fill(dt);
}
objConn.Close();
return ds;
}
catch (Exception ex)
{
return null;
}
}
#endregion

這裡面注意取到的Excel的表名的集合可能會有不是$結束的,這是由Excel內部處理導致的 直接篩選下就OK了 

順利的完成Excel的匯入上轉換  存入資料庫等做完再寫

番外話:畢業一年來第一次在部落格園裡面寫東西,感覺記錄下成長的腳印是件很開心的事情