前言
上一篇《C# SqlSugar框架的学习使用(四)-- 插入数据的详细用法》我们已经把SqlSugar的插入多种用法实现了,这篇我们就来说说更新数据和删除数据的多种用法。我们就用上一篇的数据表POSTemp进行操作。
更新和删除里面大部分用法与插入的方式差不多,所以我们这里不全部举例了,把一些不同的重点做一下。
数据更新
SqlSugar更新分为2大类写法,1种是传实体对象的方式 这种是以实体对象为核心进行更新,不传实体对象这种是以表达式为核心进行更新。
//传实体对象写法(支持批量对象)
db.Updateable(updateObj)
//不传实体对象写法
db.Updateable<T>()
传对象的用法
根据实体更新(主键要有值,主键是更新条件)
加入按钮
private void tsmnuupdatecls_Click(object sender, EventArgs e)
{
try
{
POSTemp pos = _db.Queryable<POSTemp>()
.Where(t => t.Posno == "0001").First();
pos.OrgCode = "002";
pos.status = "0";
int count = _db.Updateable(pos).ExecuteCommand();
TextShow("更新了" + count + "条数据");
}
catch (Exception ex)
{
TextShow(ex.Message);
}
}
传入对象根据条件更新
private void tsmnuupdatewhere_Click(object sender, EventArgs e)
{
try
{
POSTemp pos = _db.Queryable<POSTemp>()
.Where(t => t.Posno == "0002").First();
pos.OrgCode = "003";
pos.status = "2";
int count = _db.Updateable(pos)
.UpdateColumns(p=>new {p.OrgCode,p.status,p.Posno})
.WhereColumns(t=>new {t.Posno})
.ExecuteCommand();
TextShow("更新了" + count + "条数据");
}
catch (Exception ex)
{
TextShow(ex.Message);
}
}
其余的用法与插入类似,就不再全部举例了。
不传对象的用法
//正确写法
var t10 = db.Updateable<Student>()
.UpdateColumns(it => new Student() { Name = "a", CreateTime = DateTime.Now })
.Where(it => it.Id == 11).ExecuteCommand();
//错误写法
var st=new Student() { Name = "a", CreateTime = DateTime.Now };
var t10 = db.Updateable<Student>()
.UpdateColumns(it => st)
.Where(it => it.Id == 11).ExecuteCommand();
private void tsbtnupdatenotcls_Click(object sender, EventArgs e)
{
try
{
int count = _db.Updateable<POSTemp>()
.SetColumns(p => new POSTemp(){status = "3"})
.Where(t => t.OrgCode=="001")
.ExecuteCommand();
TextShow("更新了" + count + "条数据");
}
catch (Exception ex)
{
TextShow(ex.Message);
}
}
联表更新
private void tsmnuupdateunion_Click(object sender, EventArgs e)
{
try
{
int count = _db.Updateable<POSTemp>()
.SetColumns(p => new POSTemp()
{
status = SqlFunc.Subqueryable<POS>()
.Where(x=>x.Posno==p.Posno)
.Select(x=>x.status)
})
.Where(t => t.OrgCode == "003")
.ExecuteCommand();
TextShow("更新了" + count + "条数据");
}
catch (Exception ex)
{
TextShow(ex.Message);
}
}
根据不同条件执行更新不同的列
private void tsmnuupdatecasewhere_Click(object sender, EventArgs e)
{
try
{
POSTemp pos = _db.Queryable<POSTemp>()
.Where(t => t.Posno == "0001").First();
int count = _db.Updateable(pos)
.SetColumnsIF(pos.status == "0", t =>
new POSTemp() {status = "5"})
.SetColumnsIF(pos.status == "5", t =>
new POSTemp() {status = "9"})
.ExecuteCommand();
TextShow("更新了" + count + "条数据");
}
catch (Exception ex)
{
TextShow(ex.Message);
}
}
我们看看点击执行两次的结果
保存或者插入
该功能是根据主键判断是否存在,如果存在则更新,不存在则插入,支持批量操作。
这里也是只演示基本操作,后面的详细操作和插入及更新一样。
private void tsmnusave_Click(object sender, EventArgs e)
{
try
{
POSTemp pos = new POSTemp();
pos.Posno = "0015";
pos.Posname = "15款台";
pos.OrgCode = "001";
pos.status = "1";
int count = _db.Saveable(pos).ExecuteCommand();
TextShow("更新了" + count + "条数据");
pos.Posname = "15款台1";
count = _db.Saveable(pos).ExecuteCommand();
TextShow("更新了" + count + "条数据");
}
catch (Exception ex)
{
TextShow(ex.Message);
}
}
上面代码中我们执行了两次,在第二次执行的时候我们把名称修改了一下,看看输入的语句
数据删除
根据实体删除
private void tsmnudeletecls_Click(object sender, EventArgs e)
{
try
{
POSTemp pos = new POSTemp();
pos.sn = 16;
pos.Posno = "0015";
pos.Posname = "15款台";
pos.OrgCode = "001";
pos.status = "1";
int count = _db.Deleteable(pos).ExecuteCommand();
TextShow("删除了" + count + "条数据");
}
catch (Exception ex)
{
TextShow(ex.Message);
}
}
根据表达式删除
我们这次先试试删除为Posno是0014的数据
然后再删除status为3和9的数据
private void tsmnudeletewhere_Click(object sender, EventArgs e)
{
try
{
int count = _db.Deleteable<POSTemp>()
.Where(t=>t.Posno=="0014")
.ExecuteCommand();
TextShow("删除了" + count + "条数据");
//删除status为3和9的数据
List<string> statList=new List<string>();
statList.Add("3");
statList.Add("9");
count = _db.Deleteable<POSTemp>()
.Where(t => statList.Contains(t.status))
.ExecuteCommand();
TextShow("删除了" + count + "条数据");
}
catch (Exception ex)
{
TextShow(ex.Message);
}
}
-END-