1.获取要插入的数据datatable

  1. /// <summary>
  2. /// 从FMS取银行信息
  3. /// </summary>
  4. /// <returns></returns>
  5. public void GetBankInfoFromFMS()
  6. {
  7. try
  8. {
  9. string connectionStr = Tool.GetConnectionStrings("BPMConnection");
  10. BudgetServerClient client = new BudgetServerClient();
  11. BankInfoRequest request = new BankInfoRequest();
  12. request.PageIndex = ;
  13. request.PageSize = int.MaxValue;
  14. var response = client.QueryBankInfo(request);
  15. if (response != null && response.total > && response.data != null && response.data.Count > )
  16. {
  17. //先删除
  18. string sql = "delete from BPM_ExternalSupplier_BankInfo";
  19. SqlHelper.ExecuteNonQuery(connectionStr, sql);
  20.  
  21. //准备要批量插入的数据
  22. DataTable table = new DataTable();
  23. table.Columns.Add("ID");
  24. table.Columns["ID"].DataType = typeof(Guid);
  25. table.Columns.Add("Pkid");
  26. table.Columns.Add("BankName");
  27. table.Columns.Add("BankNum");
  28. table.Columns.Add("Province");
  29. table.Columns.Add("Citye");
  30. table.Columns.Add("CreateUser");
  31. table.Columns.Add("CreateTime");
  32. table.Columns.Add("ModifiedUser");
  33. table.Columns.Add("ModifiedTime");
  34. table.Columns.Add("IsDeleted");
  35. table.Columns["IsDeleted"].DataType = typeof(bool);
  36. foreach (var item in response.data)
  37. {
  38. DataRow row = table.NewRow();
  39. row["ID"] = Guid.NewGuid();
  40. row["Pkid"] = item.Pkid;
  41. row["BankName"] = item.BankName;
  42. row["BankNum"] = item.BankNum;
  43. row["Province"] = item.Province;
  44. row["Citye"] = item.Citye;
  45. row["CreateUser"] = "xuguanghui";
  46. row["CreateTime"] = DateTime.Now;
  47. row["ModifiedUser"] = "xuguanghui";
  48. row["ModifiedTime"] = DateTime.Now;
  49. row["IsDeleted"] = ;
  50. table.Rows.Add(row);
  51. }
  52. SqlHelper.BulkCopyData(table, connectionStr, "BPM_ExternalSupplier_BankInfo");
  53. }
  54. }
  55. catch (Exception ex)
  56. {
  57. Tool.SendErrorNotication("系统错误通知", "从FMS取银行信息GetBankInfoFromFMS方法错误,错误消息:" + ex.Message);
  58. }
  59. }

2.调用SqlBulkCopy

  1. /// <summary>
  2. /// 批量写入
  3. /// </summary>
  4. /// <param name="sourceTable">数据源</param>
  5. /// <param name="connStr">数据库连接串</param>
  6. /// <param name="destinationTableName">目标表</param>
  7. public static void BulkCopyData(DataTable sourceTable, string connStr, string destinationTableName)
  8. {
  9. SqlBulkCopy sbc = new SqlBulkCopy(connStr, SqlBulkCopyOptions.UseInternalTransaction);
  10. sbc.BulkCopyTimeout = ;
  11. try
  12. {
  13. sbc.DestinationTableName = destinationTableName;
  14. foreach (DataColumn dc in sourceTable.Columns)
  15. {
  16. sbc.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
  17. }
  18. sbc.WriteToServer(sourceTable);
  19. }
  20. catch
  21. {
  22. //The SqlBulkCopy object is automatically closed at the end of the using block.
  23. //可以不写,会自动关闭
  24. sbc.Close();
  25. }
  26. finally
  27. {
  28. //The SqlBulkCopy object is automatically closed at the end of the using block.
  29. //可以不写,会自动关闭
  30. sbc.Close();
  31. }
  32. }

SqlBulkCopy 批量insert的更多相关文章

  1. sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )

    通常,我们会对于一个文本文件数据导入到数据库中,不多说,上代码. 首先,表结构如下.   其次,在我当前D盘中有个文本文件名为2.txt的文件. 在数据库中,可以这样通过一句代码插入. Bulk in ...

  2. EntityFramework批量Insert

    先说解决办法:使用SqlBulkCopy. 然后问题是:这个和EF没有半点关系,还要拼DataSet. 再是解决办法:你可以自己封装一个,也可以使用人家写好的 EntityFramework.Bulk ...

  3. 【ADO.NET】SqlBulkCopy批量添加DataTable

    使用事务和SqlBulkCopy批量插入数据 SqlBulkCopy是.NET Framework 2.0新增的类,位于命名空间System.Data.SqlClient下,主要提供把其他数据源的数据 ...

  4. C#使用SqlTransaction事务回滚与SqlBulkCopy批量插入数据

    C#中批量处理数据,有时候因为一条记录导致整个批量处理失败.这时候肯能会导致数据不全等问题,这时候我们可以使用SqlTransaction来进行事务回滚,即是要么全部成功要么全部不成功.如下代码 // ...

  5. sql server 使用SqlBulkCopy批量插入数据库

    sql server sqlbulkcopy 批量数据插入数据库使用的是System.Data.SqlClient中的 SqlBulkCopy批量数据插入数据库 sql server 使用SqlBul ...

  6. java批量insert入mysql数据库

    mysql 批量insert语句为 insert into Table_(col1,col2...) values(val11,val12...),(val11,val12...),...; java ...

  7. SqlBulkCopy 批量复制数据到数据表

    使用 SqlBulkCopy 类只能向 SQL Server 表写入数据.但是,数据源不限于 SQL Server:可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataR ...

  8. JDBC批量Insert深度优化(有事务)

    环境: MySQL 5.1 RedHat Linux AS 5 JavaSE 1.5 DbConnectionBroker 微型数据库连接池   测试的方案: 执行10万次Insert语句,使用不同方 ...

  9. SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法

    原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...

随机推荐

  1. js验证身份证号码

    function IdentityCodeValid(code) { var city={11:"北京",12:"天津",13:"河北",1 ...

  2. HDU 5616 Jam's balance(DP)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=5616 题目: Jam's balance Time Limit: 2000/1000 MS (Java ...

  3. java基础06 IO流

    IO用于在设备间进行数据传输的操作. Java IO流类图结构:   IO流分类 字节流: InputStream FileInputStream BufferedInputStream Output ...

  4. angularjs-1.3代码学习 模块

    花了点时间,阅读了下angularjs的源码.本次先从模块化开始. angular可以通过module的api来实现前端代码的模块化管理.跟define类似.但不具备异步加载脚本的功能.先从最基本的m ...

  5. Tomcat启动中的一些问题

    (a)在eclipse中启动tomcat,在控制台加载的配置却是其他项目的,有时候也不是自己工作空间里的? 出现的一个原因是:在我tomcat的webapp目录下,我放了一个其他项目的war包,在to ...

  6. JDBC&&c3p0、事务、批处理、多线程 于一体的经典秘方QueryRunner

    目录: 基础篇_功能各自回顾 JDBC基础代码回顾(使用JdbcUtils工具简化) c3p0数据库连接池的使用(使用JdbcUtils工具简化) 大数据的插入(使用c3p0+JdbcUtils工具简 ...

  7. STF,docker学习资料整理

  8. LeetCode-Best Time to Buy and Sell Stock III[dp]

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  9. cesium 获取点击点的高程

    var picklHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);picklHandler .setInputAct ...

  10. Javascript数组(1)--基本属性及方法

    数组Array是Javascript语言中非常重要的两种引用类型数据之一,另外一种为对象Object.Array的数据模型可分为两种进行存储:堆栈结构.队列结构. 昨天,确切说是前天了,去和大学同学见 ...