All Projects → zzzprojects → Bulk Operations

zzzprojects / Bulk Operations

C# SQL Bulk Operations | High performance C# bulk insert, update, delete and merge for SQL Server, SQL Azure, SQL Compact, MySQL and SQLite.

Programming Languages

csharp
926 projects

Labels

What's Bulk Operations?

It overcomes SqlBulkCopy limitations by adding high-performance bulk operations to insert, update, delete and merge.

Scalable

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

Extensible

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

Download

download

PM> Install-Package Z.BulkOperations

* PRO Version unlocked for the current month

Stay updated with the latest changes:

Twitter Follow Facebook Like

Insert - Output Identity Value

Problem

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

Solution

Map your identity column with output direction.

var bulk = new BulkOperation(connection);

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

bulk.BulkInsert(dt);
Flexibility

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

Entity DataSource / Lambda Mapping

Problem

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

Solution

Create 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;

bulk.BulkMerge(customers);
Maintainability

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

AutoMapping & Case Sensitivity

Problem

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

Solution

Turn off case sensitivity with IsCaseSensitive property.

var bulk = new BulkOperation(connection);

bulk.IsCaseSensitive = false;

bulk.BulkMerge(dt);
Readability

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

Support

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

PRO

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

Contribute

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

Need more info? [email protected]

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].