日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

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

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

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

在處理大量數據插入時,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

主站蜘蛛池模板: 亚洲国产欧美日韩一区二区在线 | 国产亚洲欧洲综合777 | 成人怡红院视频在线观看 | 国产精品亚洲二区在线看 | 手机电影在线观看 | 综合精品欧美日韩国产在线 | 亚洲欧美日韩国产精品一区第一页 | 免费在线播放视频 | 99久在线精品99re8 | 国产精品碰碰现在自在拍 | 91午夜在线免费观看小视频 | 欧美性爱官网 | 亚洲国产精品自产在线播放 | 免费在线观看小说区激情另类 | 三级在线播放 | www.俺去也.com影院99 | 国产在线观看 | 午夜男女爽爽羞羞影院在线观看 | 国产亚洲精品福利在线 | 欧美人与禽zozo性伦交 | 九九精品视频国产 | 日本护士视频欧美无砖专区 | 亚洲v乱码专区国产乱码 | 成在线人永久免费视频播放 | 国产精品91一区二区三区四区 | 国产精品电影在线 | 成年免费国产大片 | 亚洲一区二区高清 | 香蕉久人久人青草青草 | 国产亚洲精品资源在线 | 亚洲一区二区国产日韩欧美 | 亚洲高清中文字幕一区二区三区 | 国产一区二区三区四区免费观看 | 国产精品熟女一区二区 | 亚洲va国产日韩欧美精品 | 中文字幕亚洲激情 | 小明加密通道最新三 | 欧美日产国产精品 | 国产午夜福利100集发布 | 亚洲欧美日韩二区三区 | 亚洲精品乱码电影在线观看 |