SqlBulkCoy和普通数据库操作执行速度对比
SQLBulkCopy,用于数据库之间大批量的数据传递。通常用于新,旧数据库之间数据的更新。即使表结构完全不同,也可以通过字段间的对应关系,顺利的将数据导过来。
1.初始化SqlBulkCopy对象,用新的连接作为参数。
SqlBulkCopy bulkCopy = new SqlBulkCopy(链接字符串);
2.数据源与目的数据表的映射关系(列名要对应)
bulkCopy.ColumnMappings.Add("source",'"dest")
3.设置目标表名
bulkCopy.DestinationTableName = 目标表名;
4.设置一次性处理的行数。这个行数处理完后,会激发SqlRowsCopied()方法。默认为1
bulkCopy.NotifyAfter = 10;
5.传输数据
bulkCopy.WriteToServer(sdr);
目前有一个txt文档,里面记录了大量的数据

然后我们用常见的数据库操作将其导入数据库中
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "txt文件|*.txt";
if (ofd.ShowDialog() == false)
{ return;
}
//读取txt中的内容,然后拼接字符串
//readlines可以一行一行读取内容,并保留内容中的换行符,而 ReadAllLines 时,必须等待整个字符串数组返回后才能访问该数组。 因此,在处理非常大的文件时,ReadLines 可能更高效。
string[] lines = File.ReadLines(ofd.FileName, Encoding.Default).ToArray();
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connstr"].ToString()))
{
con.Open();
//当前时间
DateTime startTime = DateTime.Now;
for(int i=;i<=lines.Length;i++)
{
string line=lines[i];
string[] strs = line.Split('\t'); string startNum = strs[]; string city = strs[];
city = city.Trim('"'); string type = strs[];
type = type.Trim('"'); string areaNum = strs[];
areaNum = areaNum.Trim('"');
using (SqlCommand cmd = con.CreateCommand())
{
cmd.CommandText = @"insert into T_TelNum(StartNum,TelArea,TelType,AreaNum)
values(@StartNum,@TelArea,@TelArea,@AreaNum)";
cmd.Parameters.Add(new SqlParameter("@StartNum",startNum));
cmd.Parameters.Add(new SqlParameter("@TelArea", city));
cmd.Parameters.Add(new SqlParameter("@TelType", type));
cmd.Parameters.Add(new SqlParameter("@AreaNum", areaNum));
cmd.ExecuteNonQuery();
}
//执行到第i条的时间
DateTime nowTime = DateTime.Now;
TimeSpan ts = nowTime - startTime;
//double totalTime=(ts.TotalSeconds/(i+1))*(lines.Length)/60; //需要总秒数
double totalTime = ts.TotalSeconds * lines.Length / (i + );
运行项目,查看需要完成的总秒数。

一共将要运行时间1671秒,将近28分钟。
然后我们用SqlBulkCopy来读取数据并存储。
//创建一个DatatTable用于传递参数。
DataTable table = new DataTable();
//创建列与数据库对应上
table.Columns.Add("StartNum");
table.Columns.Add("TelArea");
table.Columns.Add("TelType");
table.Columns.Add("AreaNum");
DateTime start = DateTime.Now;
for (int i = ; i <= lines.Length; i++)
{
string line = lines[i];
string[] strs = line.Split('\t'); string startNum = strs[]; string city = strs[];
city = city.Trim('"'); string type = strs[];
type = type.Trim('"'); string areaNum = strs[];
areaNum = areaNum.Trim('"');
DataRow row = table.NewRow();
row[] = startNum;
row[] = city;
row[] = type;
row[] = areaNum; } using (System.Data.SqlClient.SqlBulkCopy copy = new System.Data.SqlClient.SqlBulkCopy(ConfigurationManager.ConnectionStrings[].ToString()))
{
//目的地的数据表名
copy.DestinationTableName = "T_TelNum";
//数据源与目的数据表的映射关系
copy.ColumnMappings.Add("StartNum", "StartNum");
copy.ColumnMappings.Add("TelArea", "TelArea");
copy.ColumnMappings.Add("TelType", "TelType");
copy.ColumnMappings.Add("AreaNum", "AreaNum"); copy.WriteToServer(table);
}
double totoleTime = DateTime.Now.Second- start.Second;

不难发现只用了3秒钟,所以可以看出在对大数据处理时最好使用SqlBulkCopy来进行操作!
SqlBulkCoy和普通数据库操作执行速度对比的更多相关文章
- Laravel—数据库操作与Eloquent模型使用总结
数据库操作 执行原生SQL //查询 $emp = DB::select('select * from employees where emp_no = 1'); $emp = DB::select( ...
- 通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷
原文:通过MyEclipse工具直接操作数据库,执行sql语句,方便快捷 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEcl ...
- SQL 2005 中查询或执行另外的数据库操作的方法
原文:SQL 2005 中查询或执行另外的数据库操作的方法 摘要: 如果,你想在一台数据库服务器上,查询另一个台数据服务器的数据该如何做呢?如果,你想在同一台数据服务器上,在不同的数据库之间查询数据, ...
- mysql在cmd命令下执行数据库操作
windows+r 运行cmd命令,执行以下操作! 当mysql 数据库文件相对于来说比较大的时候,这个时候你可能在正常环境下的mysql中是导入不进去的,因为mysql数据库本身就有默认的导入文件大 ...
- Docker for Windows(五)实践搭建SqlServer服务&执行数据库操作
上一篇我们已经搭建了一个mysql数据库服务了:Docker for Windows(四)实践搭建&删除MySQL服务,发现用Docker确实是方便且容易,但上一篇主要是服务的搭建删除等基础操 ...
- Spring学习总结(16)——Spring AOP实现执行数据库操作前根据业务来动态切换数据源
深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...
- ORACLE数据库误操作执行了DELETE,该如何恢复数据?
ORACLE数据库误操作执行了DELETE,该如何恢复数据? 原创 2016年08月11日 17:23:04 10517 作为一个程序员,数据库操作是必须的,但是如果操作失误,一般都会造成比较严重的后 ...
- 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷
通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEclipse中的window->show View->ot ...
- mysql数据库批量执行sql文件对数据库进行操作【windows版本】
起因: 因工作需要,在本机测试环境升级mysql数据库,需逐条执行mysql数据库的sql文件对数据库进行升级,因此找了些关于mysql的文章,对批量升级数据库所需的sql文件进行升级. 整理思路: ...
随机推荐
- [Effective C++ --021]必须返回对象时,别妄想返回其reference
引言 在条目20中,我们知道了值传递和引用传递的效率问题,因此在设计程序时,我们可能就尽可能来返回引用而不是值. 可是,可能会犯下面的一些错误:传递一些引用指向其实并不存在的对象. 第一节:返回临时变 ...
- 分布式应用处理方式 - Remoting
分布式应用程序 所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果. ...
- DRM in Android
我们Tieto公司的MM专家在<程序员>第8期上发表了一篇关于DRM的文章,请大家指教. DRM in Android DRM,英文全称为Digital Rights Management ...
- mysql中的第三范式
※多表操作 (凡是多表,都要用到关联技术(把多表合并成一个新表): 左关联.右关联.内关联.还有一个外(全)关联,MySQL不支持,为考虑软件兼容,我们开发一般不用.) ※表与表之间的关系:1对1,1 ...
- c++下new与delete基础用法
delete 释放new分配的单个对象指针指向的内存 delete[] 释放new分配的对象数组指针指向的内存那么,按照教科书的理解,我们看下下面的代码: ]; delete a; //方式1 del ...
- git - 版本控制器(本地仓库)
本地创建仓库,然后进行管理.提交到本地仓库(不需要网络),提交到远程仓库(需要网络) 相对于svn为克隆方式,赋值的是整个仓库,svn只是复制的代码. 1.电脑新创建一个”本地仓库”空文件夹 2. ...
- linux语言环境设置
查看linux的支持的语言集合 执行locale命令 LANG=zh_CN.UTF-8 LANGUAGE=zh_CN:zh LC_CTYPE="zh_CN.UTF-8" LC_NU ...
- jQuery实现jsonp源码分析(京东2015面试)
// Bind script tag hack transportjQuery.ajaxTransport( "script", function(s) { // This tra ...
- react ie10下报错
解决办法: 加 promise polyfill 参考地址:http://hao.jser.com/archive/12066/
- Python(2.7.6) 列表推导式
列表推导式是利用已有的列表导出新的列表,它的工作方式类似于 for 循环. 例如,有一个列表,现在想得到一个对应的列表,使得每个元素是原有列表中元素的平方: >>> [x ** 2 ...