あなたは、ユーザーがExcelはあなたが、Excelの相互運用機能を使用して、それを開いてキャプチャしたデータを取得し、あなたがさらに速く必要procedure.If保存され、インサートを呼び出すことができますファイルのアップロード挿入logic.Onceを保持しているストアドプロシージャを作成する必要がありますあなたは常にSQL Bulk Copyを使用することができます挿入速度。あなたのMVCプロジェクト1.In
はMicrosoft.Office.Interop.Excel.dll
2.Create Excelファイルをアップロードを促すビューへの参照を追加します。
@using (Html.BeginForm("Import", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.Raw(ViewBag.Error)
<span>Excel File </span><input type="file" name="excelfile" />
<br />
<input type="submit" value="Import" />
}
3.Create Excelファイルを開き、コントローラのアクション - >行をループ - > SQL
にデータを挿入し
[HttpPost]
public ActionResult Import(HttpPostedFileBase excelFile)
{
//Add this to the using statements after adding a refrence to Microsoft.Office.Interop.Excel.dll - using Excel = Microsoft.Office.Interop.Excel;
if ((excelFile.ContentLength != 0) && (excelFile.FileName.EndsWith("xls") || excelFile.FileName.EndsWith("xlsx")))
{
string path = Server.MapPath("~/Files/" + excelFile.FileName);
if (!System.IO.File.Exists(path))
{
excelFile.SaveAs(path);
Excel.Application application = new Excel.Application();
Excel.Workbook workbook = application.Workbooks.Open(path);
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.ActiveSheet;
Excel.Range range = worksheet.UsedRange;
for (int i = 2; i < range.Rows.Count + 1; i++)
{
string name = ((Excel.Range)range.Cells[i,1]).Text;
string address = ((Excel.Range)range.Cells[i,2]).Text;
string phone = ((Excel.Range)range.Cells[i,3]).Text;
//Write the logic to add the values to the database
}
}
}
return View();
}
また、アクションを非同期に作ることができるが、それはdoesnのデータベースへの書き込みはIO操作なので、asyncは何もしません。
DBがある場合はADOを使用し、DB_TABLE SELECT * FROM SOURCEに挿入します。そうでない場合は、行に関連するクラスを提案するので、clsExcelImportRow {Name、Address、Phone}とADOを使用してデータを選択し、行ごとにクラスを追加するレコードセットをループします。 –