C# Insert BulkCopy Big Data To SQL Database

Insert BulkCopy Big Data to SQL Database trong C# là insert dữ liệu lớn vào cơ sở dữ liệu SQL Database trong C# bằng cách sử dụng SqlBulkCopy .

Hiện nay vấn đề xử lý dữ liệu lớn được ứng dụng rất nhiều và phổ biến trong lập trình các ứng dụng phần mềm và đặc biệt trong lĩnh vực AI.

Làm thế nào để insert dữ liệu lớn (Big Data) vào cơ sở dữ liệu SQL trong C# ?

Trong bài trước chúng tôi đã giới thiệu cách insert dữ liệu bằng cách insert một bảng Table vào cơ sở dữ liệu với tốc độ rất insert rất nhanh.Hôm nay chúng tôi sẽ giới thiệu cho các bạn một cách khác để insert dữ liệu lớn Big Data với tốc độ cực nhanh bằng cách sử dụng SqlBulkCopy trong C#.

Sử dụng SqlBulkCopy để insert dữ liệu lớn là bởi vì tốc độ insert vào cơ sở dữ liệu SQL Database là nhanh hơn rất nhiều so với sử dụng vòng lặp for thông thường.

Ví dụ thời gian insert 1 triệu bản ghi (insert 1 million records), tương ứng với 1 triệu dòng (1000000 rows) vào cơ sở dữ liệu SQL Database nó chỉ mất là 5-10 giây.

 

Các bước Insert BulkCopy trong C# như sau:

1.Tạo bảng Table trong cơ sở dữ liệu SQL Database.

2.Tạo Form insert dữ liệu trong Windows Form.

3.Tạo dữ liệu lớn Big Data.

4.Viết Code C# insert dữ liệu lớn (Big Data) vào cơ sở dữ liệu SQL Database

5.Chạy chương trình và kiểm tra kết quả

 

1.Tạo bảng Table trong cơ sở dữ liệu SQL Database.

- Tạo bảng Products_t (Table) để lưu trữ dữ liệu lớn trong cơ sở dữ liệu ihoclaptrinh (Database)

Ví dụ

CREATE TABLE [dbo].[Products_t](
    [ProductID] [nvarchar](150) NULL,
    [ProductName] [nvarchar](150) NULL
)

2.Tạo Form insert dữ liệu trong Windows Form.

- Tạo form Frm_InsertBigData như sau:

 

3.Tạo dữ liệu lớn Big Data.

- Tạo danh sách có khoảng 1 triệu bản ghi của sản phẩm.

Ví dụ

//Tạo dữ liệu lớn Big Data 1 triệu bản ghi (1 million records) products và add vào Datatable
            DataTable dt_BigData = new DataTable();

            DataColumn column1 = null;
            column1 = new DataColumn("ProductID");
            dt_BigData.Columns.Add(column1);

            DataColumn column2 = null;
            column2 = new DataColumn("ProductName");
            dt_BigData.Columns.Add(column2);

            for (int i = 1; i <= 1000000; i++)
            {
                DataRow d_row = dt_BigData.NewRow();
                d_row["ProductID"] = "ProductID_" + i.ToString();
                d_row["ProductName"] = "ProductName_" + i.ToString();
                dt_BigData.Rows.Add(d_row);
            }

 

4.Viết Code C# insert BulkCopy Big Data vào cơ sở dữ liệu SQL Database

Ví dụ

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;

namespace Insert_BigData
{
    public partial class Frm_InsertBigData : Form
    {
        public Frm_InsertBigData()
        {
            InitializeComponent();
        }
        private void btn_InsertBigData_Click(object sender, EventArgs e)
        {
            //Tạo dữ liệu lớn Big Data 1 triệu bản ghi (1 million records) và add vào Datatable
            DataTable dt_BigData = new DataTable();

            DataColumn column1 = null;
            column1 = new DataColumn("ProductID");
            dt_BigData.Columns.Add(column1);

            DataColumn column2 = null;
            column2 = new DataColumn("ProductName");
            dt_BigData.Columns.Add(column2);

            for (int i = 1; i <= 1000000; i++)
            {
                DataRow d_row = dt_BigData.NewRow();
                d_row["ProductID"] = "ProductID_" + i.ToString();
                d_row["ProductName"] = "ProductName_" + i.ToString();
                dt_BigData.Rows.Add(d_row);
            }

            //Start time - Thời gian bắt đầu insert dữ liệu
            lbl_StartTime.Text = Convert.ToString(DateTime.Now.ToString());

            String Str_connect_DB = "data source=192.168.1.5; initial catalog=ihoclaptrinh; user id=sa; password=123456";
            SqlConnection conn = new SqlConnection(Str_connect_DB);

            //Sử dụng SqlBulkCopy để inser dữ liệu
            SqlBulkCopy o_bulk = new SqlBulkCopy(conn);

            //Gán bảng Products_t vào đối tượng o_bulk của SqlBulkCopy
            o_bulk.DestinationTableName = "Products_t";
            o_bulk.ColumnMappings.Add("ProductID", "ProductID");
            o_bulk.ColumnMappings.Add("ProductName", "ProductName");
            conn.Open();

            //insert bulk Records into Database.  
            o_bulk.WriteToServer(dt_BigData);
            conn.Close();

            //End time - Thời gian kết thúc insert dư liệu
            lbl_EndTime.Text = Convert.ToString(DateTime.Now.ToString());

            //Show Data - Hiển thị dữ liệu đã insert lên DataGridView
            string sql_Select = "Select * From Products_t";
            SqlDataAdapter da = new SqlDataAdapter(sql_Select, conn);
            DataTable dt1 = new DataTable();
            da.Fill(dt1);
            dtg_ListData_Database.DataSource = dt1;
            conn.Close();

            lbl_TotalRecordsDataInserted.Text = Convert.ToString(dt1.Rows.Count);
            MessageBox.Show("Insert BulkCopy to SQL Database Successfully !");
        }
    }
}

 

5.Chạy chương trình và kiểm tra kết quả.

Như các bạn có thể thấy, kết quả insert 1 triệu bản ghi sản phẩm là 4 giây.Các bạn có thể thấy tốc độ insert sử dụng SqlBulkCopy là rất nhanh.