我首先使用asp.net mvc ef代码。我将文件上传到服务器所有我需要的是将excel数据插入到第一个数据库的代码中。将Excel数据批量插入数据库的最佳方法是什么?非常感谢您的咨询。
提前致谢。
答案 0 :(得分:1)
您可以使用LinqToExcel从Excel文件中获取数据并将其映射到您的实体类中。
如果您正在寻找替代方法,可以使用以下方法:
答案 1 :(得分:1)
使用类似于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);
}
}