• 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         }
  • 相关阅读:
    如何打开指定文件所在的文件夹并选中文件
    不阻止多线程中控件跨线程访问
    .NET使用并行计算 提高执行效率
    关于线程安全中Lock的一些说明
    多线程中调用多参数的方法
    C#把汉字转换成拼音
    跨窗体Invoke时使用匿名方法或者带参方法
    给MP3音乐文件写ID3信息和专辑封面
    用Python作GIS:菜谱篇
    python中对象self的由来
  • 原文地址:https://www.cnblogs.com/lj821022/p/7010543.html
Copyright © 2020-2023  润新知