【C#】使用System.Data.SqlClient 进行简单批量操作

news2024/9/27 15:26:19

在实际项目开发中,可能会在定时任务里进行批量添加的操作,或者需要写一些小工具进行批量添加测试。
此篇文章就是使用System.Data.SqlClient 进行简单批量操作。

目录

  • 1、批量插入数据
  • 1.1、示例代码
    • 1.2、列映射
    • 1.3、是否需要映射列
  • 2、批量更新数据
  • 3、链接字符串
    • 3.1、Windows 身份验证
    • 3.2、Sql Server 身份验证

1、批量插入数据

在C#中,使用System.Data.SqlClient可以进行批量操作,以提高数据库的性能和效率。

1.1、示例代码

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

    using (SqlTransaction transaction = connection.BeginTransaction())
    {
        try
        {
            using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
            {
                bulkCopy.DestinationTableName = "YourDestinationTableName";
                bulkCopy.ColumnMappings.Add("SourceColumn1", "DestinationColumn1");
                bulkCopy.ColumnMappings.Add("SourceColumn2", "DestinationColumn2");
                // 添加更多的列映射

                DataTable dataTable = new DataTable();
                // 将数据添加到dataTable

                bulkCopy.WriteToServer(dataTable);
            }

            transaction.Commit();
        }
        catch (Exception ex)
        {
            transaction.Rollback();
            Console.WriteLine("批量插入数据失败:" + ex.Message);
        }
    }
}

1.2、列映射

在 C# 中,bulkCopy.ColumnMappings.Add 方法用于将源表的列映射到目标表的列。它允许你指定源列和目标列之间的映射关系,以确保插入数据时正确地将源数据映射到目标表的列。
bulkCopy.ColumnMappings.Add 方法具有两个参数,分别是 sourceColumn 和 destinationColumn。

  • sourceColumn:表示源表中的列名称或索引。你可以提供源表的列名,也可以使用整数索引来指定列的位置(索引从 0 开始)。

  • destinationColumn:表示目标表中的列名称。你需要提供目标表的列名,以确保源表的数据正确地映射到目标表的列。

using System.Data.SqlClient;

// 假设你有一个名为 sourceDataTable 的 DataTable,其中包含了要插入的数据
DataTable sourceDataTable = new DataTable();
// ...

// 创建目标表的连接和剩余的代码...

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

    // 创建目标表的 BulkCopy 对象
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
    {
        // 设置目标表的名称
        bulkCopy.DestinationTableName = "DestinationTable";

        // 添加列映射关系
        bulkCopy.ColumnMappings.Add("SourceColumn1", "DestinationColumn1");
        bulkCopy.ColumnMappings.Add("SourceColumn2", "DestinationColumn2");

        // 将源表的数据插入到目标表中
        bulkCopy.WriteToServer(sourceDataTable);
    }
}

在上述示例中,我们使用 bulkCopy.ColumnMappings.Add 方法指定了两个列的映射关系。SourceColumn1 映射到 DestinationColumn1,SourceColumn2 映射到 DestinationColumn2。这样在执行 bulkCopy.WriteToServer 方法时,源表的数据将正确映射到目标表的对应列。

1.3、是否需要映射列

在使用 C# 的 bulkCopy.ColumnMappings.Add 方法进行批量插入时,如果源表和目标表的列名顺序和数据类型完全一致,可以选择不显式地添加列映射关系。在这种情况下,系统会自动根据列的名称匹配进行映射。

using System.Data.SqlClient;

// 假设你有一个名为 sourceDataTable 的 DataTable,其中包含了要插入的数据
DataTable sourceDataTable = new DataTable();
// ...

// 创建目标表的连接和剩余的代码...

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

    // 创建目标表的 BulkCopy 对象
    using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
    {
        // 设置目标表的名称
        bulkCopy.DestinationTableName = "DestinationTable";

        // 将源表的数据插入到目标表中,目标表和源表的列名和数据类型一致,无需显式添加列映射
        bulkCopy.WriteToServer(sourceDataTable);
    }
}

注意,如果源表和目标表的列名或数据类型有所不同,或者需要对列进行重新排序,那么就需要使用 bulkCopy.ColumnMappings.Add 方法来显式地指定列的映射关系,以确保数据正确地插入到目标表中

2、批量更新数据

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

    using (SqlTransaction transaction = connection.BeginTransaction())
    {
        try
        {
            using (SqlCommand command = new SqlCommand())
            {
                command.Connection = connection;
                command.Transaction = transaction;
                command.CommandText = @"
                    UPDATE YourTableName
                    SET DestinationColumn1 = @Value1, DestinationColumn2 = @Value2
                    WHERE ConditionColumn = @ConditionValue";

                command.Parameters.AddWithValue("@Value1", value1);
                command.Parameters.AddWithValue("@Value2", value2);
                command.Parameters.AddWithValue("@ConditionValue", conditionValue);

                command.ExecuteNonQuery();
            }

            transaction.Commit();
        }
        catch (Exception ex)
        {
            transaction.Rollback();
            Console.WriteLine("批量更新数据失败:" + ex.Message);
        }
    }
}

注意:上述代码仅作为示例,你需要根据自己的实际情况进行适当的修改和调整。还要确保正确处理异常、事务和连接的释放,以保证数据操作的一致性和可靠性。

3、链接字符串

3.1、Windows 身份验证

不需要账号密码即可登录
在这里插入图片描述
在C#中,如果数据库没有启用身份验证,或者你不需要提供用户名和密码进行身份验证,你可以使用以下两种方式中的任意一种来创建连接字符串

string connectionString = @"Data Source=服务器名称;Initial Catalog=数据库名称;Integrated Security=True";
  • 使用 Trusted_Connection 选项:

在这种情况下,你同样只需要提供服务器名称和数据库名称,连接字符串中的 Trusted_Connection=True 部分也表示使用 Windows 身份验证。

请注意,以上两种写法是相同的,Integrated Security=True 和 Trusted_Connection=True 是等效的。

在实际使用中,你需要将示例中的 “服务器名称” 和 “数据库名称” 替换为你实际的服务器名称和数据库名称。

这些连接字符串采用了默认的 SQL Server 端口(1433)。如果需要使用非默认端口连接数据库,可以在连接字符串中指定端口号,如:

string connectionString = @"Data Source=服务器名称,端口号;Initial Catalog=数据库名称;Integrated Security=True";

确保替换 “服务器名称”、“数据库名称” 和 “端口号” 为实际的值。

3.2、Sql Server 身份验证

需要账号密码即可登录
在这里插入图片描述

  • 默认方式

如果你需要提供用户名和密码进行身份验证来连接数据库,你可以使用以下方式来创建连接字符串:

请将以上连接字符串中的 “服务器名称”、“数据库名称”、“用户名” 和 “密码” 替换为你实际使用的值。

这里的 “User ID” 表示用户名,“Password” 表示密码。通过提供这两个参数,你可以使用提供的凭据来进行身份验证,以访问数据库。确保用户名和密码与你的实际数据库凭据匹配。

string connectionString = @"Data Source=服务器名称;Initial Catalog=数据库名称;User ID=用户名;Password=密码;";
  • 超时设置方式

此外,你还可以添加其他的连接参数,如加密选项、连接超时等,具体根据你数据库服务提供商的要求进行设置。

以下是一个示例连接字符串,添加了一些常见的额外连接参数:

string connectionString = @"Data Source=服务器名称;Initial Catalog=数据库名称;User ID=用户名;Password=密码;Encrypt=True;Connection Timeout=30;";

在上述示例中,我们添加了两个额外的连接参数:将 “Encrypt=True” 设置为启用加密选项,将 “Connection Timeout=30” 设置为连接超时时间为30秒。你可以根据实际需求添加或修改其他连接参数。

请注意,数据库服务提供商和版本的不同可能需要稍微调整连接字符串的写法。因此,建议查阅相关数据库的文档以获取更准确的连接字符串格式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZigBee组网-基于协议栈的UART实验(实现收发)(保姆级)

目录 基于协议栈的UART实验 前言 协议栈中的TI自带UART的使用实验 UART配置基本步骤 串口初始化 串口发送 串口接收回显 实验效果 拓展 移植我们自己UART串口 移植配置过程 实验效果 基于协议栈的UART实验 前言 与之前的Zigbee裸机实验不同,我们既可以…

神奇的MATLAB解密工具,让你轻松解密.p文件!

大家都知道,MATLAB是一款功能强大的数学软件,但是在进行代码保护和共享方面,却存在一些困难。这时候,一款优秀的MATLAB解密工具就显得尤为重要。它可以帮助我们解决诸多问题,比如.p文件解密、p文件转m代码等。接下来&a…

mallocstacklogging和MallocStackLoggingNoCompact引起的app文稿数据快速增加

最近由于定位一个iOS16系统适配引起的闪退设置了mallocstacklogging和MallocStackLoggingNoCompact。 配置如下: 在上线前测试,结果发现手机存储空间不足。删除了手机的很多图片后,测试不到两分钟,手机存储空间又不足了。查看app…

Flink运行原理

Apache Flink是什么?对于这个问题,Apache软件基金会官方给出了定义:Flink是一种框架和分布式处理引擎,主要用于对无界和有界数据流进行有状态计算。 本文将从以下几个方面来了解flink运行原理: 【Flink运行时四大组件…

骨传导耳机可以长期佩戴吗,几款佩戴舒适的骨传导耳机清单

骨传导耳机是通过耳朵传声方式,提高了听神经的使用频率,对听觉系统所产生刺激会随之下降。目前骨传导耳机主要应用于运动和娱乐两大领域,尤其是在运动场景中骨传导耳机能够避免传统耳机因佩戴入耳式耳机造成的听力下降问题,更能增…

Python批量将doc转成docx并读取docx的内容

有时候我们需要将doc的文件转成docx的格式,但是如果直接修改文件名后缀的话有时候会没有效果,今天我们利用python批量将doc后缀的word文档转成docx的格式。 也找了很多方法,最终还是找到了就是利用win32com去解决这个问题 很多人在执行这一…

【MySQL】不就是事务

前言 嗨咯,小伙伴们大家好呀,我已经一个星期没有更新了,实在抱歉!本期我们要学习MySQL初阶中的最后一课,MySQL数据库中的事务也算是近几年面试必考的问题,所以我们一定要认真学习。 目录 前言 目录 一、事…

学会用智慧轻松的方式过生活

曾经,有位远在黑龙江的女性福主告诉峰民,她说她活不久了。 峰民很是惊讶,不可能吧,你才39岁啊, 她说:我查出了子宫有瘤,峰民听后就说,没事,放心,肯定是良性。…

Python3,处理Excel文件IO流的方法那么多,或许只有Pandas算得上靠谱。

Pandas处理Excel文件IO流的方法 1、引言2、代码实例2.1 什么是文件IO流2.1.1定义2.1.2 字节流、字符流 2.2 常见的Excel文件IO流处理方法2.3 Pandas处理Excel文件IO流2.3.1 直接读取处理2.3.2 转换io流进行处理 3、总结 1、引言 小屌丝:鱼哥, 求助。 小…

深度学习技巧应用22-构建万能数据生成类的技巧,适用于CNN,RNN,GNN模型的调试与训练贯通

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用22-构建万能数据生成类的技巧,适用于CNN,RNN,GNN模型的调试与训练贯通。本文将实现了一个万能数据生成类的编写,并使用PyTorch框架训练CNN、RNN和GNN模型。 目录&#xff1…

摄像机控制——旁轴摇移

通常摄像机进行摇移控制的时候,都是以摄像机正前方中心位置作为注视点进行环绕控制的,如果在注释点位置有物体,那么感受上是围绕着该物体进行观察。 但是最近公司的策划要求摇移时候的围绕点是鼠标点击的位置,而不是摄像机的正中心…

零基础网络安全学习路线,真的很全,建议收藏!!!

很多小伙伴在网上搜索网络安全时,会出来网络安全工程师这样一个职位,它的范围很广,只要是与网络安全挂钩的技术人员都算网络安全工程师,一些小伙伴就有疑问了,网络安全现在真的很火吗? 那么今天博主就带大…

从0实现基于Linux socket聊天室-多线程服务器模型(一)

前言Socket在实际系统程序开发当中,应用非常广泛,也非常重要。实际应用中服务器经常需要支持多个客户端连接,实现高并发服务器模型显得尤为重要。高并发服务器从简单的循环服务器模型处理少量网络并发请求,演进到解决C10K&#xf…

AntDB数据库将携创新性解决方案亮相2023可信数据库发展大会

由中国通信标准化协会指导,中国通信标准化协会大数据技术标准推进委员会(CCSA TC601)主办的“2023可信数据库发展大会”将于2023年7月4日——5日在北京国际会议中心召开。作为深耕通信行业15年的国产数据库产品,AntDB受邀参会&…

记录一下kibana启动链接报错问题(kibana server is not ready yet)

记录一下kibana启动链接报错问题(kibana server is not ready yet) 今天启动kibana出现该问题 先去看了看是否是elasticsearch连接出错 启动了容器 docker start elasticsearch docker start kibana进入了kibana容器 docker exec -it kibana bash进行了下面的操作&#xf…

No suitable driver found for

在学习Mbatis时候遇到的奇怪的问题,报错提示如图所示,提示找不到数据库驱动 检查db.properties文件,一开始认为没问题 drivercom.mysql.jdbc.Driver urljdbc:mysql://localhost:3306/mybatis?useSSLfalse&useUnicodetrue&characterEncodingUTF…

华为OD机试真题2023Q1 100分 + 2023 B卷(JavaPythonJavaScript)

目录 2023 5月 B卷 “新加题”(100分值)2023Q1 100分下面分享一道“2023Q1 200分 机器人活动区域”的解题思路一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出 大家好,我是哪吒。 五月份之前…

react基础-生命周期render props模式高阶组件原理揭秘

组件生命周期(★★★) 目标 说出组件生命周期对应的钩子函数钩子函数调用的时机 概述 意义:组件的生命周期有助于理解组件的运行方式,完成更复杂的组件功能、分析组件错误原因等 组件的生命周期: 组件从被创建到挂…

通用机器人里程碑?谷歌展示全球首个多任务AI智能体

目录 两大硬核科技支撑通用机器人研发(1)自生成训练数据(2)基于多模态模型 科技巨头同台比拼 中国产业链凸显性价比优势发展初期硬件先行 运动模块价值量最高 已学会套圈、搭积木、抓水果…… 人工智能和机器人,总是不…

MES生产管理系统与ERP系统的集成以及优势

导言: 在当今数字化转型的浪潮中,企业越来越意识到整合各个部门的数据和流程的重要性。MES生产管理系统和ERP系统是两个关键的管理工具,它们在企业中发挥着不可或缺的作用。本文将探讨企业MES管理系统与ERP系统进行集成,以及这种…