使用SqlBulkCopy大批量导入数据

2023-10-26

实际的开发可能会遇到数据大批量插入数据的问题,若是一条条的循环倒数效率非常低下,这个较好的解决方案
 1 
 2     protected   void  Button1_Click( object  sender, EventArgs e)
 3      { 
 4 
 5          DateTime beginTime  =  DateTime.Now;
 6          Response.Write( " 开始时间: "   +  beginTime.ToString( " yyyy年MM月dd日:HH:mm:ss:fff " )); 
 7 
 8           // 构造一个Datatable存储将要批量导入的数据
 9          DataTable dt  =   new  DataTable();
10          dt.Columns.Add( " id " typeof ( string ));
11          dt.Columns.Add( " name " typeof ( string )); 
12 
13           //  见识下SqlBulkCopy强悍之处,来个十万条数数据试验
14           int  i;
15           for  (i  =   0 ; i  <   100000 ; i ++ )
16          {
17              DataRow dr  =  dt.NewRow();
18              dr[ " name " =  i.ToString();
19              dt.Rows.Add(dr);
20          } 
21 
22           string  str  =  ConfigurationManager.ConnectionStrings[ " connStr " ].ConnectionString.ToString();
23           // 声明数据库连接
24          SqlConnection conn  =   new  SqlConnection(str); 
25 
26          conn.Open();
27           // 声明SqlBulkCopy ,using释放非托管资源
28           using  (SqlBulkCopy sqlBC  =   new  SqlBulkCopy(conn))
29          {
30               // 一次批量的插入的数据量
31              sqlBC.BatchSize  =   1000 ;
32               // 超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除
33              sqlBC.BulkCopyTimeout  =   60
34 
35               // 設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。  
36              sqlBC.NotifyAfter  =   10000 ;
37              sqlBC.SqlRowsCopied  +=   new  SqlRowsCopiedEventHandler(OnSqlRowsCopied); 
38 
39               // 设置要批量写入的表
40              sqlBC.DestinationTableName  =   " dbo.text "
41 
42               // 自定义的datatable和数据库的字段进行对应
43              sqlBC.ColumnMappings.Add( " id " " tel " );
44              sqlBC.ColumnMappings.Add( " name " " neirong " ); 
45 
46               // 批量写入
47              sqlBC.WriteToServer(dt);
48          }
49          conn.Dispose();
50          Response.Write( " <br/> " ); 
51 
52   
53 
54          DateTime endTime  =  DateTime.Now;
55          Response.Write( " 结束时间: "   +  endTime.ToString( " yyyy年MM月dd日:HH:mm:ss:fff " ));
56          TimeSpan useTime  =  endTime - beginTime; // 使用时间
57          Response.Write( " <br/>插入时间: " +  useTime.TotalSeconds.ToString() + " " ); 
58 
59      }
60       // 响应时事件
61       void  OnSqlRowsCopied( object  sender, SqlRowsCopiedEventArgs e)
62      {
63          Response.Write( " <br/> OK!  " );
64      } 
65 
66   
67 
68 
这个是程序的运行结果:  

转载于:https://www.cnblogs.com/flychaochao/archive/2009/07/22/1528600.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用SqlBulkCopy大批量导入数据 的相关文章

随机推荐

  • JAVA递归查询根据当前节点查询所有子节点

    public List
  • 数据库从入门到精通01

    文章目录 数据库应用 概念 什么是数据库 关系型和非关系型 关系型数据库 Mysql数据库 MySQL数据存放在哪里 MySQL服务端 MySQL客户端1 DOS窗口 MySQL客户端2 可视化工具 数据库的结构 数据库结构 SQL语句 定
  • python实用脚本(六)—— pandas库的使用(生成、读取表格)

    本期主题 python的pandas使用 往期链接 python实用脚本 一 批量修改目标文件夹下的文件名 python实用脚本 二 使用xlrd读取excel python实用脚本 三 通过有道智云API实现翻译 python实用脚本 四
  • 2021年全国职业院校技能大赛 “大数据技术与应用”—模拟赛题(一)

    2021年全国职业院校技能大赛 大数据技术与应用 模拟赛题 一 文章适合了解大数据技术与应用技能大赛 赛题 文章在编写过程中难免有疏漏和错误 欢迎大佬指出文章的不足之处 更多内容请点进 Lino White 查看 未来的世界充满着各式各样的
  • vscode的“安装”、“软件中文化”、“代码格式化”和“前端边编程边看到效果”的过程设置方法

    本文主要用来对vscode进行基础设置 通篇看起来偏过程化 最好从头到尾一步一步跟着设置 目录 一 安装vscode 二 安装 Chinese 插件 使软件中文化 三 安装软件主题 使软件界面个性化 四 将一个文件目录作为项目目录打开 五
  • Matlab:尝试将 SCRIPT XXX 作为函数执行的解决方案

    Matlab 尝试将 SCRIPT XXX 作为函数执行的解决方案 最近在做图像处理小实验的过程中遇到了无比沙雕的情况 被自己佛了 最近真的智商不在线 或者没在线过 先描述一下问题 在Matlab中调用直方图均衡化函数histeq 但是出现
  • 进程、线程相关基础理论总结

    进程 线程相关基础理论 一 进程与线程的区别 1 进程是指一个程序在计算机中的一次运行 它是资源分配的最小单位 2 线程是进程中调度执行的最小单位 3 进程有独立的内存空间 线程没有独立的内存空间 它必须运行在进程中 4 线程之间通信更方便
  • Runnable可以实现资源共享但Thread不能实现资源共享的原因

    转自 http blog csdn net javaniceyou article details 6859305 线程的两种实现方式 通过实现Runnable接口的线程方式可以实现资源的共享 而继承Thread则不可以 原因何在 先看下面
  • 华为OD2023(A卷)基础题37【工单调度策略】

    工单调度策略 题目描述 当小区通信设备上报警时 系统会自动生成待处理的工单 工单调度系统需要根据不同的策略 调度外线工程师 FME 上站去修复工单对应的问题 根据与运营商签订的合同 不同严重程度的工单被处理并修复的时长要求不同 这个要求被修
  • Android OpenGL 纹理绘制图像---Native实现

    本文纹理贴图的native实现 是指指定纹理的功能放在了native中实现 其他流程和Java实现类似 在这里就不赘述了 再回头看一下指定纹理数据的方法 void glTexImage2D GLenum target GLint level
  • 剑指 Offer 29. 顺时针打印矩阵

    顺时针打印矩阵 顺时针打印矩阵 思路 题解 JAVA判断二维数组是否空 左 下 右 上四条变上的循环 思路 参考视频 题解 注意边界条件 JAVA判断二维数组是否空 1 二维数组首地址是否为空 即array null 2 二维数组是否为 即
  • 命令行svn commit时注释实现换行

    svn ci m 11111 其中 111111 就是你填写的注释 如果你想换行写 也是可以的 只要你不写后面的那个引号 你可以写一行就回车一次 最后写完了 再加上后面的引号 然后再回车 就执行提交动作了 svn ci m 11111 gt
  • flutter简单的本地草稿箱功能

    需求1 发帖退出时提示是否保存草稿 需求2 每条草稿中可以保存多张图片 最多9张 或一条视频及三十来个其它参数 需求3 每条草稿都是可以被覆盖的 可以点击删除 需求4 草稿页面可以一键清空 需求5 草稿随app删除一起没掉 看到需求第一时间
  • 剑指 Offer 04. 二维数组中的查找

    题目链接 04 二维数组中的查找 思路分析 利用右上角的数来判断减少判断行数 如果右上角的数大于target那么该列都大于 所以j 如果小于target那么改行都小于 所以i class Solution public bool findN
  • MFC之模态非模态与自定义对话框16

    1 模态非模态对话框 由于我们这里使用按下菜单栏的选项弹出对话框 所以放在框架类中使用 注意 按下选项可以使用左键按下事件或者选项对应的处理事件 我们使用后者 这点需要区分好 1 先在菜单栏添加对话框的选项 2 在资源视图添加对话框 3 添
  • 语义分割的基本网络结构

    1 编码器 编码器通常可以理解为一些列对应的卷积模块 通常由卷积层 池化层以及BN层 卷积层负责获取图像特征 池化层对图像进行下采样并且将尺度不变特征传送到下一层 而BN主要对训练图像的分布归一化 加速学习 可以理解为编码器是用来进行特征提
  • BSC链节点搭建

    BSC 节点同步教程 准备步骤 安装go环境包 GO下载地址 https golang org doc install wget c https golang org dl go1 16 3 linux amd64 tar gz O sud
  • elasticjob启动报错KeeperErrorCode = OperationTimeout

    elasticjob报错 Caused by com dangdang ddframe job reg exception RegException org apache zookeeper KeeperException Operatio
  • 在学习DNS的过程中给我的启发

    在学习DNS的过程中给我的启发 在国内 关于DNS相关的话题一直络绎不绝 比如DNS根服务器为什么中国没有 还有Anycast BGP实现负载 为什么DNS只有13个 还有DNS over HTTPS 和 DNS over TLS的优劣等等
  • 使用SqlBulkCopy大批量导入数据

    实际的开发可能会遇到数据大批量插入数据的问题 若是一条条的循环倒数效率非常低下 这个较好的解决方案 1 2 protected void Button1 Click object sender EventArgs e 3 4 5 DateT