ADO.Net使用SqlBulkCopy
2011-12-28 00:44
337 查看
ADO.Net从Framework2.0开始就支持批量更新(SqlBulkCopy),范例如下:
然后很多时候我们操作的是IEnumerable集合,这就需要一个IEnumerable到DataTable的接口。实现如下:
/// <summary> /// 批量复制 /// </summary> /// <param name="connectionString">目标表的数据库连接字符串</param> /// <param name="sourceTable">原表</param> /// <param name="destinationTable">目标表名</param> public static void ExecuteBulkCopy(string connectionString, DataTable sourceTable, string destinationTable) { using (SqlConnection sqlconn = new SqlConnection(connectionString)) { sqlconn.Open(); using (SqlBulkCopy sbc = new SqlBulkCopy(sqlconn)) { sbc.BatchSize = 1000; sbc.BulkCopyTimeout = 180; //将DataTable表名作为待导入库中的目标表名 sbc.DestinationTableName = destinationTable; //将数据集合和目标服务器库表中的字段对应 for (int i = 0; i < sourceTable.Columns.Count; i++) { //列映射定义数据源中的列和目标表中的列之间的关系 sbc.ColumnMappings.Add(sourceTable.Columns[i].ColumnName, sourceTable.Columns[i].ColumnName); } sbc.WriteToServer(sourceTable); } sqlconn.Close(); } } /// <summary> /// 批量复制 /// </summary> /// <param name="trans">事务</param> /// <param name="sourceTable">数据源</param> /// <param name="destinationTable">目标表名</param> public static void ExecuteBulkCopy(SqlTransaction trans, DataTable sourceTable, string destinationTable) { using (SqlBulkCopy sbc = new SqlBulkCopy(trans.Connection, SqlBulkCopyOptions.KeepIdentity, trans)) { sbc.BatchSize = 1000; sbc.BulkCopyTimeout = 180; //将DataTable表名作为待导入库中的目标表名 sbc.DestinationTableName = destinationTable; //将数据集合和目标服务器库表中的字段对应 for (int i = 0; i < sourceTable.Columns.Count; i++) { //列映射定义数据源中的列和目标表中的列之间的关系 sbc.ColumnMappings.Add(sourceTable.Columns[i].ColumnName, sourceTable.Columns[i].ColumnName); } sbc.WriteToServer(sourceTable); } }
然后很多时候我们操作的是IEnumerable集合,这就需要一个IEnumerable到DataTable的接口。实现如下:
public static DataTable LinqToDataTable(IEnumerable list) { DataTable table = new DataTable(); bool schemaIsBuild = false; PropertyInfo[] props = null; foreach (object item in list) { if (!schemaIsBuild) { props = item.GetType().GetProperties(); foreach (var pi in props) table.Columns.Add(new DataColumn(pi.Name, pi.PropertyType)); schemaIsBuild = true; } var row = table.NewRow(); foreach (var pi in props) row[pi.Name] = pi.GetValue(item, null); table.Rows.Add(row); } table.AcceptChanges(); return table; }
相关文章推荐
- ADO.NET 2.0 - 读者询问能否使用 SqlBulkCopy 对象来大量复制文字文件
- ADO.NET 2.0 - 读者询问能否使用 SqlBulkCopy 对象来大量复制文字文件
- 使用ADO.NET下的SqlBulkCopy类执行批量复制操作
- asp.net 使用SqlBulkCopy极速插入数据到 SQL Server
- ADO.NET 新特性之SqlBulkCopy
- 海量数据插入数据库效率对照測试 ---ADO.NET下SqlBulkCopy()对照LINQ 下InsertAllOnSubmit()
- ADO.NET 新特性之SqlBulkCopy
- SqlBulkCopy in ADO.NET 2.0
- c#ADO.NET / 用 SqlBulkCopy 类,海量批写入数据库
- 利用ADO.NET SqlBulkCopy 大批量快速导入数据
- ADO.NET下的SqlBulkCopy类执行数据库间批量复制操作
- IBatis.Net 下使用SqlBulkCopy 大批量导入数据 问题解决
- 海量数据插入数据库效率对比测试 ---ADO.NET下SqlBulkCopy()对比LINQ 下InsertAllOnSubmit()
- net2.0中使用SqlBulkCopy进行大批量数据迁移
- 利用ADO.NET SqlBulkCopy 大批量快速导入数据
- ADO.NET 大数据上传的利器 SqlBulkCopy
- ADO.NET 新特性之SqlBulkCopy(批量插入大量数据)
- VIsual Basic 2005 - 如何使用 SqlBulkCopy 对象来执行大量复制作业
- Winform使用ADO.NET的SqlDataAdapter更新多表数据