当前位置:Gxlcms > 数据库问题 > c# 把List<T>转成DataTable对象,批量导入Sqlserver库

c# 把List<T>转成DataTable对象,批量导入Sqlserver库

时间:2021-07-01 10:21:17 帮助过:28人阅读

/// <summary> 2 /// Sqlbulkcopies the specified SMS.批量插入到数据库 3 /// </summary> 4 /// <param name="data">list类型数据.</param> 5 /// <param name="sqlconn">数据库连接字符串.</param> 6 private void SqlbulkcopyPipeLines(List<CPipe> data, SqlConnection sqlconn, string prjId, string modid) 7 { 8 #region 待处理数据初始化处理 9 List<PropertyInfo> pList = new List<PropertyInfo>();//创建属性的集合 10 DataTable dtLoad = new DataTable(); 11 //把所有的public属性加入到集合 并添加DataTable的列 12 // Array.ForEach<PropertyInfo>(typeof(CJunc).GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); }); //获得反射的入口(typeof()) //要对 array 的每个元素执行的 System.Action。 13 14 15 dtLoad.Columns.Add("ProjectID", typeof(int)); 16 dtLoad.Columns.Add("ModelID", typeof(int)); 17 dtLoad.Columns.Add("ID", typeof(string)); 18 dtLoad.Columns.Add("Node1", typeof(string)); 19 dtLoad.Columns.Add("Node2", typeof(string)); 20 dtLoad.Columns.Add("Length", typeof(decimal)); 21 dtLoad.Columns.Add("Diameter", typeof(decimal)); 22 dtLoad.Columns.Add("Roughness", typeof(decimal)); 23 dtLoad.Columns.Add("MinorLoss", typeof(string)); 24 dtLoad.Columns.Add("Status", typeof(string)); 25 dtLoad.Columns.Add("Comment", typeof(string)); 26 27 28 29 foreach (var item in data) 30 { 31 DataRow row = dtLoad.NewRow(); //创建一个DataRow实例 32 // pList.ForEach(p => row[p.Name] = p.GetValue(item, null)); //给row 赋值 33 // [ProjectID] ,[ModelID] ,[ID] ,[Node1] ,[Node2] ,[Length] ,[Diameter] ,[Roughness],[MinorLoss],[Status] ,[Comment] 34 // insert_pipesData(db_do, prjId, modid, PipeLines[i].ID, PipeLines[i].Node1, PipeLines[i].Node2, PipeLines[i].Data[CPipe.PIPE_LEN_INDEX], PipeLines[i].Data[CPipe.PIPE_DIAM_INDEX], PipeLines[i].Data[CPipe.PIPE_ROUGH_INDEX], PipeLines[i].Data[CPipe.PIPE_MLOSS_INDEX], PipeLines[i].Data[CPipe.PIPE_STATUS_INDEX], PipeLines[i].Data[CGlobalConst.COMMENT_INDEX]); 35 36 row["ProjectID"] = prjId; 37 row["ModelID"] = modid; 38 row["ID"] = item.ID; 39 row["Node1"] = item.Node1; 40 row["Node2"] = item.Node2; 41 42 /* 43 if (item.Data[CPipe.PIPE_LEN_INDEX].Trim().Length == 0) { row["Length"] = 0; Console.WriteLine("Length为空:" + item.Data[CPipe.PIPE_LEN_INDEX]); } 44 if (IsNumeric(item.Data[CPipe.PIPE_LEN_INDEX])) { row["Length"] = item.Data[CPipe.PIPE_LEN_INDEX]; } 45 else { row["Length"] = 0; Console.WriteLine("Length非数字:" + item.Data[CPipe.PIPE_LEN_INDEX]); } 46 47 48 if (item.Data[CPipe.PIPE_DIAM_INDEX].Trim().Length == 0) { row["Diameter"] = 0; Console.WriteLine("Diameter为空:" + item.Data[CPipe.PIPE_DIAM_INDEX]); } 49 if (IsNumeric(item.Data[CPipe.PIPE_DIAM_INDEX])) { row["Diameter"] = item.Data[CPipe.PIPE_DIAM_INDEX]; } 50 else { row["Diameter"] = 0; Console.WriteLine("Diameter非数字:" + item.Data[CPipe.PIPE_DIAM_INDEX]); } 51 52 if (item.Data[CPipe.PIPE_ROUGH_INDEX].Trim().Length == 0) { row["Roughness"] = 0; Console.WriteLine("Roughness为空:" + item.Data[CPipe.PIPE_ROUGH_INDEX]); } 53 if (IsNumeric(item.Data[CPipe.PIPE_ROUGH_INDEX])) { row["Roughness"] = item.Data[CPipe.PIPE_ROUGH_INDEX]; } 54 else { row["Roughness"] = 0; Console.WriteLine("Roughness非数字:" + item.Data[CPipe.PIPE_ROUGH_INDEX]); } 55 */ 56 57 row["Length"] = item.Data[CPipe.PIPE_LEN_INDEX]; 58 row["Diameter"] = item.Data[CPipe.PIPE_DIAM_INDEX]; 59 row["Roughness"] = item.Data[CPipe.PIPE_ROUGH_INDEX]; 60 row["MinorLoss"] = item.Data[CPipe.PIPE_MLOSS_INDEX]; 61 row["Status"] = item.Data[CPipe.PIPE_STATUS_INDEX]; 62 row["Comment"] = item.Data[CGlobalConst.COMMENT_INDEX]; 63 64 dtLoad.Rows.Add(row); //加入到DataTable 65 } 66 #endregion 67 #region 批量插入数据库 SqlBulkCopy声明及参数设置 68 try 69 { 70 // SqlBulkCopy xx = new SqlBulkCopy(sqlconn, 71 // SqlBulkCopy bulk = new SqlBulkCopy(sqlconn.ToString(), SqlBulkCopyOptions.UseInternalTransaction) 72 // { DestinationTableName = "ENG_FailSendSMS" /*设置数据库目标表名称*/, BatchSize = dt.Rows.Count /*每一批次中的行数*/ }; 73 // SqlBulkCopy xxx =new SqlBulkCopy(sqlconn, 74 SqlBulkCopy bulk = new SqlBulkCopy(sqlconn, SqlBulkCopyOptions.UseInternalTransaction, null) { DestinationTableName = "T_PIPES" /*设置数据库目标表名称*/, BatchSize = dtLoad.Rows.Count /*每一批次中的行数*/ }; 75 76 77 bulk.ColumnMappings.Add("ProjectID", "ProjectID"); //设置数据源中的列和目标表中的列之间的映射关系 78 bulk.ColumnMappings.Add("ModelID", "ModelID");//ColumnMappings.Add("源数据表列名称", "目标表数据列名称"); 79 bulk.ColumnMappings.Add("ID", "ID"); 80 bulk.ColumnMappings.Add("Node1", "Node1"); 81 bulk.ColumnMappings.Add("Node2", "Node2"); 82 bulk.ColumnMappings.Add("Length", "Length"); 83 bulk.ColumnMappings.Add("Diameter", "Diameter"); 84 bulk.ColumnMappings.Add("Roughness", "Roughness"); 85 bulk.ColumnMappings.Add("MinorLoss", "MinorLoss"); 86 bulk.ColumnMappings.Add("Status", "Status"); 87 bulk.ColumnMappings.Add("Comment", "Comment"); 88 89 // insert_pipesData(db_do, prjId, modid, PipeLines[i].ID, PipeLines[i].Node1, PipeLines[i].Node2, PipeLines[i].Data[CPipe.PIPE_LEN_INDEX], PipeLines[i].Data[CPipe.PIPE_DIAM_INDEX], PipeLines[i].Data[CPipe.PIPE_ROUGH_INDEX], PipeLines[i].Data[CPipe.PIPE_MLOSS_INDEX], PipeLines[i].Data[CPipe.PIPE_STATUS_INDEX], PipeLines[i].Data[CGlobalConst.COMMENT_INDEX]); 90 91 // void insert_pipesData(WaterNetObjectDB db_do, string prjId, string modid, string id, string node1, string node2, string len, string diam, string rough, string mloss, string status, string comment) 92 // { 93 // string sql; 94 // sql = "insert into T_PIPES values(" + prjId + "," + modid + ",‘" + id + "‘,‘" + node1 + "‘,‘" + node2 + "‘," + len + "," + diam + "," + rough + ",‘" + mloss + "‘,‘" + status + "‘,‘" + comment + "‘) "; 95 // db_do.nonQuerySql(sql); 96 // } 97 98 // [ProjectID] ,[ModelID] ,[ID] ,[Node1] ,[Node2] ,[Length] ,[Diameter] ,[Roughness],[MinorLoss],[Status] ,[Comment] 99 #endregion 100 bulk.WriteToServer(dtLoad); 101 if (bulk != null) 102 { 103 bulk.Close(); 104 } 105 } 106 catch (Exception e) 107 { 108 Console.WriteLine(e.Message.ToString()); 109 } 110 }

 

c# 把List<T>转成DataTable对象,批量导入Sqlserver库

标签:映射关系   设置   param   try   ring   之间   div   eof   bsp   

人气教程排行