C#批量导入数据SqlBulkCopy类
[摘要] 因为要做一个号码归属地查询小功能,因为要导入外部(文本文件)的电话归属地数据,使用的是SqlDataAdapter类,数据不多,只四万有多条,表也只有一个,phoneBook表,使用的是DataTable和SqlDataAdapter,测试了三次导入,平均18秒,但是我觉得太慢了
因为要做一个号码归属地查询小功能,因为要导入外部(文本文件)的电话归属地数据,使用的是SqlDataAdapter类,数据不多,只四万有多条,表也只有一个,phoneBook表,使用的是DataTable和SqlDataAdapter,测试了三次导入,平均18秒,但是我觉得太慢了,就百度了下【SQL Server批量导入数据】,发现了SqlBulkCopy这个神器,一秒内导入。
SqlBulkCopy 这个类用于数据库大批量的数据传递,通常用于新旧数据库之间的更新。关键的一点是,即使表结构不同,也可以通过表字段或者字段位置建立映射关系,将所需的数据导入到目标数据库。
下面代码测试了数据量为一百万条数据,几次测试耗时8秒左右。
/// <summary>
/// SqlBulkCopy类的使用,批量更新数据
/// </summary>
public static void SqlBulkCopyDemo()
{
String connStr = ConfigurationManager.ConnectionStrings["connStr"].ToString();
//从数据库中获得表结构和数据
DataTable student = new DataTable();
SqlDataAdapter adapter = new SqlDataAdapter("select * from student", connStr);
adapter.Fill(student);
//向表中添加数据
DataRow dr;
Random r = new Random();
Stopwatch st = new Stopwatch();
for(int i = 0; i<1000000; i++)//一百万条数据
{//数据表中的列:name,no,age,sex
dr = student.NewRow();
dr[0] = "小花" + i;
dr[1] = 108 + i;
dr[2] = r.Next(9, 40);//这里是因为数据表中有约束,
dr[3] = (i % 2 == 0 ? "男" : "女");//这个也是有约束
student.Rows.Add(dr);
}
SqlBulkCopy bulk = new SqlBulkCopy(connStr);
bulk.DestinationTableName = "student";//设置目标表,这里是数据库中的student表
bulk.ColumnMappings.Add(0, 0);//建立映射关系
bulk.ColumnMappings.Add(1, 1);
bulk.ColumnMappings.Add(2, 2);
bulk.ColumnMappings.Add(3, 3);
st.Start();//开始计时
bulk.WriteToServer(student.GetChanges());
st.Stop();//结束计时
Console.WriteLine("数据插入成功,耗时为:" + st.ElapsedMilliseconds + "毫秒");
}
本文来自杜保良博客,转载请标明出处:http://www.dubaoliang.com/view/42.html
- [业界动态] C# DataTable使用方法详解
- [数据库] SQL合并两个或多个 SELECT 语句的结果集。
- [网站建设] C#常用正则表达式总结
- [操作系统] Windows Server 2003如何让服务器定时自动重启
- [搜索引擎] 百度搜索关键词工具升级啦
- [软件] IIS状态代码:IIS详细错误代码以及解释
- [搜索引擎] 谷歌更新搜索算法 eBay违规优化首先被惩罚
- [网站建设] C#项目 Unable to find manifest signing certificate in the certificate store
- [业界动态] SQL Server 安装后服务器改名后需处理问题
- [软件] 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0”提供程序
- [操作系统] U盘启动安装原系统文件(iso)Windows 7/Windows Server 2008 R2
- [移动互联] iPad Air黑屏死机怎么办,iPad mini突然黑屏死机
- [网站建设] IIS7.5无法连接Access数据库的解决方法
- [网络日志] 你的网速为啥不够快?
- [软件] Flv、Mp4的mime类型设置
- [数据库] SQL Server日期相减DATEDIFF()函数
- [网络日志] 手机上的生活
- [网络日志] 如何下载URL中带井号(#)的文件
- [操作系统] 解决Word/Excel启动提示向程序发送命令出现问题
- [网站建设] CKEditor自定义ToolBar按钮
- [搜索引擎] 百度、谷歌、360等各大搜索引擎网站提交入口
- [操作系统] Windows Server 2003远程桌面超出最大连接数
- [软件] visual studio 下解决:Unable to find manifest signing certificate in the certificate store
- [软件] IIS6.0服务器下做301永久重定向设置方法
- [操作系统] windows xp系统GHOST一健还原怎么用
- [数据库] sql Server 2008 阻止保存要求重新创建表的更改
- [网站建设] FCKeditor编辑器的图片路径会出现两个斜杠//
- [网站建设] C#删除字符串最后一个字符的几种方法
- [软件] RDP协议组件X.224在协议流中发现一个错误并且中断了客户端连接
- [操作系统] windows8无线连接受限的解决方法教程