首先使用EF代码批量插入Excel数据到数据库

我首先使用asp.net mvc ef代码。 我上传文件到服务器,我需要的是插入该Excel数据代码第一个数据库。 将Excel数据批量插入数据库的最佳方法是什么? 将感谢您的咨询。

提前致谢。

您可以使用LinqToExcel从Excel文件中获取数据并将其映射到您的实体类中。


如果你正在寻找替代方法,这些是一些:

  • OLEDB,看一个例子
  • OPEN XML 2.0
  • 一些第三方DLL,如ExcelDataReader或EPPlus

使用像Entity Framework这样的ORM对于执行批量操作来说效率不高。 要有效地批量插入,必须使用SqlBulkCopy类。 要插入通用列表,必须将其转换为DataTable:

要插入通用列表,必须将其转换为DataTable:

public static DataTable ConvertToDataTable<T>(IList<T> list) { PropertyDescriptorCollection propertyDescriptorCollection = TypeDescriptor.GetProperties(typeof(T)); DataTable table = new DataTable(); for (int i = 0; i < propertyDescriptorCollection.Count; i++) { PropertyDescriptor propertyDescriptor = propertyDescriptorCollection[i]; Type propType = propertyDescriptor.PropertyType; if (propType.IsGenericType && propType.GetGenericTypeDefinition() == typeof(Nullable<>)) { table.Columns.Add(propertyDescriptor.Name, Nullable.GetUnderlyingType(propType)); } else { table.Columns.Add(propertyDescriptor.Name, propType); } } object[] values = new object[propertyDescriptorCollection.Count]; foreach (T listItem in list) { for (int i = 0; i < values.Length; i++) { values[i] = propertyDescriptorCollection[i].GetValue(listItem); } table.Rows.Add(values); } return table; } 

然后可以使用SqlBulkCopy。 在这个例子中,用户表被批量插入:

  DataTable dt = new DataTable(); using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection)) { sqlBulkCopy.ColumnMappings.Add("UserID", "UserID"); sqlBulkCopy.ColumnMappings.Add("UserName", "UserName"); sqlBulkCopy.ColumnMappings.Add("Password", "Password"); sqlBulkCopy.DestinationTableName = "User"; sqlBulkCopy.WriteToServer(dt); } }