C# SQL Bulk Operations | High performance C# bulk insert, update, delete and merge for SQL Server, SQL Azure, SQL Compact, MySQL and SQLite.
JonathanMagnan Merge old docs with new docs
Merge old docs with new docs
Latest commit d8f04a9 Aug 14, 2018
Failed to load latest commit information.
docs Update trial-period-expired-exception.md Jul 31, 2018
docs2/pages Merge old docs with new docs Aug 14, 2018
src Update readme.txt Mar 17, 2017
README.md Update README.md Jun 20, 2017
version.txt Update version.txt Oct 30, 2017


Improve SQL insert, update, delete and merge performance and overcome SqlBulkCopy limitations

  • Auditing
  • Case Sensitivity
  • Entity DataSource / Lambda Mapping
  • Output Value
  • And more...

SQL Server - Benchmarks

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

As fast as SqlBulkCopy for insert but with way more capabilities


Support Multiple SQL Providers:

  • SQL Server 2008+
  • SQL Azure
  • SQL Compact
  • MySQL
  • SQLite
  • PostgreSQL
  • Oracle

Support Multiple Datasources:

  • Entity
  • DataTable
  • DataRow
  • DataReader
  • DataSet
  • Expando Object



PM> Install-Package Z.BulkOperations

* PRO Version unlocked for the current month

Stay updated with latest changes

Twitter Follow Facebook Like

Insert - Output Identity Value


You need to output newly generated identity value but SqlBulkCopy do not support it.


Map your identity column with output direction.

var bulk = new BulkOperation(connection);

bulk.ColumnMappings.Add("CustomerID", ColumnMappingDirectionType.Output);
// ... mappings ...


You can also output concurrency column (Timestamp) or any other column values. All kind of mapping direction are supported including "Formula" to use with a SQL Formula.

Entity DataSource / Lambda Mapping


You have a list of entity to insert but SqlBulkCopy doesn't support entity and lambda expression mapping.


Create a generic bulk operations with your entity type and use lambda expression for your column input, output and primary key 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;


Get rid of hardcoded string and use strongly-typed lambda expressions.

AutoMapping & Case Sensitivity


You have a DataTable which columns name match name in the database but SqlBulkCopy throw an error because name match are case insensitive.


Turn off case sensitivity with IsCaseSensitive property.

var bulk = new BulkOperation(connection);

bulk.IsCaseSensitive = false;


Remove useless code which would have required to create your own mapping and keep the essentials.


Contact our outstanding customer support for any request. We usually answer within the next business day, hour, or minutes!


PRO Version unlocked for the current month

Features PRO Version
Bulk Insert Yes
Bulk Update Yes
Bulk Delete Yes
Bulk Merge Yes
Bulk SaveChanges Yes
Bulk Synchornize Yes
DeleteFromQuery Yes
UpdateFromQuery Yes
Commercial License Yes
Royalty-Free Yes
Support & Upgrades (1 year) Yes

Learn more about the PRO Version


The best way to contribute is by spreading the word about the library:

  • Blog it
  • Comment it
  • Fork it
  • Star it
  • Share it

A HUGE THANKS for your help.

More Projects

Entity Framework

Bulk Operations

Expression Evaluator


Need more info? info@zzzprojects.com

Contact our outstanding customer support for any request. We usually answer within the next business day, hour, or minutes!