如果是构建的列表对象那么需要先转化为datatable然后批量插入即可
SqlBulkCopy sbc = new SqlBulkCopy(tran.Connection as SqlConnection, SqlBulkCopyOptions.Default, tran as SqlTransaction);
sbc.BatchSize = 10000;
sbc.BulkCopyTimeout = 600;
sbc.DestinationTableName = "LSS_ProductModel";
DataTable dt = ListToDataTable(modelList);
sbc.WriteToServer(dt);
public static DataTable ListToDataTable<T>(List<T> list)
{
List<PropertyInfo> pList = new List<PropertyInfo>();
DataTable dt = new DataTable();
Array.ForEach<PropertyInfo>(typeof(T).GetProperties(), p =>
{
if (p.CustomAttributes.Count() == 0||(p.CustomAttributes.Count()>0&&p.Name=="PK_ID"))
{
pList.Add(p);
dt.Columns.Add(p.Name, p.PropertyType);
}
});
list.ForEach(item =>
{
DataRow row = dt.NewRow();
foreach(PropertyInfo info in pList)
{
object obj = info.GetValue(item);
if (obj == null)
{
continue;
}
if (info.PropertyType.FullName == typeof(DateTime).FullName)
{
if (obj!=null&&(DateTime)obj != DateTime.MinValue)
{
row[info.Name] = obj;
}
}
else
{
row[info.Name] = obj;
}
}
dt.Rows.Add(row);
});
return dt;
}
放在事务里面,并且对象的属性顺序要和数据表的字段顺序一样才行