ADO.NET与SQL SERVER之向数据库中批量添加、修改数据

如何将多条数据批量插入到数据库的数据表中?

使用SqlBulkCopy,示例如下:

/// <summary>
/// 批量导入数据到数据库
/// </summary>
/// <param name="table">数据源表</param>
/// <param name="tableName">数据库表名</param>
/// <param name="connStr">数据库连接字符串</param>
/// <param name="mappings">源表与数据库表的列映射关系</param>
public static void BulkCopyDataTable(DataTable table, string tableName,string connStr, params SqlBulkCopyColumnMapping[] mappings)
{
    //使用SqlBulkCopy来批量导入数据到数据库
    using (SqlBulkCopy bulkcopy = new SqlBulkCopy(connStr))
    {
        //写出数据库中的目标表名
         bulkcopy.DestinationTableName = tableName;
        //建立数据源与数据库之间列的映射,就是要让SqlBulkCopy知道你要把哪一列插到哪一列
         foreach (SqlBulkCopyColumnMapping mapping in mappings)
        {
            //也可以通过bulkcopy.ColumnMappings.Add("数据源列名", "数据表列名");
            bulkcopy.ColumnMappings.Add(mapping);
        }
        //将数据提交到数据库中
         bulkcopy.WriteToServer(table);
    }
}

如何对数据库中数据表的多条数据进行批量更新?

使用SqlDataAdapter,示例如下:

//建立数据库连接
using (SqlConnection conn = new SqlConnection(connStr))
{
    conn.Open();
    //新建一个SqlDataAdapter,因为只用它来做更新,所以在实例化时就不再填写Select的SQL语句
    using (SqlDataAdapter adapter = new SqlDataAdapter("", conn))
    {
        //写出更新需要使用的SQL语句
         string sqlStr = "update TableName set NeedUpdate = @NewValue where Guid = @Guid";
        //新建一个SqlCommand赋给adapter的UpdateCommand
        adapter.UpdateCommand = new SqlCommand(sqlStr, conn);
        //向UpdateCommand添加列映射,参数含义分别是:
         //SQL语句参数名、字段数据类型、字段长度(我也不知道这啥意思,可能char什么的要用到)和数据源表列名
         adapter.UpdateCommand.Parameters.Add("@NewValue", SqlDbType.Bit, 1, "NewValue");
        adapter.UpdateCommand.Parameters.Add("@Guid", SqlDbType.UniqueIdentifier, 1, "Guid");
        //当设置UpdateBatchSize为非1时,需要将此设为None
        adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
        //设置每次到服务器批处理的行数
         adapter.UpdateBatchSize = 0;
        //进行更新操作,table是数据源表,里面的数据能符合上面参数的映射关系即可
         adapter.Update(table);
    }
}

对于删除的批量操作可能与修改类似,这里暂时就不再多做实验了,以后有机会再记录下来。

posted @   不是豆豆  阅读(4142)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
友情链接:迷途


点击右上角即可分享
微信分享提示