下面的方法支持复杂的Sql 、 返回多个结果集 、存储过程等 、可以理解为了一个高级DbHelper
//调用Sql db.Ado.具体方法 //调用存储过程 db.Ado.UseStoredProcedure().具体方法
| 方法名 | 描述 | 返回值 |
|---|---|---|
| SqlQuery< T > | 查询所有返回实体集合 | List |
| SqlQuery<T,T2> | 可以返回2个结果集 多结果集,多个结果集 | Tuple<List, List> SQLITE(驱动)需要查询前面加上 this.Context.Ado.IsClearParameters=false; |
| SqlQuerySingle | 查询第一条记录 | T |
| SqlQuery<dynamic> | 查查询所有返回匿名对象 | dynamic |
| GetDataTable | 查询所有 | DataTable |
| GetDataReader | 读取DR需要手动释放DR | DataReader |
| GetDataSetAll | 获取多个结果集 | DataSet |
| ExecuteCommand | 返回受影响行数,一般用于增删改 | int |
| GetScalar | 获取首行首列 | object |
| GetString | 获取首行首列 | string |
| GetInt | 获取首行首列 | int |
| GetLong | 获取首行首列 | long |
| GetDouble | 获取首行首列 | Double |
| GetDecimal | 获取首行首列 | Decimal |
| GetDateTime | 获取首行首列 | DateTime |
技巧:Sql中的关键词用@可以支持多库
//无参数
var dt=db.Ado.GetDataTable(sql) //上面列表中 SqlQuery 等方法都可以不一定是GetDataTable
//参数1:简化用法
var dt=db.Ado.GetDataTable("select * from table where id=@id and name like @name",
new{id=1,name="%"+jack+"%"});
//参数2:复杂用法
var dt=db.Ado.GetDataTable("select * from table where id=@id and name like @name",
new List<SugarParameter>(){
new SugarParameter("@id",1),
new SugarParameter("@name","%"+jack+"%") //执行sql语句
});
//参数3:结合用法
var pars =db.Ado.GetParameters(new{p=1,p2=p});
pars[1].DbType=System.Data.DbType.Date;
var dt=db.Ado.GetDataTable(sql,pars)
//原生SQL用实体 sql 查询
List<ClassA> t=db.Ado.SqlQuery<ClassA>(sql);//比db.SqlQueryable兼容性更强,支持复杂SQL存储过程,缺点没有自带的分页操作
//原生SQL用匿名对象 sql 查询
List<dynamic> t=db.Ado.SqlQuery<dynamic>(sql);
//插入 更新操作一般用
db.Ado.ExecuteCommand(sql);
//db.Ado.xxx 还有更多方法看文档最下面GetDataTable
SqlQuery
增删 改可以用 ExecuteCommand
//简单用法
var dt = db.Ado.UseStoredProcedure().GetDataTable("sp_school",new{name="张三",age=0});
//带有output的存储过程
var nameP= new SugarParameter("@name", "张三");
var ageP= new SugarParameter("@age", null, true);//设置为output
var dt = db.Ado.UseStoredProcedure().GetDataTable("sp_school",nameP,ageP);//返回dt
var list = db.Ado.UseStoredProcedure().SqlQuery<Class1>("sp_school",nameP,ageP);//返回List
//更多返回方法 看文档最下面
//ageP.Value可以拿到output值
//SqlSever Datatable参数 看文档 SqlServer 中有介绍
//Oracle 游标参数用法 Blob类型 Clob类型 看文档 Oracle中有介绍
//如果是ReturnValue
var nameP=new SugarParameter("@name", "张三", typeof(string),ParameterDirection.ReturnValue);
//我们还可以用 GetParameters 来简化参数操作
SugarParameter [] pars =db.Ado.GetParameters(new{p=1,p2=p});
pars[1].Direction=ParameterDirection.Output; var dt = db.Ado.SqlQuery<Order>(
"select * from [order] where id in(@ids)",
new { ids = new int[] { 1,2,3 } }); //是个数组不是字符串
// new SugarParamter("@ids",int[] { 1,2,3})
//select * from [order] where id in('1','2','3')db.Ado.ExecuteCommandWithGo(sql) //go语句是独立一行就支持
等同于Dapper中的 querymultiple
var views=db.SqlQuery<T,T2>("select * from t; select * from t2");//多实体
var t1list=views.Item1;
var t2list=views.Item2;和Dapper中的2层集合的参数功能是一样的,SqlSugar中不用写SQL用法如下
//删除
List<Dictionary<string,object>> list= new List<Dictionary<string,object>>;
list.Add(字典);//只需要条件列
db.Deleteable<object>().AS("[Order]").WhereColumns(list).ExecuteCommand();
//插入
List<Dictionary<string,object>> list= new List<Dictionary<string,object>>;
list.Add(字典)//插入所有要的所有列
db.Insertable(list).AS("student").ExecuteCommand();
//更新
List<Dictionary<string,object>> list= new List<Dictionary<string,object>>;
list.Add(字典)//更新和条件所需要的所有列
var t66 = db.Updateable(list).AS("student").WhereColumns("id").ExecuteCommand();特殊SQL批量
//5.0.6.3
using (db.Ado.OpenAlways()) { //开启长连接
foreach(var pars in List<parameter[]>)
{
db.Ado.ExecuteCommand(sql,paras);
}
}文档搜索你用的具体数据库 : SqlServer (表值)
文档搜索你用的具体数据库 : Oracle(表游标)
https://www.cnblogs.com/sunkaixuan/p/18206516
SqlQuery<T,T2,T3..>最多只能有7个,我们可以用db.Ado.GetDataSetAll拿出超过7个结果集
var datables=ds.Tables.Cast<DataTable>().ToList();
foreach (var item in tables)
{
var list = db.Utilities.DataTableToList<Order>(item);
}默认只支持匿名类作为参数,普通类参数是不支持的
如果想支持类作为参数可以自个封装个方法
代码如下:
var pars=new {id=1;name="a"};//默认支持匿名类
//普通类作为参数最大问题 会把所有属性都变成参数 ,匿名类型就不存在这个问题
var obj = new Order(){ ....} ;//类对象
SugarParameter[] pars=obj.GetType().GetProperties()
.Select(it => new SugarParameter(it.Name, it.GetValue(obj))).ToArray();2016 © donet5.comApache Licence 2.0