欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# .NET — SQL Bulk Insert 批量寫入

admin
2024年11月26日 0:10 本文熱度 392

在處理大量數據插入時,SQL Bulk Insert是一種高效的方法。本文將介紹如何在C# .NET中使用SQL Bulk Insert,并提供多個實用示例。

1. 基本的Bulk Insert操作

首先,讓我們看一個基本的Bulk Insert操作示例:

public class BulkInsertExample{    public void PerformBulkInsert(List<Customer> customers, string connectionString)    {        try        {            using (var connection = new SqlConnection(connectionString))            {                connection.Open();
               using (var bulkCopy = new SqlBulkCopy(connection))                {                    // 設置目標表名                      bulkCopy.DestinationTableName = "Customers";
                   // 設置批量插入的大小                      bulkCopy.BatchSize = 1000;
                   // 映射列名                      bulkCopy.ColumnMappings.Add("Id", "Id");                    bulkCopy.ColumnMappings.Add("Name", "Name");                    bulkCopy.ColumnMappings.Add("Email", "Email");
                   // 設置超時時間                      bulkCopy.BulkCopyTimeout = 600; // 10分鐘  
                   var dataTable = ConvertToDataTable(customers);                    bulkCopy.WriteToServer(dataTable);                }            }        }        catch (Exception ex)        {            // 處理異常              Console.WriteLine($"批量插入時發生錯誤: {ex.Message}");            throw;        }    }
   private DataTable ConvertToDataTable(List<Customer> customers)    {        var dataTable = new DataTable();
       // 添加列          dataTable.Columns.Add("Id", typeof(int));        dataTable.Columns.Add("Name", typeof(string));        dataTable.Columns.Add("Email", typeof(string));
       // 添加行          foreach (var customer in customers)        {            dataTable.Rows.Add(customer.Id, customer.Name, customer.Email);        }
       return dataTable;    }}
public class Customer{    public int Id { get; set; }    public string Name { get; set; }    public string Email { get; set; }}
// 使用示例  class Program{    static void Main(string[] args)    {        // 連接字符串          string connectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"
       // 創建測試數據          var customers = new List<Customer>        {            new Customer { Id = 1, Name = "John Doe", Email = "john@example.com" },            new Customer { Id = 2, Name = "Jane Smith", Email = "jane@example.com" },            new Customer { Id = 3, Name = "Bob Johnson", Email = "bob@example.com" }        };
       // 創建BulkInsertExample實例          var bulkInsert = new BulkInsertExample();
       try        {            // 執行批量插入              bulkInsert.PerformBulkInsert(customers, connectionString);            Console.WriteLine("批量插入成功完成!");        }        catch (Exception ex)        {            Console.WriteLine($"發生錯誤: {ex.Message}");        }    }}

這個例子展示了如何將Customer對象列表批量插入到數據庫中。

2. 使用異步方法

.NET 支持異步操作,這對于大量數據插入特別有用:

public async Task PerformBulkInsertAsync(List<Customer> customers, string connectionString){    using (var connection = new SqlConnection(connectionString))    {        await connection.OpenAsync();
       using (var bulkCopy = new SqlBulkCopy(connection))        {            bulkCopy.DestinationTableName = "Customers";            bulkCopy.BatchSize = 1000;
           var dataTable = ConvertToDataTable(customers);            await bulkCopy.WriteToServerAsync(dataTable);        }    }}

3. 映射列名

如果數據源的列名與目標表不完全匹配,可以使用列映射:

public void PerformBulkInsertWithMapping(List<Customer> customers, string connectionString){    using (var connection = new SqlConnection(connectionString))    {        connection.Open();
       using (var bulkCopy = new SqlBulkCopy(connection))        {            bulkCopy.DestinationTableName = "Customers";            bulkCopy.BatchSize = 1000;
           bulkCopy.ColumnMappings.Add("Id", "CustomerId");            bulkCopy.ColumnMappings.Add("Name", "CustomerName");            bulkCopy.ColumnMappings.Add("Email", "CustomerEmail");
           var dataTable = ConvertToDataTable(customers);            bulkCopy.WriteToServer(dataTable);        }    }}

4. 使用事務

在批量插入過程中使用事務可以確保數據的一致性:

public void PerformBulkInsertWithTransaction(List<Customer> customers, string connectionString){    using (var connection = new SqlConnection(connectionString))    {        connection.Open();
       using (var transaction = connection.BeginTransaction())        {            try            {                using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))                {                    bulkCopy.DestinationTableName = "Customers";                    bulkCopy.BatchSize = 1000;
                   var dataTable = ConvertToDataTable(customers);                    bulkCopy.WriteToServer(dataTable);                }
               transaction.Commit();            }            catch (Exception)            {                transaction.Rollback();                throw;            }        }    }}

5. 處理大量數據

對于非常大的數據集,可以考慮分批處理:

public async Task PerformLargeBulkInsertAsync(IEnumerable<Customer> customers, string connectionString, int batchSize = 10000){    using (var connection = new SqlConnection(connectionString))    {        await connection.OpenAsync();
       using (var bulkCopy = new SqlBulkCopy(connection))        {            bulkCopy.DestinationTableName = "Customers";            bulkCopy.BatchSize = batchSize;
           var dataTable = new DataTable();            dataTable.Columns.Add("Id", typeof(int));            dataTable.Columns.Add("Name", typeof(string));            dataTable.Columns.Add("Email", typeof(string));
           foreach (var batch in customers.Chunk(batchSize))            {                dataTable.Clear();                foreach (var customer in batch)                {                    dataTable.Rows.Add(customer.Id, customer.Name, customer.Email);                }
               await bulkCopy.WriteToServerAsync(dataTable);            }        }    }}

這個方法使用了C# 引入的Chunk方法來分批處理大量數據。

結論

SQL Bulk Insert是處理大量數據插入的有效方法。在.NET 中,我們可以利用異步編程、事務管理和批處理等特性來優化批量插入操作。通過選擇適合您特定需求的方法,您可以顯著提高數據插入的性能和可靠性。


該文章在 2024/11/26 12:06:19 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved