0
我寫了一個簡單的應用程序來將excel數據上傳到sql。我正在使用ADO.NET和OLEDB。所以我有一個目前在sql服務器上只包含ProbeID(這是自動生成的)和ProbeName(這是我從我的xls文件中檢索到)兩個字段的表。我的Excel文件包含一堆列,但我只需要探針名稱。所以當應用程序讀取文件並存儲到oledb時,似乎Name字段總是保持爲空,並且當它插入到db表中時,它將插入適當數量的行,但具有空ProbeName值。我無法弄清楚我的代碼中的問題在哪裏。這是我的上傳方法。我究竟做錯了什麼?使用ASP.NET MVC插入Excel數據到SQL服務器
[HttpPost]
public JsonResult UploadExcel(Probe probes, HttpPostedFileBase FileUpload)
{
var data = new List<string>();
if (FileUpload != null)
{
// tdata.ExecuteCommand("truncate table OtherCompanyAssets");
if (FileUpload.ContentType == "application/vnd.ms-excel" || FileUpload.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
{
var filename = FileUpload.FileName;
var targetpath = Server.MapPath("~/Doc/");
FileUpload.SaveAs(targetpath + filename);
var pathToExcelFile = targetpath + filename;
var connectionString = "";
if (filename.EndsWith(".xls"))
{
connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", pathToExcelFile);
}
else if (filename.EndsWith(".xlsx"))
{
connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1\";", pathToExcelFile);
}
var adapter = new OleDbDataAdapter("SELECT * FROM [report$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "ExcelTable");
var dtable = ds.Tables["ExcelTable"];
const string sheetName = "report";
var excelFile = new ExcelQueryFactory(pathToExcelFile);
var dataInProbe = from a in excelFile.Worksheet<Probe>(sheetName) select a;
foreach (var a in dataInProbe)
{
try
{
if (a.ProbeName != "")
{
var pr = new Probe();
pr.ProbeName = a.ProbeName;
db.Probes.Add(pr);
db.SaveChanges();
}
else
{
data.Add("<ul>");
if (string.IsNullOrEmpty(a.ProbeName)) data.Add("<li> Probe name is required</li>");
data.Add("</ul>");
data.ToArray();
return Json(data, JsonRequestBehavior.AllowGet);
}
}
catch (DbEntityValidationException ex)
{
foreach (var entityValidationErrors in ex.EntityValidationErrors)
{
foreach (var validationError in entityValidationErrors.ValidationErrors)
{
Response.Write("Property: " + validationError.PropertyName + " Error: " + validationError.ErrorMessage);
}
}
}
}
//deleting excel file from folder
if ((System.IO.File.Exists(pathToExcelFile)))
{
System.IO.File.Delete(pathToExcelFile);
}
return Json("success", JsonRequestBehavior.AllowGet);
}
else
{
//alert message for invalid file format
data.Add("<ul>");
data.Add("<li>Only Excel file format is allowed</li>");
data.Add("</ul>");
data.ToArray();
return Json(data, JsonRequestBehavior.AllowGet);
}
}
else
{
data.Add("<ul>");
if (FileUpload == null) data.Add("<li>Please choose Excel file</li>");
data.Add("</ul>");
data.ToArray();
return Json(data, JsonRequestBehavior.AllowGet);
}
}
您可以使用導入導出嚮導將數據從excell導入到SQL SERVER。檢查此鏈接https://msdn.microsoft.com/en-us/library/ms140052.aspx –
謝謝,但我不得不使用ASP.NET MVC,因爲稍後我需要創建UI插入後用戶可以看到插入的數據。 – Vytautas
您標記了sql - server。所以在sql中我們可以用這種方式來完成,並且我們可以在SQL Job中安排它。 –