Ado.net SqlBulkCopy批量插入数据
/// <summary> /// 批量添加 /// </summary> /// <param name="modelList"></param> public void BtachAdd(IEnumerable<SMSSendReport> modelList) { var dt = modelList.ToDataTable("SMS_SendReport"); var conn = DatabaseFactory.CreateDatabase().CreateConnection(); using (conn) { if (conn.State == ConnectionState.Closed) conn.Open(); using (var sqlbulkcopy = new SqlBulkCopy((SqlConnection)conn)) { sqlbulkcopy.DestinationTableName = dt.TableName; for (var i = 0; i < dt.Columns.Count; i++) { sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName); } sqlbulkcopy.WriteToServer(dt); } } }
/// <summary> /// 把列表转换为DataTable /// </summary> /// <typeparam name="T"></typeparam> /// <param name="list"></param> /// <param name="tableName"></param> /// <returns></returns> public static DataTable ToDataTable<T>(this IEnumerable<T> list, string tableName) { var type = typeof(T); var properties = type.GetProperties().ToList(); var newDt = new DataTable(tableName); properties.ForEach(propertie => { Type columnType; if (propertie.PropertyType.IsGenericType && propertie.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>)) { columnType = propertie.PropertyType.GetGenericArguments()[0]; } else { columnType = propertie.PropertyType; } newDt.Columns.Add(propertie.Name, columnType); }); foreach (var item in list) { var newRow = newDt.NewRow(); properties.ForEach(propertie => { newRow[propertie.Name] = propertie.GetValue(item, null) ?? DBNull.Value; }); newDt.Rows.Add(newRow); } return newDt; }