大家好,我是全栈小5,欢迎阅读小5的系列文章。
这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!
目录
设置步骤
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
中的数据批量复制到目标表中。
确保替换代码中的
YourServer
、YourDatabase
和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. *使用存储过程
你可以编写一个存储过程,在其中使用循环或其他逻辑来一次插入多行数据。这种方法可以在数据库中处理大量数据,但可能会影响性能。
这些方法都有各自的优缺点,具体选择取决于你的需求和项目架构。
文章推荐
前端
【前端】vue3+ts+vite,el-table表格渲染记录重复情况
【前端】vue3+typescript+vite+Element-Plus搭建配置初始化项目结构
【前端】WeUI DatePicker时间组件绑定方法以及chatGPT回答
CSharp
【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇
【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇
【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】新手一分钟看懂在已有表基础上修改字段默认值和数据类型
总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。