1 static public class LinqToDataTable 2 { 3 static public DataTable ToDataTable<T>(this IEnumerable<T> varlist, CreateRowDelegate<T> fn) 4 { 5 DataTable dtReturn = new DataTable(); 6 PropertyInfo[] oProps = null; 7 foreach (T rec in varlist) 8 { 9 // 使用反射获取属性名,创建表,只有第一次,其他的才会跟随 10 if (oProps == null) 11 { 12 13 oProps = ((Type)rec.GetType()).GetProperties(); 14 15 foreach (PropertyInfo pi in oProps) 16 { 17 18 Type colType = pi.PropertyType; if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition() == typeof(Nullable<>))) 19 { 20 21 colType = colType.GetGenericArguments()[0]; 22 23 } 24 25 dtReturn.Columns.Add(new DataColumn(pi.Name, colType)); 26 27 } 28 29 } 30 31 DataRow dr = dtReturn.NewRow(); foreach (PropertyInfo pi in oProps) 32 { 33 34 dr[pi.Name] = pi.GetValue(rec, null) == null ? DBNull.Value : pi.GetValue(rec, null); 35 36 } 37 38 dtReturn.Rows.Add(dr); 39 40 } 41 42 return (dtReturn); 43 44 } 45 46 public delegate object[] CreateRowDelegate<T>(T t); 47 }
1 public static void bulkinsert<T>(string conn, string tbname, IEnumerable<T> query) 2 { 3 DateTime dtnow = DateTime.Now; 4 SQLHelper sqlhelper = new SQLHelper(); 5 DataTable dt = query.ToDataTable<T>(rec => new object[] { query }); 6 7 sqlhelper.ExecuteSqlBulkCopy(conn, tbname, dt); 8 TraceLog.PrintLn("{1}正在结束插入数据耗时{0}ms,总共{2}条", (DateTime.Now - dtnow).TotalMilliseconds, tbname,dt.Rows.Count); 9 }
1 /// <summary> 2 /// 批量插入 3 /// </summary> 4 /// <param name="lstdata"></param> 5 public void InsertMBT(List<inf_mobileDDVerificationALLDMBT> lstdata) 6 { 7 try 8 { 9 SqlBulkCopyHelper.bulkinsert<inf_mobileDDVerificationALLDMBT>(Properties.Settings.Default.smsMarketdataConnectionString, "inf_mobileDDVerificationALLDMBT", lstdata); 10 lstdata.Clear(); 11 } 12 catch (Exception err) 13 { 14 15 } 16 finally 17 { 18 lstdata.Clear(); 19 } 20 }