-
Notifications
You must be signed in to change notification settings - Fork 455
Sql query
so edited this page May 22, 2021
·
1 revision
对于一些极其复杂的 sql 查询,还是得依赖原生 sql,因此,Chloe 提供了原生 sql 查询接口。
获取满足条件的用户信息,将结果映射到 Person 类上:
dbContext.SqlQuery<Person>("select * from Person where Age>@age", new DbParam("@age", 18)).ToList();
获取满足条件的用户 Id:
dbContext.SqlQuery<int>("select Id from Person where Age>@age", new DbParam("@age", 18)).ToList();
支持存储过程:
dbContext.SqlQuery<Person>("Proc_Test", CommandType.StoredProcedure, new DbParam("@age", 18)).ToList();
支持dynamic:
dbContext.SqlQuery<dynamic>("select Id,Name from Person where Age>@age", new DbParam("@age", 18)).ToList();
传参方式2:
dbContext.SqlQuery<Person>("select * from Person where Id=@Id", new { Id = 1 }).ToList();
获取 DataTable:
ExecuteDataTable 扩展方法位于 https://github.com/shuxinqin/Chloe/blob/master/src/Chloe.Extension/DbSessionExtension.cs 类中。
DataTable dt = dbContext.Session.ExecuteDataTable("select * from Person where age>=@age", new { age = 18 });
SqlQueryFmt(仅.NET Core版本支持):
SqlQueryFmt 扩展方法可以执行原生sql语句,并且会自动参数化,方法定义位于 https://github.com/shuxinqin/Chloe/blob/master/src/Chloe.Extension/DbContextExtension_NETCORE.cs 类中。
int age = 18;
List<Person> persons = dbContext.SqlQueryFmt<Person>($"select * from Person where age>={age}").ToList();
//或者
FormattableString sql = $"select * from Person where age>={age}"; //此处声明变量不能是 var 或者 string,否则会生成非参数化 sql,有潜在的 sql 注入问题
users = dbContext.SqlQueryFmt<Person>(sql).ToList();
/*
* 生成参数化 sql:
* Int32 @P_0 = 18;
select * from Person where age>=@P_0
*/
ado.net:
基本的 ado.net 接口定义在 DbContext.Session 对象中。
int rowsAffected = dbContext.Session.ExecuteNonQuery("update Person set Age=18 where Id=1");
IDataReader dataReader = dbContext.Session.ExecuteReader("select * from Person where Age>18");
熬夜的时候容易引起脱发,熬夜时人的免疫力会下降,还会引起内分泌的变化,导致皮脂分泌增多,这些因素都不利于头发的生长,有可能引起脱发。如果出现熬夜脱发的情况,需要及时纠正日常的生活习惯,合理安排休息时间,早睡早起,适当的锻炼身体,多进食优质的蛋白质,增强身体的抵抗力,促进头发的生长。
发量有限,远离996!!!