2016-04-01 34 views
0

Görüntü denetleyicisini ve Varlık Çerçevesini modellemek için yeni ve bir web uygulaması tasarlıyorum ve Excel'den bir veritabanına veri almam gerekiyor.Varlık Çerçevesinde Excel'den veri alma Varlık Yönetimi

Tarih gibi veri alanlarını içe aktarırken sorun yaşıyorum ve denetleyicimden bazı değerler almasını ve Excel'den bazı değerler almasını istiyorum.

Örneğin 3 alanım varsa (Ad, ürün ve tarih), sonra Excel'den (Ad ve ürün) almak istiyorum ve her satırda varsayılan olarak tarih alacaktır.

http://mvc4beginner.com/Sample-Code/ImportExportExcelData/MVC4-Import-ExcelData-to-Database.html

Bu Excel veri almak yardımcı oluyor ama varsayılan değerleri verebilecek tarih değerlerini almak mümkün değil değilim.


public ActionResult Importexcel() 
    { 


     if (Request.Files[" fileupload1"].ContentLength > 0 && !string.IsNullOrEmpty(Request.Files["fileupload1"].FileName)) 
     { 
      string extension = System.IO.Path.GetExtension(Request.Files["FileUpload1"].FileName); 
      string path1 = string.Format("{0}/{1}", Server.MapPath("~/Content/UploadedFolder"), Request.Files["FileUpload1"].FileName); 
      if (System.IO.File.Exists(path1)) 
       System.IO.File.Delete(path1); 

      Request.Files["FileUpload1"].SaveAs(path1); 
      string sqlConnectionString = @"Data Source=(LocalDb)\ProjectsV12;AttachDbFilename=|DataDirectory|\BlueWhaleDB.mdf;Initial Catalog=BlueWhaleDB;Integrated Security=True"; 


      //Create connection string to Excel work book 
      string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path1 + ";Extended Properties=Excel 12.0;Persist Security Info=False"; 
      //Create Connection to Excel work book 
      OleDbConnection excelConnection = new OleDbConnection(excelConnectionString); 
      //Create OleDbCommand to fetch data from Excel 
      OleDbCommand cmd = new OleDbCommand("Select [Id],[ClientId],[InstituteId],[AdmissionId],[PreviousAdmissionId],[DateOfAdmission],[ClassId],[Class],[SectionId],[Section],[RollNumber],[FirstName],[MiddleName],[LastName],[GenderId],[DateOfBirth],[CategoryId],[StudentTypeId],[Session],[IsDeactivated],[DeactivatedDate],[ModifiedBy],[ModifiedDate] from [Student$]", excelConnection); 

      excelConnection.Open(); 

      //OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(cmd); 
      //DataTable dReader = new DataTable(); 
      //DataSet objDataset1 = new DataSet(); 

      OleDbDataReader dReader; 

      //for (int i = 0; i < dReader.Rows.Count; i++) 
      //{ 
      // new StudentViewModel 
      // { 
      //  Id = dReader.Rows[i][1]; 

      //}; 



      //if (dReader.Rows[0][6].ToString() == DateTime.MinValue) 
      //{ 
      // dReader.Rows[i][6] = DateTime.Now; 
      //} 

      //else if (dReader.Rows[0][22].ToString() == "") 
      //{ 
      // dReader.Rows[i][22] = DateTime.Now; 
      //} 

      //else if (dReader.Rows[0][21].ToString() == "") 
      //{ 
      // dReader.Rows[i][21] = "System"; 
      //} 

      //else if (dReader.Rows[0][19].ToString() != "") 
      //{ 
      // dReader.Rows[i][19] = false; 
      //} 
      dReader = cmd.ExecuteReader(); 

      SqlBulkCopy sqlBulk = new SqlBulkCopy(sqlConnectionString); 
      //Give your Destination table name 
      sqlBulk.DestinationTableName = "Student"; 
      sqlBulk.WriteToServer(dReader); 
      excelConnection.Close(); 

      // SQL Server Connection String 


     } 

     return RedirectToAction("Student"); 
    } 

Bu i OleDbDataAdapter yardımıyla bu kodu

+1

Yapmayın. EF gibi ORM'ler * değil * ETL araçlarıdır. Veri setleri değil, tek tek nesnelerle uğraşırlar. Verileri içe aktarmaya yönelik hiçbir nesne ya da davranış yoktur, dolayısıyla ORM'leri, hatta sınıfları kullanmak için bir neden yoktur. Verileri almak için SSIS, bcp veya BULK INSERT komutları gibi bir ETL aracı kullanın. C# kullanarak ısrar ederseniz, toplu olarak veri göndermek için SqlBulkCopy kullanın, toplu iş grupları kullanarak ve veritabanına en az günlüğe kaydetme kullanın. Hız farkı, veri kümesi boyutu –

+0

PS ile artan büyüklük birkaç siparişleri vardır, yinelenen sorular bir * lot * vardır ve "ORM kullanmayın" her zaman anser –

+0

Ben SqlBulkCopy kullanıyorum ve Verileri ithal edebileceğimi ancak excel'den ithalat yerine bazı varsayılan değerler vermek istediğimi söyledim, örneğin excel'den isim ve ürün ithal etmesini istiyorum ve tarih olarak datetime.now olacak. –

cevap

1

göre beni önermek lütfen kullanıyorum kodudur.

Örnek kod aşağıdadır.

Query = "Select [id],[Name],[Marks],[Grade] from [Sheet1$]"; 
//Create OleDbCommand to fetch data from Excel 
OleDbCommand cmd = new OleDbCommand(Query, excelCon); 
//System.Data.OleDb.OleDbDataReader dReader;    
DataSet ds = new DataSet(); 
OleDbDataAdapter oda = new OleDbDataAdapter(Query, excelCon); 
excelCon.Close(); 
oda.Fill(ds); 
DataTable Exceldt = ds.Tables[0]; 

foreach (DataRow dr in Exceldt.Rows) 
{ 
    ExampleModel NewModel= new ExampleModel(); 
    //Pass values to model whatever your model is. 
    //Add to your dbContext 
    dbContext.tableName.Add(NewModel); 
    dbContext.SaveChanges(); 
} 
return RedirectToAction("Import"); 
+0

koduna göre bana yardım edin bana yardımcı olmak için yeni bir kod aşağıda –

+0

@AmanGoel Tamam denemek ve DateTime null değeri DateTime.UtcNow işlemek için –

İlgili konular