【C#】SqlBulkCopy批量添加记录,自增ID保留不变,源表记录ID已经非连续,同样批量添加进入也是非连续

18 篇文章 0 订阅

大家好,我是全栈小5,欢迎阅读小5的系列文章。

这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解,

特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。

温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

目录

设置步骤

批量使用

文章推荐

前端

CSharp

Sql Server


设置步骤

1、假设数据如下

1)如果源表记录ID为:1、2、5、7、9...10000

2)那么批量添加表记录到新库,那么ID值则会变为:1、2、3、4、5...10000

2、设置如下关键代码即可

1)自增列会重新生成连续ID效果

using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connStr, SqlBulkCopyOptions.UseInternalTransaction))

2)自增列会保持原有ID效果,保留源标识值。 未指定标识值时,该值由目标指派。

using (SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connStr, SqlBulkCopyOptions.KeepIdentity))

批量使用

在 C# 中,SqlBulkCopy 类提供了一种高效地将大量数据批量加载到 SQL Server 数据库表中的方法。以下是一个简单的示例,演示了如何使用 SqlBulkCopy 类:

using System;
using System.Data;
using System.Data.SqlClient;

class Program
{
    static void Main()
    {
        string connectionString = "Data Source=YourServer;Initial Catalog=YourDatabase;Integrated Security=True";

        // 创建DataTable并添加数据
        DataTable dataTable = new DataTable();
        dataTable.Columns.Add("ID", typeof(int));
        dataTable.Columns.Add("Name", typeof(string));

        // 假设有一些数据要插入
        dataTable.Rows.Add(1, "John");
        dataTable.Rows.Add(2, "Doe");
        // 添加更多数据...

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

            // 在目标表中创建SqlBulkCopy对象并指定目标表名
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
            {
                bulkCopy.DestinationTableName = "YourDestinationTableName";

                // 可选:设置超时时间、批次大小等其他选项
                bulkCopy.BulkCopyTimeout = 600; // 超时时间(以秒为单位)
                bulkCopy.BatchSize = 100; // 每个批次的行数

                try
                {
                    // 开始将数据从DataTable复制到数据库中
                    bulkCopy.WriteToServer(dataTable);
                    Console.WriteLine("数据已成功批量复制到数据库表中。");
                }
                catch (Exception ex)
                {
                    Console.WriteLine("发生错误: " + ex.Message);
                }
            }
        }
    }
}

在这个示例中:

  • 创建了一个 DataTable 对象并添加了数据。
  • 建立了到数据库的连接。
  • 创建了一个 SqlBulkCopy 对象,并将其目标表名设置为要将数据插入的表。
  • 可以设置其他选项,如超时时间和批次大小。
  • 使用 WriteToServer 方法将 DataTable 中的数据批量复制到目标表中。

确保替换代码中的 YourServerYourDatabase 和 YourDestinationTableName 为你的实际数据库服务器名称、数据库名称和目标表名。

其他方法

除了 `SqlBulkCopy`,C# 中还有其他方法可以批量处理数据。以下是一些常见的方法:

1. Entity Framework Core 批量插入

如果你在使用 Entity Framework Core,则可以使用第三方库,如 `EntityFramework.BulkInsert` 或 `EntityFrameworkCore.BulkExtensions` 来进行批量插入。这些库提供了一种更高级的方式来处理大量数据的批量插入。

2. Dapper 批量插入

Dapper 是一个轻量级的 ORM 工具,它提供了 `Execute` 方法,可以执行带有参数的 SQL 语句。你可以使用 Dapper 的 `Execute` 方法来执行批量插入操作。

3. 使用 Table-Valued Parameters(表值参数)

如果你的数据源支持表值参数,你可以使用它们来一次性传递多行数据到数据库,从而实现批量插入的效果。你需要创建一个表值参数类型,并将其作为参数传递给存储过程或 SQL 命令。

4. *使用存储过程

你可以编写一个存储过程,在其中使用循环或其他逻辑来一次插入多行数据。这种方法可以在数据库中处理大量数据,但可能会影响性能。

这些方法都有各自的优缺点,具体选择取决于你的需求和项目架构。

文章推荐

前端

【前端】使用javascript开发一个在线RGB颜色转换

【前端】vue3+ts+vite,el-table表格渲染记录重复情况

【前端】vue3+typescript+vite+Element-Plus搭建配置初始化项目结构

【前端】WeUI DatePicker时间组件绑定方法以及chatGPT回答

【前端】参考C站动态发红包界面,高度还原布局和交互

CSharp

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇

【C#】约瑟夫原理举例2个代码实现

【C#】List泛型数据集如何循环移动,最后一位移动到第一位,以此类推

【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

Sql Server

【Sql Server】通过Sql语句批量处理数据,使用变量且遍历数据进行逻辑处理

【新星计划回顾】第六篇学习计划-通过自定义函数和存储过程模拟MD5数据

【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

【Sql Server】Update中的From语句,以及常见更新操作方式

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全栈小5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值