SqlBuilder Support Update Set (#1404)

I add update `Set` method and unit test.

e.g: 
```C#
var sb = new SqlBuilder()
       .Set("vip = @vip", new { vip })
       .Set("updatetime = @updatetime", new { updatetime })
       .Where("id = @id", new { id })
;
var template = sb.AddTemplate("update #Users /**set**/ /**where**/");
connection.Execute(template.RawSql, template.Parameters);
```

RawSql will generate : 
```
update #Users Set vip = @vip , updatetime = @updatetime\n WHERE id = @id\n
```

using Dapper Execute in sqlserver it'll reqeust by below sql command
```
exec sp_executesql N'update #Users Set vip = @vip , updatetime = @updatetime
 WHERE id = @id
',N'@vip bit,@updatetime datetime,@id int',@vip=1,@updatetime='2020-01-01 00:00:00',@id=1
```

Co-authored-by: Nick Craver <nrcraver@gmail.com>
Co-authored-by: Nick Craver <craver@stackoverflow.com>
This commit is contained in:
Wei
2020-05-02 07:25:12 +08:00
committed by GitHub
parent 2c81a4085a
commit 5c87dc9738
2 changed files with 43 additions and 1 deletions
+4
View File
@@ -149,5 +149,9 @@ namespace Dapper
public SqlBuilder Having(string sql, dynamic parameters = null) =>
AddClause("having", sql, parameters, "\nAND ", "HAVING ", "\n", false);
public SqlBuilder Set(string sql, dynamic parameters = null) =>
AddClause("set", sql, parameters, " , ", "SET ", "\n", false);
}
}
+39 -1
View File
@@ -1,4 +1,5 @@
using System.Linq;
using System;
using System.Linq;
using Xunit;
namespace Dapper.Tests
@@ -42,5 +43,42 @@ namespace Dapper.Tests
connection.Execute("drop table #Users");
}
}
[Fact]
public void TestSqlBuilderUpdateSet()
{
var id = 1;
var vip = true;
var updatetime = DateTime.Parse("2020/01/01");
var sb = new SqlBuilder()
.Set("vip = @vip", new { vip })
.Set("updatetime = @updatetime", new { updatetime })
.Where("id = @id", new { id })
;
var template = sb.AddTemplate("update #Users /**set**/ /**where**/");
const string createSql = @"
create table #Users (Id int,Name varchar(20),Age int,Country nvarchar(5),Vip bit,Updatetime datetime);
insert #Users (Id,Name,Age,Country) values(1,'Sam',16,'USA'),(2,'Tom',25,'UK'),(3,'Henry',14,'UK')";
try
{
connection.Execute(createSql);
var effectCount = connection.Execute(template.RawSql, template.Parameters);
var result = connection.QueryFirst("select * from #Users where Id = 1");
Assert.Equal("update #Users SET vip = @vip , updatetime = @updatetime\n WHERE id = @id\n", template.RawSql);
Assert.True((bool)result.Vip);
Assert.Equal(updatetime, (DateTime)result.Updatetime);
}
finally
{
connection.Execute("drop table #Users");
}
}
}
}