mirror of
https://github.com/DapperLib/Dapper.git
synced 2026-10-16 21:03:18 +08:00
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:
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user