Skip to content

更新数据

使用SQLBuilder

常规更新一条数据

普通的update 语句

c#
cc += kit.setTable("ZH_PortCell")
    .set("PC_X", cell["x"].ToString())
    .set("PC_Y", cell["y"].ToString())
    .set("PC_W", cell["w"].ToString())
    .set("PC_H", cell["h"].ToString())
    .where("ZH_PortCellOID", fk)
    .doUpdate();

连表更新

创建并执行 update from 语句

TIP

注意,sqlserver下 mysql下的 updatefrom 语句的语法有所区别,因mysql只支持对 inner join进行更新,sqlserver允许任意的join

c#
kit.set("C_Year", "2022")
.set("C_EndTime", DateTime.Now)
.set("C_TrainType", "p.Po_TrainType", false)
.set("C_Days", "p.Po_Day", false)
.set("C_PlanTotal", "(select SUM(d.Pa_PlanTotal) from PX_PostClassDe as d where PX_Class_FK=PX_ClassOID)")
.setTable("c")
.from("PX_Class as c left join PX_PostClass p on c.PX_PostClass_FK=p.PX_PostClassOID")
.where("c.PX_ClassOID in ('" + newDassOIDs + "')")
.doUpdate();

使用仓储

单个实体更新

更新一条数据,提交到数据库

c#
_sysRegionRep.Update(new SysRegion());

多个实体更新

批量更新数据,提交到数据库

c#
_sysRegionRep.UpdateRange(new SysRegion());

使用SQLClip

  • 依赖相关实体类
  • 使用函数表达式构造条件
  • 无魔法字符串(SQL)

基础用法

c#
var cc= clip.setTable<UCMLClassDataSet>(out var u)
    .set(() => u.ChineseName, "caption")
    .set(() => u.ClassName, "name")
    .where(() => u.UCMLClassOID, 1)
    .doUpdate();

以上案例生成的SQL如下:

sql
update UCMLClassDataSet set ChineseName = 'caption',ClassName = 'name' where ( a.UCMLClassOID = 1 )

快捷用法

c#
var demoOID = Guid.Empty.ToString();

var cc = kit.modifyBy<HHDutyItem>((c, d) =>
{
    c.set(() => d.Di_Name, "name")
        .set(() => d.Di_Code, "001")
        .where(() => d.HH_DutyItemOID, demoOID);
});