وارد کردن اطلاعات از فایل Excel در بانک اطلاعاتی در MVC

سه شنبه 3 شهریور 1394

در این مقاله یاد خواهیم گرفت که اطلاعات یک فایل اکسل را در بانک اطلاعاتی ذخیره کنیم

وارد کردن اطلاعات از فایل Excel در بانک اطلاعاتی در MVC

برای شروع نیاز است که بانک اطلاعاتی برای دخیره اطلاعات ایجاد کنیم

]

حال ویژوال استادیو را باز کرده و یک پروژه از نوع MVC ایجاد میکنیم و یک  یک کنترلر از نوع Home و سپس یک متد به نام Index  نیز ایجاد میکنیم

   public ActionResult Index()
{
    return View();
}

حال برای متد Index یک View ایجاد میکنیم و سپس در View یک فایل آپلود ، برای آپلود فایل اکسل  ایجاد میکنیم

@{
    ViewBag.Title = "Index";
}

<h2>مرجع تخصصی برنامه نویسان </h2>
@using (Html.BeginForm("Index","Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ 
<input type="file" name="file" />
    <input type="submit" value="OK" />
}

حال در متد Index در قسمت post برای آپلود فایل اکسل به کار میرود در این متد از OledbConnection برای خواندن فایل های اکسل استفاده میشود در این نمونه ما دوتوع فایل اکسل را بررسی کردیم که کاربر حتما باید فایل های اکسل را با پسوند . xls  ( که برای فایل های اکسل از 2000 تا 2007 ) و پسوند ..xlsx (برای فایل های اکسل از 2007 به بالا ) میباشد و اگر در سیستم شما اکسل 2007 به بالا نصب است برای اجرا باید حتما این فایل را دانلود کنید

کد های مربوط به فایل هایی با پسوند .Xls  :


Hide   Copy Code

excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
   fileLocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";

کد های مربوط به فایل هایی با پسوند .xlsx:

Hide   Copy Code

excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
   fileLocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";

سپس اطلاعات را از فایل اکسل گرفته و در   DataTable میریزیم سپس اطلاعات  DataTable را در بانک اطلاعاتی ذخیره میکنیم


[HttpPost]
      public ActionResult Index(HttpPostedFileBase file)
      {
          DataSet ds = new DataSet();
          if (Request.Files["file"].ContentLength > 0)
          {
              string fileExtension =
                                   System.IO.Path.GetExtension(Request.Files["file"].FileName);

              if (fileExtension == ".xls" || fileExtension == ".xlsx")
              {
                  string fileLocation = Server.MapPath("~/Content/") + Request.Files["file"].FileName;
                  if (System.IO.File.Exists(fileLocation))
                  {

                      System.IO.File.Delete(fileLocation);
                  }
                  Request.Files["file"].SaveAs(fileLocation);
                  string excelConnectionString = string.Empty;
                  excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                  fileLocation + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
                  //connection String for xls file format.
                  if (fileExtension == ".xls")
                  {
                      excelConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
                      fileLocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
                  }
                  //connection String for xlsx file format.
                  else if (fileExtension == ".xlsx")
                  {
                      excelConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
                      fileLocation + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
                  }
                  //Create Connection to Excel work book and add oledb namespace
                  OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
                  excelConnection.Open();
                  DataTable dt = new DataTable();

                  dt = excelConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                  if (dt == null)
                  {
                      return null;
                  }

                  String[] excelSheets = new String[dt.Rows.Count];
                  int t = 0;
                  //excel data saves in temp file here.
                  foreach (DataRow row in dt.Rows)
                  {
                      excelSheets[t] = row["TABLE_NAME"].ToString();
                      t++;
                  }
                  OleDbConnection excelConnection1 = new OleDbConnection(excelConnectionString);


                  string query = string.Format("Select * from [{0}]", excelSheets[0]);
                  using (OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, excelConnection1))
                  {
                      dataAdapter.Fill(ds);
                  }
              }
              if (fileExtension.ToString().ToLower().Equals(".xml"))
              {
                  string fileLocation = Server.MapPath("~/Content/") + Request.Files["FileUpload"].FileName;
                  if (System.IO.File.Exists(fileLocation))
                  {
                      System.IO.File.Delete(fileLocation);
                  }

                  Request.Files["FileUpload"].SaveAs(fileLocation);
                  XmlTextReader xmlreader = new XmlTextReader(fileLocation);
                  // DataSet ds = new DataSet();
                  ds.ReadXml(xmlreader);
                  xmlreader.Close();
              }

              for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
              {
                  string conn = ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString;
                  SqlConnection con = new SqlConnection(conn);
                  string query = "Insert into Person(Name,Email,Mobile) Values('" +
                  ds.Tables[0].Rows[i][0].ToString() + "','" + ds.Tables[0].Rows[i][1].ToString() +
                  "','" + ds.Tables[0].Rows[i][2].ToString() + "')";
                  con.Open();
                  SqlCommand cmd = new SqlCommand(query, con);
                  cmd.ExecuteNonQuery();
                  con.Close();
              }
          }
          return View();
      }

حال از برنامه اجرا بگیرید

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید