下面的方法支持复杂的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