モデルビューコントローラとEntity Frameworkを初めて使用しており、Webアプリケーションを設計しており、Excelからデータベースにデータをインポートする必要があります。ExcelからEntity Frameworkのデータベースにデータをインポートする
dateのようなデータフィールドをインポートする際に問題が発生しています。コントローラからいくつかの値を取得し、Excelから値を取得します。
たとえば、3つのフィールド(名前、製品、日付)がある場合、Excel(名前と製品)からインポートすると、すべての行でデフォルトで日付が使用されます。
http://mvc4beginner.com/Sample-Code/ImportExportExcelData/MVC4-Import-ExcelData-to-Database.html
これは、Excelからデータをインポートするために支援しているが、私は、日付の値をとることができ、デフォルトで値を与えることができないではありませんよ。
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");
}
これは私がOleDbDataAdapterおよの助けを借りて、このコード
Do not。 EFのようなORMはETLツールではありません。彼らはデータセットではなく個々のオブジェクトを扱います。データのインポートにはオブジェクトや動作が含まれていないため、ORMやクラスを使用する理由はありません。データをインポートするには、SSIS、bcp、BULK INSERTなどのETLツールを使用します。 C#の使用を主張する場合は、SqlBulkCopyを使用してバッチを使用してデータを一括して送信し、データベースに最小限のログを記録します。速度の差は数桁で、データセットのサイズが大きくなるにつれて増加する –
PS重複した質問があり、「ORMを使用しない」とは常にアンサーです。 –
私はSqlBulkCopyを使用しています。私はデータをインポートすることができると述べたが、私はいくつかのデフォルト値を与える代わりに、すべてのExcelからインポートする例として私はそれが名前と製品をインポートすることを奨励し、それはdatetime.nowとして日付がかかります。 –