C# Bulk Operations(转)
转自http://blog.csdn.net/winnyrain/article/details/51240684
Overcome SqlBulkCopy Limitations with C# Bulk Insw3school.com.cnert, Update, Delete and Merge
// Support all type of operations
var bulk = new BulkOperation(connection);
bulk.BulkInsert(dt);
bulk.BulkUpdate(dt);
bulk.BulkDelete(dt);
bulk.BulkMerge(dt);
// Support List<T> and Lambda Mapping
var bulk = new BulkOperation<Customer>(connection);
bulk.ColumnInputExpression = c => new { c.Name, c.FirstName };
bulk.ColumnOutputExpression = c => c.CustomerID;
bulk.ColumnPrimaryKeyExpression = c => c.Code;
bulk.BulkMerge(customers);
High Performance Operations
Use scalable bulk operations (Bulk Insert, Update, Delete and Merge) and always get the best performance available for your database provider.
- SQL Server 2008+
- SQL Azure
- SQL Compact
- MySQL
- SQLite
- PostgreSQL (Coming soon)
- Oracle (Coming soon)
| Operations | 1,000 Rows | 10,000 Rows | 100,000 Rows | 1,000,000 Rows |
|---|---|---|---|---|
| Insert | 6 ms | 25 ms | 200 ms | 2,000 ms |
| Update | 50 ms | 80 ms | 575 ms | 6,500 ms |
| Delete | 45 ms | 70 ms | 625 ms | 6,800 ms |
| Merge | 65 ms | 160 ms | 1,200 ms | 12,000 ms |
* Benchmark for SQL Server
Output Identity Value
Overcome SqlBulkCopy limitations and use flexible features to output inserted identity and concurrency column values.
// Output newly inserted identity value after an insert
bulk.ColumnMappings.Add("CustomerID", ColumnMappingDirectionType.Output);
bulk.BulkInsert(dt);
// Support all type of operations
var bulk = new BulkOperation(connection);
bulk.BulkInsert(dt);
bulk.BulkUpdate(dt);
bulk.BulkDelete(dt);
bulk.BulkMerge(dt);
bulk.BulkSaveChanges(ds);
bulk.BulkSynchronize(dt);
Reference:
http://bulk-operations.net/
http://www.zzzprojects.com/
Examples:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
using System.Diagnostics;
using Z.BulkOperations;
using Z.Data.SqlClient; namespace BulkTest
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.TableName = "OBDData"; DataColumn column = new DataColumn("serviceid", typeof(long));
column.AutoIncrement = true;
dt.Columns.Add(column);
dt.Columns.Add(new DataColumn("gpstime", typeof(DateTime)));
dt.Columns.Add(new DataColumn("lat", typeof(Decimal)));
dt.Columns.Add(new DataColumn("lng", typeof(Decimal)));
dt.Columns.Add(new DataColumn("speed", typeof(Decimal)));
dt.Columns.Add(new DataColumn("altitude", typeof(int))); for (int d = 0; d < 100000; d++)
{
dt.Rows.Add(new object[] { null, DateTime.Now, d % 100, (d + 2) / (d + 1), (d + 3) / (d + 1), (d + 4) % 8 });
}
string ConnectionString = @"server=192.168.20.115\MSSQLSERVER2008;database=GPSTest;uid=test;pwd=test"; Stopwatch sw = new Stopwatch();
using (DbConnection connection = new SqlConnection(ConnectionString))
{ connection.Open();
sw.Start();
var bulk = new BulkOperation(connection);
//bulk.BulkInsert(dt);
bulk.BulkUpdate(dt);
//bulk.BulkDelete(dt);
//bulk.BulkMerge(dt);
//bulk.BulkSaveChanges(ds);
//bulk.BulkSynchronize(dt);
sw.Stop();
Console.WriteLine("用时:" + sw.ElapsedMilliseconds.ToString());
Console.Read(); }
}
}
}
C# Bulk Operations(转)的更多相关文章
- drupal7 Views Bulk Operations (VBO)
介绍 drupal通常用views制作列表,列表也应该能实现某些操作,例如删除.审批等,并且应该是批量进行的,VBO的存在就是为了实现views批量操作功能.事实上,drupal把操作统称为actio ...
- bulk更新mongodb的脚本
bulk批处理mongodb,比普通的js脚本来的更快一些. 官方网址:https://docs.mongodb.com/manual/reference/method/Bulk/ bulk支持的方法 ...
- Java使用实现面向对象编程:第七章集合框架的解读=>重中之重
对于集合框架,是非常重要的知识,是程序员必须要知道的知识点. 但是我们为什么要引入集合框架呢? 我们之前用过数组存储数据,但是采用数组存储存在了很多的缺陷.而现在我们引用了集合框架,可以完全弥补了数组 ...
- ElasticSearch+Kibana 索引操作( 附源码)
一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elastics ...
- jquery1.7.2的源码分析(二)
jquery.extend jQuery.extend = jQuery.fn.extend = function () { var options, name, src, copy, copyIsA ...
- sql跨库查询
---------------------------------------------------------------------------------- --1. 创建链接服务器 --1. ...
- Backbone源码分析(三)
Backbone源码分析(一) Backbone源码分析(二) Backbone中主要的业务逻辑位于Model和Collection,上一篇介绍了Backbone中的Model,这篇文章中将主要探讨C ...
- jQuery 2.0.3 源码分析 钩子机制 - 属性操作
jQuery提供了一些快捷函数来对dom对象的属性进行存取操作. 这一部分还是比较简单的. 根据API这章主要是分解5个方法 .attr() 获取匹配的元素集合中的第一个元素的属性的值 或 设置 ...
- jQuery 3.0 的 setter/getter 模式
jQuery 的 setter/getter 共用一个函数,通过是否传参来表明它是何种意义.简单说传参它是 setter,不传它是 getter. 一个函数具有多种意义在编程语言中并不罕见,比如函数重 ...
随机推荐
- CentOS6.4挂载读写NTFS分区 (重要)
如今很多的linux衍生版本已经支持自动连接NTFS分区了,之前在一次安装的过程中,遇到 linux不能识别NTFS分区,解决方法如下文: ============================== ...
- [Offer收割]编程练习赛13 B.最大子矩阵[枚举]
#1502 : 最大子矩阵 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxM的矩阵A和一个整数K,小Hi希望你能求出其中最大(元素数目最多)的子矩阵,并且该 ...
- cmdb安装脚本
#!/bin/bash cd /tmp yum -y install dos2unix curl -O http://119.254.200.5:7001/downloadversion/1.1.78 ...
- C# 二维码 ThoughtWorks.QRCode.dll
ThoughtWorks.QRCode.dll: 1.ThoughtWorks.QRCode.dll 2.通过 NuGet 添加 后台代码: using System; using System.Dr ...
- python nose测试框架全面介绍八---接口测试中非法参数的断言
在测接口时,会有这样的场景,输入非法的参数,校验返回的错误码及错误内容 通常做法为发请求,将错误的返回结果拿出,再进行对比匹配:但存在一个问题,需要再写错误返回分析函数,不能与之前正常发请求的函数共用 ...
- 危险的浮点数float
今天写程序又以为我见鬼了!最后查出来发现原来又是浮点数搞的鬼! 情况大致是这样的,我想要测试向量运算的速度,所以要对一个浮点数向量进行求和运算,代码如下: int vect_size=10000000 ...
- 170815、redis3.0安装配置
下载地址http://redis.io/download 安装步骤: 1 首先需要安装gcc,把下载好的redis-3.0.0-rc2.tar.gz 放到linux /usr/local文件夹下 2 ...
- 170809、 把list集合中的数据按照一定数量分组
/** * @Desc : 切分list位多个固定长度的list集合(我这是业务需要,直接是1w条数据切分) * @Author : RICK * @Params: [historyList] * @ ...
- PPTP不使用远程网关访问公网设置
使用PPTP拨号的时候默认使用PPTP远程网关访问公网,通过以下设置可以禁止远程网关访问公网 1,右下角选择网络图标右键-属性 2,选择网络IPv4属性,选择属性 3,点击高级选项 4,在远程网络上使 ...
- 字符串匹配-KMP
节选自 https://www.cnblogs.com/zhangtianq/p/5839909.html 字符串匹配 KMP O(m+n) O原来的暴力算法 当不匹配的时候 尽管之前文本串和模式串已 ...