SQL Server 把 List 集合插入数据库

引言

在开发过程中,我们经常会遇到将数据从一个数据结构(例如 List)插入到数据库中的需求。SQL Server 是一种常用的关系型数据库管理系统,本文将介绍如何使用 SQL Server 将 List 集合插入数据库,并提供相应的代码示例。

数据准备

在开始之前,我们需要准备一些数据和数据库表结构。假设我们有一个名为 Person 的表,包含以下字段:

  • Id:主键,自增长的整数类型
  • Name:人员姓名,字符串类型
  • Age:人员年龄,整数类型

我们将创建一个 List 集合,其中包含了要插入的数据。示例数据如下:

List<Person> persons = new List<Person>
{
    new Person { Name = "Alice", Age = 25 },
    new Person { Name = "Bob", Age = 30 },
    new Person { Name = "Charlie", Age = 35 }
};

使用 SQL Server Bulk Insert

SQL Server 提供了一个称为 Bulk Insert 的功能,可以高效地将大量数据一次性插入到数据库中。我们可以使用 C# 的 ADO.NET 提供程序,结合 SQL Server Bulk Insert,将 List 集合中的数据插入到数据库。

首先,我们需要创建一个 DataTable,用于存储 List 集合的数据。DataTable 是一个内存中的数据表,可以表示和操作数据集。我们可以通过以下代码创建 DataTable,并将 List 集合中的数据添加到其中:

DataTable dataTable = new DataTable();
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Age", typeof(int));

foreach (Person person in persons)
{
    dataTable.Rows.Add(person.Name, person.Age);
}

然后,我们可以使用 SqlConnection 和 SqlBulkCopy 类,将 DataTable 中的数据批量插入到数据库中。SqlBulkCopy 是一个用于高性能数据库批量复制的类,它可以将数据从一个数据源复制到另一个数据源。

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
    {
        bulkCopy.DestinationTableName = "Person";
        bulkCopy.WriteToServer(dataTable);
    }
}

在上述代码中,我们首先创建了一个 SqlConnection 对象,并通过 Open 方法打开数据库连接。然后,我们创建了一个 SqlBulkCopy 对象,并设置了目标表的名称。最后,我们调用 WriteToServer 方法,将数据批量插入到数据库中。

完整代码示例

下面是一个完整的示例代码,演示了如何使用 SQL Server Bulk Insert 将 List 集合插入到数据库中:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public class Program
{
    static void Main(string[] args)
    {
        List<Person> persons = new List<Person>
        {
            new Person { Name = "Alice", Age = 25 },
            new Person { Name = "Bob", Age = 30 },
            new Person { Name = "Charlie", Age = 35 }
        };

        DataTable dataTable = new DataTable();
        dataTable.Columns.Add("Name", typeof(string));
        dataTable.Columns.Add("Age", typeof(int));

        foreach (Person person in persons)
        {
            dataTable.Rows.Add(person.Name, person.Age);
        }

        string connectionString = "Data Source=(local);Initial Catalog=YourDatabase;Integrated Security=True";

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = "Person";
                bulkCopy.WriteToServer(dataTable);
            }
        }

        Console.WriteLine("Data inserted successfully.");
    }
}

在上述代码中,我们通过创建一个名为 Person 的表,并将 List 集合中的数据插入到该表中。

数据库表结构

下图为 Person 表的结构关系图:

erDiagram
  Person ||--|| Id : int (PK)
  Person ||--|{ Name : string
  Person ||--|{ Age : int

总结

本文介绍了如何使用 SQL Server Bulk Insert 将 List 集合插入到数据库中。通过使用 ADO.NET 提供的 SqlConnection、SqlBulkCopy 类,我们可以高效地将大