原生Sql操作 ORM操作 Sql

介绍

下面的方法支持复杂的Sql  、 返回多个结果集 、存储过程等  、可以理解为了一个高级DbHelper


1、用法介绍

//调用Sql
db.Ado.具体方法

//调用存储过程
db.Ado.UseStoredProcedure().具体方法

2、方法列表

方法名描述返回值
SqlQuery< T >查询所有返回实体集合List
SqlQuery<T,T2>可以返回2个结果集Tuple<List, List>
SqlQuerySingle查询第一条记录T
SqlQueryDynamic查查询所有返回匿名对象dynamic
GetDataTable查询所有DataTable
GetDataReader读取DR需要手动释放DRDataReader
GetDataSetAll获取多个结果集DataSet
ExecuteCommand返回受影响行数,一般用于增删改int
GetScalar获取首行首列object
GetString获取首行首列string
GetInt获取首行首列int
GetLong获取首行首列long
GetDouble获取首行首列Double
GetDecimal获取首行首列Decimal
GetDateTime获取首行首列DateTime

dateset

3、使用案例

技巧: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 还有更多方法看文档最下面

Sql 查询用  

GetDataTable

SqlQuery 

Sql 增删改用

 增删 改可以用 ExecuteCommand


4、 调用存储过程

//简单用法
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;

储存过程

5、in参数用法

 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')


6、SqlServer带Go的脚本处理

db.Ado.ExecuteCommandWithGo(sql) //go语句是独立一行就支持


7、查询2个结果集

等同于Dapper中的 querymultiple

var views=db.SqlQuery<T,T2>("select * from t; select * from t2");//多实体
var t1list=views.Item1;
var t2list=views.Item2;


8、集合参数批量操作

和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(dc).AS("student").ExecuteCommand();


//更新
List<Dictionary<string,object>> list= new List<Dictionary<string,object>>;
list.Add(字典)//更新和条件所需要的所有列
var t66 = db.Updateable(dt).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);
      }
             
 }


文档:SqlSugar5.0