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) //和其它方法连用时, Task() 方法放在最后
	.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”);


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

相关推荐

  1. SqlSugar实体CURD应用-C#

    2024-06-14 09:44:03       10 阅读
  2. 一个SqlSugar实际案例

    2024-06-14 09:44:03       31 阅读
  3. 笨蛋学C++之 C++对数据库实现CRUD

    2024-06-14 09:44:03       13 阅读
  4. curl c++ 实现HTTP GET和POST请求

    2024-06-14 09:44:03       21 阅读
  5. Ubuntu 22, CURL 分块上传文件C++代码实现

    2024-06-14 09:44:03       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-14 09:44:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-14 09:44:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-14 09:44:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-14 09:44:03       18 阅读

热门阅读

  1. uni-app canvas创建画布

    2024-06-14 09:44:03       7 阅读
  2. 自然语言处理(NLP)教学解决方案

    2024-06-14 09:44:03       7 阅读
  3. Civil 3d中 三角网曲面求取二维和三维面积

    2024-06-14 09:44:03       8 阅读
  4. SQL 基础入门教程

    2024-06-14 09:44:03       8 阅读
  5. SqlServer 数据库挂起

    2024-06-14 09:44:03       5 阅读
  6. 揭开 Docker 容器的神秘面纱:深入理解容器原理

    2024-06-14 09:44:03       9 阅读
  7. adb简单使用命令

    2024-06-14 09:44:03       6 阅读
  8. Leetcode.2862 完全子集的最大元素和

    2024-06-14 09:44:03       6 阅读