执行Sql
对于一些极其复杂的 sql 查询,还是得依赖原生 sql,因此,Chloe 提供了原生 sql 查询接口。
获取满足条件的用户信息,将结果映射到 User 类上:
context.SqlQuery("select * from Users where Age>?age", new DbParam("?age", 18)).ToList();
获取满足条件的用户 Id:
context.SqlQuery("select Id from Users where Age>?age", new DbParam("?age", 18)).ToList();
支持存储过程:
context.SqlQuery("Proc_Test", CommandType.StoredProcedure, new DbParam("?age", 18)).ToList();
支持dynamic:
context.SqlQuery("select Id,Name from Users where Age>?age", new DbParam("?age", 18)).ToList();
传参方式2:
context.SqlQuery("select * from Users where Id=?Id", new { Id = 1 }).ToList();
DataTable dt = context.Session.ExecuteDataTable("select * from users where age>=@age", new { age = 18 });
int age = 18;
List users = context.FormatSqlQuery($"select * from Users where age>={age}").ToList();
//或者
FormattableString sql = $"select * from Users where age>={age}"; //此处声明变量不能是 var 或者 string,否则会生成非参数化 sql,有潜在的 sql 注入问题
users = context.FormatSqlQuery(sql).ToList();
/*
* 生成参数化 sql:
* Input Int32 ?P_0 = 18;
select * from Users where age>=?P_0
*/
ado.net:
基本的 ado.net 接口定义在 DbContext.Session 对象中。
int rowsAffected = context.Session.ExecuteNonQuery("update Users set Age=18 where Id=1");
IDataReader dataReader = context.Session.ExecuteReader("select * from Users where Age>18");