Ich schrieb eine einfache Anwendung zum Hochladen von Excel-Daten auf SQL. Ich verwende ADO.NET und OLEDB. Also habe ich bisher eine Tabelle auf dem SQL-Server, die nur zwei Felder enthält: ProbeID (die automatisch generiert wird) und ProbeName (das ich aus meiner xls-Datei abrufe). Meine Excel-Datei enthält eine Reihe von Spalten, aber ich brauche nur Probe Name. Also, wenn App die Datei liest und auf oledb speichert, scheint es, dass Name fields immer Null bleibt und wenn es in db-Tabelle eingefügt wird, fügt es die richtige Menge an Zeilen ein, aber mit dem Null-Wert von ProbeName. Ich kann nicht herausfinden, wo das Problem in meinem Code ist. Hier ist meine Upload-Methode. Was mache ich falsch?Einfügen von Excel-Daten auf SQL-Server mit ASP.NET MVC
[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);
}
}
Sie können den Import-Export-Assistenten verwenden, um Daten von Excel nach SQL SERVER zu importieren. Überprüfen Sie diesen Link https://msdn.microsoft.com/en-us/library/ms140052.aspx –
Danke, aber ich muss die ASP.NET MVC verwenden, weil ich später eine UI erstellen muss, wo Benutzer nach dem Einfügen sehen können eingefügte Daten – Vytautas
Sie markierten sql - server. Also können wir es in sql auf diese Weise machen und diese Datei können wir in SQL Job einplanen. –