نحوه آپلود کردن رکوردهایی از فایل Excel به پایگاه داده با استفاده از Stored Procedure در MVC
سه شنبه 4 مهر 1396امروز در این مقاله قصد داریم که نحوه آپلود کرده فایل اکسل در پایگاه داده را با استفاده از Stored Procedure و همچنین انواع اعتبار سنجی ها را انجام دهیم.
مقاله قبلی در مورد چگونگی دانلود رکوردهای پایگاه داده به صورت فایل های اکسل بود.شما میتوانید این لینک را بررسی کنید.
گام اول)
ابتدا ، یک جدول ایجاد میکنیم.
سپس یک stored procedure ایجاد میکنیم.در stored procedure ما میخواهیم یک procedure برای افزودن رکوردها و چک کردن دیتابیس برای جلوگیری از تکراری بودن رکورد های کارمندان ایجاد کنیم.
Create proc usp_InsertNewEmployeeDetails ( @EmployeeNo int = null, @FirstName varchar(50) = null, @LastName varchar(50) = null, @DateOfBirth datetime = null, @Address varchar(50) = null, @MobileNo varchar(200) = null, @PostelCode varchar(50) = null, @EmailId varchar(50) = null ) as begin IF EXISTS(select EmployeeNo from EmployeeInfo where EmployeeNo=@EmployeeNo) return 0 ELSE begin Insert into EmployeeInfo( EmployeeNo,FirstName,LastName, DateOfBirth,Address,MobileNo,PostelCode, EmailId ) values ( @EmployeeNo,@FirstName,@LastName, @DateOfBirth,@Address,@MobileNo,@PostelCode, @EmailId) end end
گام دوم)
حالا ما باید جدول را در برنامه MVC اضافه کنیم.ما از Entity Framework و LINQ query استفاده میکنیم.
برای این کار، یک برنامه MVC از طریق File->New ->Web application ->select MVC ->OK ایجاد میکنیم.
به پوشه Model می رویم و راست کلیک میکنیم و Add را انتخاب میکنیم و سپس New item را انتخاب میکنیم و سپس گزینه ADO.NET Entity Data Model را انتخاب میکنیم و بعد الگوی database first را انتخاب میکنیم و بر روی Next کلیک میکنیم.
New Connection را انتخاب کنید و جزئیات connection را تکمیل کنید ، سپس database را انتخاب کنبد و بر روی OK کلیک کنید.
جدول و stored procedure را انتخاب کنید . بر روی OK کلیک کنید.
گام سوم )
حالا ما باید فایل LinqToExcel.dll را دانلود کنیم؛ بنابراین برای این، بر روی فایل پروژه راست کلیک کنید.سپس Manage NueGet Package را انتخاب کنید و LinqToExcel را در آن جستجو کنید.زمانیکه یافت شد ، آن را دانلود کنید.
گام چهارم)
حالا یک کنترلر باید اضافه کنیم و فضای نام زیر را به آن اضافه کنیم.
using LinqToExcel;
سپس ، اکشن متد زیر را به کنترلر اضافه میکنیم.
public ActionResult ExcelUpload() { return View(); }
حالا ، ما باید برای این اکشن متد یک VIew بسازیم.برای اینکار بر روی اکشن متد کلیک راست کرده و یک View با کدهای زیر برای آن ایجاد میکنیم.
<div align="center"> @if (ViewBag.Message != null) { <span class="alert alert-warning"> @ViewBag.Message</span> } <div align="right" class="btn btn-default"> @using (Html.BeginForm("UploadExcel", "ExcelDemo", FormMethod.Post, new { @enctype = "multipart/form-data" })) { <input type="file" id="fileUpload" class="btn btn-primary" name="FileUpload" /><br /> <input type="submit" class="btn btn-primary" name="UploadNewEmployee" id="fileUploadExcel" value="Upload New Employee Details" /> } </div> </div>
در اینجا، ما از sweetAlert برای بررسی اعتبار فیلدهای مورد نیاز آپلود فایل موردنیاز استفاده میکنیم.
بنابراین برای اینکار ابتدا باید کتابخانه مربوطه را دانلود کرده و مانند زیر به ویو رفرنس داد.
<link href="~/Scripts/sweetalert.css" rel="stylesheet" /> <script src="~/Scripts/jquery-1.10.2.js"></script> <script src="~/Scripts/sweetalert.js"></script> <script> $('#fileUploadExcel').click(function (e) { if ($('#fileUpload').val() === "") { sweetAlert("Oops...!!!", "Please select file", "error"); return false; } }); </script>
اگر بدون انتخاب فایل اکسل دکمه آپلود را بزنند با پاپ آپ زیر رو به رو خواهند شد.
گام پنجم)
حالا ، اجازه دهید که کد مربوط به افزودن رکورد ها از اکسل را بنویسیم.در ابتدا ، فرمت فایل اکسل را چک میکنیم.
if (FileUpload.ContentType == "application/vnd.ms-excel" || FileUpload.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { string filename = FileUpload.FileName; if (filename.EndsWith(".xlsx")) { }
سپس فایل اپلود شده را چک میکنیم.
string targetpath = Server.MapPath("~/DetailFormatInExcel/"); FileUpload.SaveAs(targetpath + filename); string pathToExcelFile = targetpath + filename; string sheetName = "Sheet1";
سپس ، چک میکنیم که employee number خالی است یا خیر.
if (a.EmployeeNo != null) { }
یک متد مجزا برای postdata ایجاد میکنیم.
public int PostExcelData(int employeeNo,string firstName, string lastName, DateTime? dateOfBirth, string address,string mobileNo,string postelCode, string emailId) { EmployeeDBEntities DbEntity = new EmployeeDBEntities(); var InsertExcelData = DbEntity.usp_InsertNewEmployeeDetails(employeeNo,firstName, lastName, dateOfBirth,address,mobileNo,postelCode, emailId); return InsertExcelData; }
متد postdata را فراخوانی میکنیم.
int resullt = PostExcelData(a.EmployeeNo, a.FirstName, a.LastName, myBirthdate, a.Address, a.MobileNo, a.PostelCode, a.EmailId); if (resullt <= 0) { data = "Hello User, Found some duplicate values! Only unique employee number has inserted and duplicate values(s) are not inserted"; ViewBag.Message = data; continue;
سپس رکورد های تکراری را چک میکنیم.این به طور خودکار سوابق تکراری را از بین می برد.بنابراین، کد نهایی ما مانند زیر است.
[HttpPost] public ActionResult UploadExcel(EmployeeInfo objEmpDetail, HttpPostedFileBase FileUpload) { EmployeeDBEntities objEntity = new EmployeeDBEntities(); string data = ""; if (FileUpload != null) { if (FileUpload.ContentType == "application/vnd.ms-excel" || FileUpload.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { string filename = FileUpload.FileName; if (filename.EndsWith(".xlsx")) { string targetpath = Server.MapPath("~/DetailFormatInExcel/"); FileUpload.SaveAs(targetpath + filename); string pathToExcelFile = targetpath + filename; string sheetName = "Sheet1"; var excelFile = new ExcelQueryFactory(pathToExcelFile); var empDetails = from a in excelFile.Worksheet<EmployeeInfo>(sheetName) select a; foreach (var a in empDetails) { if (a.EmployeeNo != null) { DateTime? myBirthdate = null; if (a.MobileNo.Length > 12) { data = "Phone number should be 10 to 12 disit"; ViewBag.Message = data; } myBirthdate = Convert.ToDateTime(a.DateOfBirth); int resullt = PostExcelData(a.EmployeeNo, a.FirstName, a.LastName, myBirthdate, a.Address, a.MobileNo, a.PostelCode, a.EmailId); if (resullt <= 0) { data = "Hello User, Found some duplicate values! Only unique employee number has inserted and duplicate values(s) are not inserted"; ViewBag.Message = data; continue; } else { data = "Successful upload records"; ViewBag.Message = data; } } else { data = a.EmployeeNo + "Some fields are null, Please check your excel sheet"; ViewBag.Message = data; return View("ExcelUpload"); } } } else { data = "This file is not valid format"; ViewBag.Message = data; } urn View("ExcelUpload"); } else { data = "Only Excel file format is allowed"; ViewBag.Message = data; return View("ExcelUpload"); } } else { if (FileUpload == null) { data = "Please choose Excel file"; } ViewBag.Message = data; urn View("ExcelUpload"); } } public int PostExcelData(int employeeNo,string firstName, string lastName, DateTime? dateOfBirth, string address,string mobileNo,string postelCode, string emailId) { EmployeeDBEntities DbEntity = new EmployeeDBEntities(); var InsertExcelData = DbEntity.usp_InsertNewEmployeeDetails(employeeNo,firstName, lastName, dateOfBirth,address,mobileNo,postelCode, emailId); return InsertExcelData; }
بالاخره بخش کدنویسی به اتمام رسید.اکنون میخواهیم بررسی کنیم که آیا فایل اکسل آپلود میشود یا خیر.
در حال حاضر ما یک فایل اکسل از رکورد ها ایجاد کرده ایم.
پس از آپلود این فایل اکسل، می توانیم پایگاه داده را بررسی کنیم تا ببینیم که آیا رکورد های ما با موفقیت ثبت شده اند یا خیر.
- ASP.net MVC
- 2k بازدید
- 5 تشکر