c# 把List<T>转成DataTable对象,批量导入Sqlserver库
/// <summary>
/// Sqlbulkcopies the specified SMS.批量插入到数据库
/// </summary>
/// <param name="data">list类型数据.</param>
/// <param name="sqlconn">数据库连接字符串.</param>
private void SqlbulkcopyPipeLines(List<CPipe> data, SqlConnection sqlconn, string prjId, string modid)
{
#region 待处理数据初始化处理
List<PropertyInfo> pList = new List<PropertyInfo>();//创建属性的集合
DataTable dtLoad = new DataTable();
//把所有的public属性加入到集合 并添加DataTable的列
// Array.ForEach<PropertyInfo>(typeof(CJunc).GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); }); //获得反射的入口(typeof()) //要对 array 的每个元素执行的 System.Action。 dtLoad.Columns.Add("ProjectID", typeof(int));
dtLoad.Columns.Add("ModelID", typeof(int));
dtLoad.Columns.Add("ID", typeof(string));
dtLoad.Columns.Add("Node1", typeof(string));
dtLoad.Columns.Add("Node2", typeof(string));
dtLoad.Columns.Add("Length", typeof(decimal));
dtLoad.Columns.Add("Diameter", typeof(decimal));
dtLoad.Columns.Add("Roughness", typeof(decimal));
dtLoad.Columns.Add("MinorLoss", typeof(string));
dtLoad.Columns.Add("Status", typeof(string));
dtLoad.Columns.Add("Comment", typeof(string)); foreach (var item in data)
{
DataRow row = dtLoad.NewRow(); //创建一个DataRow实例
// pList.ForEach(p => row[p.Name] = p.GetValue(item, null)); //给row 赋值
// [ProjectID] ,[ModelID] ,[ID] ,[Node1] ,[Node2] ,[Length] ,[Diameter] ,[Roughness],[MinorLoss],[Status] ,[Comment]
// 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]); row["ProjectID"] = prjId;
row["ModelID"] = modid;
row["ID"] = item.ID;
row["Node1"] = item.Node1;
row["Node2"] = item.Node2; /*
if (item.Data[CPipe.PIPE_LEN_INDEX].Trim().Length == 0) { row["Length"] = 0; Console.WriteLine("Length为空:" + item.Data[CPipe.PIPE_LEN_INDEX]); }
if (IsNumeric(item.Data[CPipe.PIPE_LEN_INDEX])) { row["Length"] = item.Data[CPipe.PIPE_LEN_INDEX]; }
else { row["Length"] = 0; Console.WriteLine("Length非数字:" + item.Data[CPipe.PIPE_LEN_INDEX]); } if (item.Data[CPipe.PIPE_DIAM_INDEX].Trim().Length == 0) { row["Diameter"] = 0; Console.WriteLine("Diameter为空:" + item.Data[CPipe.PIPE_DIAM_INDEX]); }
if (IsNumeric(item.Data[CPipe.PIPE_DIAM_INDEX])) { row["Diameter"] = item.Data[CPipe.PIPE_DIAM_INDEX]; }
else { row["Diameter"] = 0; Console.WriteLine("Diameter非数字:" + item.Data[CPipe.PIPE_DIAM_INDEX]); } if (item.Data[CPipe.PIPE_ROUGH_INDEX].Trim().Length == 0) { row["Roughness"] = 0; Console.WriteLine("Roughness为空:" + item.Data[CPipe.PIPE_ROUGH_INDEX]); }
if (IsNumeric(item.Data[CPipe.PIPE_ROUGH_INDEX])) { row["Roughness"] = item.Data[CPipe.PIPE_ROUGH_INDEX]; }
else { row["Roughness"] = 0; Console.WriteLine("Roughness非数字:" + item.Data[CPipe.PIPE_ROUGH_INDEX]); }
*/ row["Length"] = item.Data[CPipe.PIPE_LEN_INDEX];
row["Diameter"] = item.Data[CPipe.PIPE_DIAM_INDEX];
row["Roughness"] = item.Data[CPipe.PIPE_ROUGH_INDEX];
row["MinorLoss"] = item.Data[CPipe.PIPE_MLOSS_INDEX];
row["Status"] = item.Data[CPipe.PIPE_STATUS_INDEX];
row["Comment"] = item.Data[CGlobalConst.COMMENT_INDEX]; dtLoad.Rows.Add(row); //加入到DataTable
}
#endregion
#region 批量插入数据库 SqlBulkCopy声明及参数设置
try
{
// SqlBulkCopy xx = new SqlBulkCopy(sqlconn,
// SqlBulkCopy bulk = new SqlBulkCopy(sqlconn.ToString(), SqlBulkCopyOptions.UseInternalTransaction)
// { DestinationTableName = "ENG_FailSendSMS" /*设置数据库目标表名称*/, BatchSize = dt.Rows.Count /*每一批次中的行数*/ };
// SqlBulkCopy xxx =new SqlBulkCopy(sqlconn,
SqlBulkCopy bulk = new SqlBulkCopy(sqlconn, SqlBulkCopyOptions.UseInternalTransaction, null) { DestinationTableName = "T_PIPES" /*设置数据库目标表名称*/, BatchSize = dtLoad.Rows.Count /*每一批次中的行数*/ }; bulk.ColumnMappings.Add("ProjectID", "ProjectID"); //设置数据源中的列和目标表中的列之间的映射关系
bulk.ColumnMappings.Add("ModelID", "ModelID");//ColumnMappings.Add("源数据表列名称", "目标表数据列名称");
bulk.ColumnMappings.Add("ID", "ID");
bulk.ColumnMappings.Add("Node1", "Node1");
bulk.ColumnMappings.Add("Node2", "Node2");
bulk.ColumnMappings.Add("Length", "Length");
bulk.ColumnMappings.Add("Diameter", "Diameter");
bulk.ColumnMappings.Add("Roughness", "Roughness");
bulk.ColumnMappings.Add("MinorLoss", "MinorLoss");
bulk.ColumnMappings.Add("Status", "Status");
bulk.ColumnMappings.Add("Comment", "Comment"); // 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]); // 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)
// {
// string sql;
// sql = "insert into T_PIPES values(" + prjId + "," + modid + ",'" + id + "','" + node1 + "','" + node2 + "'," + len + "," + diam + "," + rough + ",'" + mloss + "','" + status + "','" + comment + "') ";
// db_do.nonQuerySql(sql);
// } // [ProjectID] ,[ModelID] ,[ID] ,[Node1] ,[Node2] ,[Length] ,[Diameter] ,[Roughness],[MinorLoss],[Status] ,[Comment]
#endregion
bulk.WriteToServer(dtLoad);
if (bulk != null)
{
bulk.Close();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message.ToString());
}
}
c# 把List<T>转成DataTable对象,批量导入Sqlserver库的更多相关文章
- 封装一个ExcelHelper,方便将Excel直接转成Datatable对象
public class ExcelHelper { /// <summary> /// Excel转换成DataTable /// </summary> /// <pa ...
- [Json] C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json (转载)
点击下载 ConvertJson.rar 本类实现了 C#ConvertJson|List转成Json|对象|集合|DataSet|DataTable|DataReader转成Json|等功能大家先预 ...
- 将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据
领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其 ...
- 简单的反射 把datatable 转换成list对象
/// <summary> /// 把datatable 转换成list对象 /// </summary> /// <typeparam name="T&quo ...
- DataTable转化成实体对象
/// <summary> /// The data extension. /// </summary> public static class DataExtension { ...
- SQLBulkCopy使用实例--读取Excel写入数据库/将 Excel 文件转成 DataTable
MS SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表可以在不同服务器上). SqlBulkCopy 类允许编写提供类似功能的托管代码解决方 ...
- .Net中List<T> 泛型转成DataTable、DataSet
在开发过程过程中有时候需要将List<T>泛型转换成DataTable.DataSet,可以利用反射机制将DataTable的字段与自定义类型的公开属性互相赋值. 1.List<T& ...
- 带复杂表头合并单元格的HtmlTable转换成DataTable并导出Excel
步骤: 一.前台JS取HtmlTable数据,根据设定的分隔符把数据拼接起来 <!--导出Excel--> <script type="text/javascript&qu ...
- DataSet与DataTable对象
DataSet与DataTable对象 摘自:http://www.cnblogs.com/fttbfttb/articles/1509662.html DataSet对象 DataSet是ADO.N ...
随机推荐
- o'Reill的SVG精髓(第二版)学习笔记——第四章
第四章:基本形状 4.1线段 SVG可以使用<line>元素画出一条直线段.使用时只需要指定线段起止点的x和y坐标即可.指定坐标时可以不带单位,此时会使用用户坐标,也可以带上单位,如em. ...
- Git相关内容
先聊一点关于gitlab的内容和github的内容 Gitlab和GitHub,都是我们可以存放代码库的地方.不过Gitlab可以免费的存储私人代码,GitHub需要花钱才能够存储私人代码库,不过我想 ...
- sysdate 和 current_date 的区别
在oracle中current_date与sysdate都是显示当前系统时间, 其结果基本相同,但是有三点区别: 1. current_date返回的是当前会话时间,而sysdate返回的是服务器时间 ...
- 快速排序_C语言_数组
快速排序_C语言_数组 #include <stdio.h> void quickSort(int *, int, int); int searchPos(int *, int, int) ...
- rest_framework --- APIView
一.什么是rest_framework 它是基于Django的,帮助我们快速开发符合RESTful规范的接口框架. 安装方式有很多种,可以通过pip,或者在pycharm中安装也可以 二.APIVie ...
- FBI树
题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...
- haproxy+keepalived主备与双主模式配置
Haproxy+Keepalived主备模式 主备节点设置 主备节点上各安装配置haproxy,配置内容且要相同 global log 127.0.0.1 local2 chroot /var/lib ...
- js分割字符串
js分割字符串 我想达到通过 : 分割 只要第一次分割,后面的内容不使用分割 不行,没找到可以直接用的方法,不过可以通过其它方式达到效果 eg: str.split(':',2)[0] (第一个分隔符 ...
- ES6、7、8、9新语法新特性
前言 如果你擅长这种扩散式学习方式,不妨再进一步温习一下整个 ES6 引入的新特性,笔者强烈推荐阮一峰老师的 ECMAScript 6 入门 一书. ES2018 引入的特性还太新,单在对 ES6 特 ...
- php 删除富文本编辑器保存内容中的其他代码(保留中文)
$str = '<p><p style="ve:"">测试筛选文本域内的中文 </p><p sty;"> ...