SqlBulkCopy批量写入25万条数据只需3s

时间:2023-01-09 00:15:58

Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下SqlBulkCopy 提供明显的性能优势。

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

下面介绍下Demo(批量写入258114条数号码归属地数据)

SqlBulkCopy批量写入25万条数据只需3s

            //打开选择文档对话框
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "文本类型|*.txt|文本类型|*.csv";//限定打开类型
if (ofd.ShowDialog() == false)
{
return;
}
string fileName = ofd.FileName;
string[] lines = File.ReadAllLines(fileName, Encoding.Default).ToArray();//打开文本,使用指定的格式编码读出所有行,然后关闭
//GetTableCoulmn(lines);
#region 原始代码
int s = System.Environment.TickCount;//记录函数执行开始时间
DataTable table = new DataTable();
//建立列名和导入的文件中的列名对应
table.Columns.Add(new DataColumn("StartNum"));
table.Columns.Add(new DataColumn("TelTypes"));
table.Columns.Add(new DataColumn("City"));
table.Columns.Add(new DataColumn("TelCode"));
for (int i = ; i < lines.Length; i++)
{
//插入行数据
string[] strs = lines[i].Split('\t');//字符串分割
DataRow row = table.NewRow();
row["StartNum"] = strs[];
row["TelTypes"] = strs[].ToString().Trim('"');//消除两边字符
row["City"] = strs[].ToString().Trim('"');
row["TelCode"] = strs[].ToString().Trim('"');
table.Rows.Add(row);
} string connstr = ConfigurationManager.ConnectionStrings["cnnstr"].ConnectionString;
using (SqlConnection cnn = new SqlConnection(connstr))
{
cnn.Open();
SqlBulkCopy copy = new SqlBulkCopy(cnn);
copy.DestinationTableName = "TelephoneFull";//插入目标表数据
copy.ColumnMappings.Add("StartNum", "StartNum");//列名、数据库表字段
copy.ColumnMappings.Add("TelTypes", "TelTypes");
copy.ColumnMappings.Add("City", "TelArea");
copy.ColumnMappings.Add("TelCode", "TelCode");
copy.WriteToServer(table);
}
int j = System.Environment.TickCount;//记录函数执行结束时间
MessageBox.Show("成功写入" + lines.Count() + "条数据,耗时" + (j - s) + "ms");
#endregion

测试后显示

SqlBulkCopy批量写入25万条数据只需3s

上述

定义 SqlBulkCopy 实例的数据源中的列与该实例的目标表中的列之间的映射。

如果数据源和目标表具有相同的列数,并且数据源中每个源列的序号位置匹配相应目标列的序号位置,则无需 ColumnMappings 集合。但是如果列计数不同,或序号位置不一致,则必须使用 ColumnMappings,以确保将数据复制到正确的列中。

SqlBulkCopy批量写入25万条数据只需3s的更多相关文章

  1. DataTable 快速导入数据库——百万条数据只需几秒

    public void InsertTable(DataTable dt, string TabelName, DataColumnCollection dtColum) { string str = ...

  2. java 批量插入10万条数据

    for (int i = 0; i < 100000; i++) { dbHelper.insert("INSERT aaa(name) Values ('1')"); } ...

  3. 1000万条数据导入mysql

    今天需要将一个含有1000万条数据的文本内容插入到数据库表中,最初自然想到的是使用Insertinto '表名'values(),(),()...这种插入方式,但是发现这种方式对1000万条数据量的情 ...

  4. 极限挑战—C&num;&plus;ODP 100万条数据导入Oracle数据库仅用不到1秒

    链接地址:http://www.cnblogs.com/armyfai/p/4646213.html 要:在这里我们将看到的是C#中利用ODP实现在Oracle数据库中瞬间导入百万级数据,这对快速批量 ...

  5. 极限挑战—C&num;100万条数据导入SQL SERVER数据库仅用4秒 &lpar;附源码&rpar;

    原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方 ...

  6. C&num;100万条数据导入SQL SERVER数据库仅用4秒 &lpar;附源码&rpar;

    作者: Aicken(李鸣)  来源: 博客园  发布时间: 2010-09-08 15:00  阅读: 4520 次  推荐: 0                   原文链接   [收藏] 摘要: ...

  7. (转)Python网络爬虫实战:世纪佳缘爬取近6万条数据

    又是一年双十一了,不知道从什么时候开始,双十一从“光棍节”变成了“双十一购物狂欢节”,最后一个属于单身狗的节日也成功被攻陷,成为了情侣们送礼物秀恩爱的节日. 翻着安静到死寂的聊天列表,我忽然惊醒,不行 ...

  8. QTreeView处理大量数据(使用1000万条数据,每次都只是部分刷新)

    如何使QTreeView快速显示1000万条数据,并且内存占用量少呢?这个问题困扰我很久,在网上找了好多相关资料,都没有找到合理的解决方案,今天在这里把我的解决方案提供给朋友们,供大家相互学习. 我开 ...

  9. Mvc&plus;Dapper&plus;存储过程分页10万条数据

    10万条数据采用存储过程分页实现(Mvc+Dapper+存储过程) 有时候大数据量进行查询操作的时候,查询速度很大强度上可以影响用户体验,因此自己简单写了一个demo,简单总结记录一下: 技术:Mvc ...

随机推荐

  1. 响应式web网站设计制作方法

    在研究响应式的时候,记录了一些感想,分享出来,抛砖引玉,希望可以和大家一起讨论.总结下来,响应式比之前想象的要复杂得多.1. ie9以下(不包括ie9)采用ie条件注释,为ie8以及一下单独开一个样式 ...

  2. oracle db mos文章 翻译系列

    http://blog.csdn.net/msdnchina/article/details/38377125

  3. Windows 8本地化多语言支持

    原文:Windows 8本地化多语言支持 在Win8平台处理本地化多语言的支持相对比较容易的,但比WP8稍微复杂一点,并不像WP8平台那样大部分工作都有VS IDE处理,Win8平台的操作基本需要开发 ...

  4. CUDA随机数生成库curand——deviceAPI

    原创作品,如要转载请注明出处:http://www.cnblogs.com/shrimp-can/p/6590152.html 最近要在device函数中使用curand库生成随机数,查找了下资料,除 ...

  5. JAVA程序员成长历程(二)

    提几个方向可以去尝试下: 1.订阅一些牛人的博客,这里面包括技术,学习,生活等等.不一定学技术,他们的经验都会让人受益匪浅. 我经常看的: 唐巧,IOS程序员.http://blog.devtang. ...

  6. 关于Unity中获得自己节点下的组件的简易方法

    在一个节点下挂载一个脚本,脚本里面要使用自己节点下的其他组件 用法1 private Light light; void Start () { this.light=this.GetComponent ...

  7. web页面的数据从excel中读取

    # -*- coding: utf-8 -*- import xdrlib ,sysimport xlrdimport datetimeimport jsonimport conf,reimport ...

  8. &period;net core grpc consul 实现服务注册 服务发现 负载均衡&lpar;二&rpar;

    在上一篇 .net core grpc 实现通信(一) 中,我们实现的grpc通信在.net core中的可行性,但要在微服务中真正使用,还缺少 服务注册,服务发现及负载均衡等,本篇我们将在 .net ...

  9. 理解 php new static

    今天在看 Laravel 的容器(Container)实现时,发现了这么一段突然不能理解的代码: ** * Set the globally available instance of the con ...

  10. WPF上下滚动字幕

    XAML代码: <local:WorkSpaceContent x:Class="SunCreate.CombatPlatform.Client.NoticeMarquee" ...