CSharp · Console
// Bulk Operations
// Doc: https://bulk-operations.net/bulk-merge
// @nuget: Z.BulkOperations
// @nuget: System.Data.SqlClient
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using Z.BulkOperations;
public class Program
{
public static void Main()
{
GenerateDatabase();
SeedCustomers(2);
var dtCustomers = GenerateCustomers(5);
using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()))
{
connection.Open();
// SHOW data
ShowData(connection, "Before");
// SAVE customers
using (var bulk = new BulkOperation(connection))
{
bulk.DestinationTableName = "Customers";
bulk.BulkMerge(dtCustomers);
}
// SHOW data
ShowData(connection, "After");
}
}
public static void ShowData(SqlConnection connection, string text)
{
// SHOW data
using (var command = connection.CreateCommand())
{
command.CommandText = @"
SELECT * FROM Customers
";
var ds = new DataSet();
var sqlDataAdapter = new SqlDataAdapter(command);
sqlDataAdapter.Fill(ds);
ds.Tables[0].TableName = "1 - Customers " + text;
FiddleHelper.WriteTable(ds.Tables[0]);
}
}
public static DataTable GenerateCustomers(int count, bool useOld = false)
{
DataTable dtTable = new DataTable("Customers");
dtTable.Columns.Add("CustomerID", typeof(int));
dtTable.Columns.Add("Name", typeof(string));
for(int i = 0; i < count; i++)
{
var drCustomer = dtTable.NewRow();
drCustomer["CustomerID"] = (i + 1);
drCustomer["Name"] = (useOld ? "Old_" : "") + "Customer_" + i;
dtTable.Rows.Add(drCustomer);
}
return dtTable;
}
public static void SeedCustomers(int count)
{
var dtCustomers = GenerateCustomers(count, true);
using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()))
{
connection.Open();
// SAVE customers
using (var bulk = new BulkOperation(connection))
{
// easy to use
bulk.DestinationTableName = "Customers";
bulk.BulkInsert(dtCustomers);
}
}
}
public static void GenerateDatabase()
{
using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServer()))
{
connection.Open();
using (var command = connection.CreateCommand())
{
command.CommandText = @"
CREATE TABLE [Customers]
(
[CustomerID] [INT] IDENTITY(1,1) NOT NULL,
[Name] [NVARCHAR](MAX) NULL,
CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED
(
[CustomerID] ASC
)
)";
command.ExecuteNonQuery();
}
}
}
}