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

  1  /// <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         }
时间: 2024-10-25 17:24:20

c# 把List<T>转成DataTable对象,批量导入Sqlserver库的相关文章

封装一个ExcelHelper,方便将Excel直接转成Datatable对象

1 public class ExcelHelper 2 { 3 /// <summary> 4 /// Excel转换成DataTable 5 /// </summary> 6 /// <param name="excelFilePath">excel文件路径</param> 7 /// <param name="sheetNum">sheet序号</param> 8 /// <para

将list&lt;对象&gt;转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其他的方法,不过这个方法已经实现,就写一下了: 1.创建表. CREATE TABLE [dbo].[person]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NULL, [Pwd] [nvarchar](50) NULL, [Age]

DataTable转化成实体对象

1 /// <summary> 2 /// The data extension. 3 /// </summary> 4 public static class DataExtension 5 { 6 /// <summary> 7 /// ToList 8 /// </summary> 9 /// <typeparam name="T">T</typeparam> 10 /// <param name=&q

(转)在JAVA实现DataTable对象(三)——DataTable对象实现

大家都是行家,我就直接上代码了,我这个代码应该还是能看懂的,嘻嘻…. 1: import java.util.ArrayList; 2: import java.util.List; 3:   6:   7: public final class DataTable { 8:   9: private DataRowCollection rows; //用于保存DataRow的集合对象 10: private DataColumnCollection columns; //用于保存DataCol

json字符串转换成json对象

Json字符与Json对象的相互转换方式有很多,接下来将为大家一一介绍下,感兴趣的朋友可以参考下哈,希望可以帮助到你 1>jQuery插件支持的转换方式: 代码如下: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 2>浏览器支持的转换方式(Firefox,chrome,opera,safari,ie9,ie8)等浏览器: 代码如下: JSON.parse(jsonstr); //可以将json字符

通过codehaus来实现json写入文件和读取文件成json对象

原文:通过codehaus来实现json写入文件和读取文件成json对象 代码下载地址:http://www.zuidaima.com/share/1550463256562688.htm pom.xml需要增加如下依赖: <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-core-lgpl</artifactId> <version>1.

UIView对象转成UIImage对象

最近工作中,遇到一个需求,需要把一个UIView对象转成UIImage对象显示.经过网络搜索,找到如下答案: ? 1 2 3 4 5 6 7 8 -(UIImage*)convertViewToImage:(UIView*)v{     CGSize s = v.bounds.size;     UIGraphicsBeginImageContext(s);     [v.layer renderInContext:UIGraphicsGetCurrentContext()];     UIIm

IOS中将字典转成模型对象

作为IOS开发初级者今天学习了 如何将plist数据字典转成 数据对象数组中 .有点像C#中解析xml数据 的过程. apps.plist的xml数据是这样的 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList

list 转换成datatable

感谢网上的一位朋友 1 /// <summary> 2 60 /// 将集合类转换成DataTable 3 61 /// </summary> 4 62 /// <param name="list">集合</param> 5 63 /// <returns></returns> 6 64 public static DataTable ToDataTable(IList list) 7 65 { 8 66 Data