public bool BulkInsertItemList <T>(string tableName, List <T> data, List <PropertyInfo> propList = null) { if (data == null || data.Count == 0) { return(true); } if (propList == null) { propList = TableClass.GetTableFieldProperties <T>(); } SqlTransaction strans = transaction as SqlTransaction; SqlConnection sconn = conn as SqlConnection; SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sconn, SqlBulkCopyOptions.TableLock, strans); DataTable dTable = new DataTable(); sqlBulkCopy.BatchSize = data.Count(); sqlBulkCopy.DestinationTableName = tableName; foreach (PropertyInfo prop in propList) { sqlBulkCopy.ColumnMappings.Add(prop.Name, prop.Name); dTable.Columns.Add(prop.Name, prop.PropertyType); } foreach (T d in data) { object[] values = new object[propList.Count]; for (int i = 0; i < propList.Count; i++) { PropertyInfo p = propList[i]; values[i] = p.GetValue(d); } dTable.Rows.Add(values); } sqlBulkCopy.WriteToServer(dTable); return(true); }