zoukankan      html  css  js  c++  java
  • Dapper批量更新

    本次示例项目使用Dappe1.50.5和Dapper.Contrib1.50.5
    数据库执行的脚本检测工具是SQL Server Prifiler

    1.使用Where In 实现批量更新

    1.1代码如下:

    /// <summary>
    /// 把多个用户的isvalid置为0
    /// </summary>
    public void UpdateUsersByWhereInTest()
    {
        var sql = @"UPDATE dbo.[user] SET isvalid=0 WHERE UserId IN @UserId ;";
        var userIdArr = new int[] { 3013, 3012, 3011, 3010 };
        var res = Repository.Execute(sql, new { UserId = userIdArr });
        Assert.True(res > 0);
    }
    

    1.2检测到数据库执行的脚本

    exec sp_executesql N'UPDATE dbo.[user] 
    					 SET isvalid=0 
    					 WHERE UserId IN (@UserId1,@UserId2,@UserId3,@UserId4) ;',
    					 N'@UserId1 int,@UserId2 int,
    					   @UserId3 int,@UserId4 int',
    				       @UserId1=3013,@UserId2=3012,
    					   @UserId3=3011,@UserId4=3010
    

    2.更新多条数据,每一条数据更新的内容可不相同

    2.1代码如下

    /// <summary>
    /// 分别把用户Id是3013的用户名称更新为张三,用户Id是3012的用户名称更新为李四
    /// </summary>
    [Fact]
    public void UpdateUsersTest()
    {
        var sql = @"UPDATE dbo.[user] SET UserName=@UserName WHERE UserId = @UserId ;";
        var users = new List<User> {
            new User { UserId=3013, UserName = "张三", },
            new User { UserId =3012, UserName = "李四",  },
       };
        var res = Repository.Execute(sql,users);
        Assert.True(res > 0);
    }
    

    2.2检测到数据库执行的脚本

    生成两条Update脚本执行

    exec sp_executesql N'UPDATE dbo.[user] 
    					 SET UserName=@UserName 
    					 WHERE UserId = @UserId ;',
    					 N'@UserId int,@UserName nvarchar(4000)',
    					 @UserId=3013,@UserName=N'张三'
    
    exec sp_executesql N'UPDATE dbo.[user] 
    					 SET UserName=@UserName 
    					 WHERE UserId = @UserId ;',
    					 N'@UserId int,@UserName nvarchar(4000)',
    					 @UserId=3012,@UserName=N'李四'
    

    示例代码下载地址

  • 相关阅读:
    HDU4507 吉哥系列故事――恨7不成妻(数位dp)
    UCF Local Programming Contest 2017 G题(dp)
    ICPC Latin American Regional Contests 2019 I题
    UCF Local Programming Contest 2017 H题(区间dp)
    HDU2089 不要62
    AcWing1084 数字游戏II(数位dp)
    UCF Local Programming Contest 2017 F题(最短路)
    Google Code Jam 2019 Round 1A Pylons(爆搜+贪心)
    AcWing1083 Windy数(数位dp)
    Vue
  • 原文地址:https://www.cnblogs.com/wuyunblog/p/9456756.html
Copyright © 2011-2022 走看看