SqlSugar无实体CURD应用-C#

  • 本文所述开发环境:.C#、NET8、Visual Studio2022

SqlSugar无实体查询数据表

首先根据《SqlSugar使用DbFirst对象根据数据库表结构创建实体类-C#》中的描述新建好对应的数据库表

通过《SqlSugar有实体CURD应用-C#》中,已经知道SqlSugar在有实体的情况下的基本使用方式。本文要讲述的是如何在没有实体类的情况下SqlSugar如何操作数据库表。也就是说,不用创建数据库表所对应的实体类,SqlSugar也是可以操作数据库的,这种更人性话,个人感觉更适合与项目开发。

以下还是通过将对应的 sql 语句转换为 SqlSugar 的语法方式经行讲解。了解更多可以查看SqlSugar官网

这里再啰嗦一句:为了可以直观的看到SqlSugar语法最终执行的sql语句,可以使用如下代码,将Sql语句输出到控制台,调试的时候用的较多。

using (SqlSugarClient sugarClient = new(connectionConfig))
{
	sugarClient.Aop.OnLogExecuting = (s, p) =>
	{
	    Console.WriteLine("===================================");
	    Console.WriteLine($"Sql语句:{ s }");
	};
	// 接下来编辑执行的SqlSugar代码
}
1. 单表查询
  • 查询 tb_student表中的数据

Sql语句:select * from tb_student
代码如下:

DataTable student = sugarClient.Queryable<object>() // Object 表名实体类未知,无实体类
	.AS("tb_student") // 指定要查询的表名
	.ToDataTable(); // DataTable类型接收

由上看出,无实体其实就是将有实体时的实体类名换成object类型,然后用 .AS() 方法指定相应的表名就可以了,其它和有实体时类似。

Sql语句:select count(*) from tb_student
代码如下:

int nCount = sugarClient.Queryable<object>().AS("tb_student").Count();

Sql语句:select top 1 * from tb_student
代码如下:

DataTable student = sugarClient.Queryable<object>().AS("tb_student").Take(1).ToDataTable();

Sql语句:select top 10 * from tb_student
代码如下:

DataTable student = sugarClient.Queryable<object>()
	.AS("tb_student")
	.Take(10) //和其它方法连用时, Take() 方法放在最后
	.ToDataTable();

Sql语句:select * from tb_student order by [年龄] asc ,[身高] desc
代码如下:

DataTable studentDT = sugarClient.Queryable<object>()
	.AS("tb_student")
	.OrderBy("年龄, 身高 DESC")
	.ToDataTable();

Sql语句:select 姓名,性别 from tb_student where 班级ID=1003 and 身高>165
代码如下:

DataTable studentDT = sugarClient.Queryable<object>()
	.AS("tb_student")
	.Where("班级ID=1003")
	.Where("身高>165")
	.Select("姓名, 性别")
	.ToDataTable();
//或者
DataTable studentDT = sugarClient.Queryable<object>()
	.AS("tb_student")
	.Where("班级ID = @classid and 身高 > @high", new { classid = 1003, high = 165 })
	.Select("姓名, 性别")
	.ToDataTable();

Sql语句:select * from tb_subject_selection where 课程 like ‘%化学%’
代码如下:

DataTable studentDT = sugarClient.Queryable<object>()
	.AS("tb_subject_selection")
	.Where("课程 like '%化学%'")
	.ToDataTable();

Sql语句:select * from tb_student where 状态ID in (2, 3)
代码如下:

DataTable studentDT = sugarClient.Queryable<object>()
	.AS("tb_student")
	.Where("状态ID in (2, 3)")
	.ToDataTable();
//或者
DataTable studentDT = sugarClient.Queryable<object>()
	.AS("tb_student")
	.Where("状态ID in (@statuslist)", new { statuslist = new[] { 2, 3 } })
	.ToDataTable();

Sql语句:select 学生ID as Id, 姓名 as Name, 班级ID as Class from tb_student
代码如下:

DataTable studentDT = sugarClient.Queryable<object>()
   .AS("tb_student") // 指定要查的表名
   .Select("学生ID as Id, 姓名 as Name, 班级ID as Class") // 指定表字段别名
   .ToDataTable();
2. 多表查询

Sql语句:select 班级名称, 姓名 as 班主任 from tb_class a left join tb_teacher b on a.班主任 = b.教师ID
代码如下:

DataTable dt = sugarClient.Queryable<object>().AS("tb_class", "c")
	.AddJoinInfo("tb_teacher", "t", ObjectFuncModel.Create("Equals", "c.班主任", "t.教师ID"), JoinType.Left)
	.Select("c.班级名称, t.姓名 as 班主任")
	.ToDataTable();

RightJoin与LeftJoin一样,两个表以上的联合查询也类似,不断的连接起来就可以了。

3. 也可以直接执行组织好的sql语句

如果多表联合查询的语句比较复杂,那么就可以先组织好复杂的语句,然后使用SqlSugar直接执行就可以了。

Sql语句:select c.姓名,c.性别, c.班级名称, d.状态名称 from
(select a.姓名,a.性别,a.状态ID ,b.班级名称 from tb_student a left join tb_class b on a.班级ID=b.班级ID) c
left join tb_status d on c.状态ID = d.状态ID

代码如下:

string strSql = "select c.姓名,c.性别, c.班级名称, d.状态名称 from " +
   "(select a.姓名,a.性别,a.状态ID ,b.班级名称 from tb_student a left join tb_class b on a.班级ID=b.班级ID) c " +
   "left join tb_status d on c.状态ID = d.状态ID";
       
DataTable dt = sugarClient.Queryable<object>("s") //指定别名
   .AS($"({strSql})") // 这里的语句要用括号括起来
   .ToDataTable();

SqlSugar无实体增加表中数据

  • 向表tb_student中插入一行新的记录

代码如下

var dc = new Dictionary<string, object>() 
{
    { "教师ID", "566" },
    { "姓名", "何老师" },
    { "性别", "男"    },
    { "联系方式", "15689760425" }
};

sugarClient.Insertable(dc).AS("tb_teacher").ExecuteCommand();

// 或者
sugarClient.InsertableByDynamic(
    new {
        教师ID = 567,
        姓名 = "夏老师",
        性别 = "女",
        联系方式 = "13723457890"
    }
).AS("tb_teacher").ExecuteCommand();


  • 批量插入多条数据
    要插入多条数据的话,将上面的Dictionary<string, object> 换成**List<Dictionary<string, object>>**就可以了。

SqlSugar无实体更新表中数据

  • 更新表中单个字段

Sql语句:update tb_student set 班级ID=1001 where 学生ID=109
代码如下:

sugarClient.Updateable<object>()
	.AS("tb_student")
	.SetColumns("班级ID", 1001)
	.Where("学生ID = 109")
	.ExecuteCommand();
// 或者
//字典更新单挑记录
var dt = new Dictionary<string, object>();
dt.Add("教师ID", 567);
dt.Add("性别", "男");
sugarClient.Updateable(dt).AS("tb_teacher")
	.WhereColumns("教师ID") // 指定相等的条件字段名
	.ExecuteCommand();
  • 跟新表中多个字段

Sql语句:update tb_student set 班级ID=1001, 状态ID=3 where 学生ID=109
代码如下:

sugarClient.Updateable<object>()
	.AS("tb_student")
	.SetColumns("班级ID", 1001)
	.SetColumns("状态ID", 3)
	.Where("学生ID = 109")
	.ExecuteCommand();
// 或者
var dt = new Dictionary<string, object>();
dt.Add("教师ID", 567);
dt.Add("性别", "女");
var dtList = new List<Dictionary<string, object>>();
dtList.Add(dt);
sugarClient.Updateable(dtList).AS("tb_teacher").WhereColumns("教师ID").ExecuteCommand();

SqlSugar无实体删除表中数据

  • 删除符合条件的记录

Sql语句:delete from tb_student where 学生ID=120
代码如下:

sugarClient.Deleteable<object>().AS("tb_student").Where("学生ID=109").ExecuteCommand();
// 也可以用上面的字典进行删除,约束条件仍然是用 WhereColumns()。
  • 清空表记录

Sql语句:truncate table tb_student
代码如下

sugarClient.DbMaintenance.TruncateTable("tb_student");
  • 判断一个表是否存在

bool exist = sugarClient.DbMaintenance.IsAnyTable(“tb_student”);

  • SqlSugar调用存储过程

var exist = SqlClient.DbMaintenance.IsAnyTable(表名字符串或变量);
if (!exist)
{
SqlClient.Ado.UseStoredProcedure().ExecuteCommand(“存储过程名称字符串”, new { 参数1 = 值或变量, 参数2 = 值或变量 });
}


好了,分享到这里,感谢翻阅,希望帮到你。

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枫叶2000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值