当前位置: 首页 > news >正文

SqlSugar 进阶之原生Sql操作与存储过程写法 【ORM框架】

系列文章目录

🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀

在这里插入图片描述


文章目录

  • 系列文章目录
  • 一、前言 🍃
  • 二、用法介绍
  • 三、方法列表
  • 四、使用案例
  • 五、调用存储过程
  • 六、in参数用法
  • 七、SqlServer带Go的脚本处理
  • 八、查询2个结果集
  • 九、集合参数批量操作
  • 十、表值参数、游标参数
  • 十一、DataSet转List<类>
  • 十二、类作为参数
  • 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀


一、前言 🍃

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

二、用法介绍

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

三、方法列表

在这里插入图片描述

四、使用案例

✨技巧: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

五、调用存储过程

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

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

七、SqlServer带Go的脚本处理

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

八、查询2个结果集

等同于 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(表游标)

十一、DataSet转List<类>

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();

🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀

【开篇】.NET开源 ORM 框架 SqlSugar 系列
【入门必看】.NET开源 ORM 框架 SqlSugar 系列
【实体配置】.NET开源 ORM 框架 SqlSugar 系列
【Db First】.NET开源 ORM 框架 SqlSugar 系列
【Code First】.NET开源 ORM 框架 SqlSugar 系列
【数据事务】.NET开源 ORM 框架 SqlSugar 系列
【连接池】.NET开源 ORM 框架 SqlSugar 系列
【查询目录】.NET开源 ORM 框架 SqlSugar 系列
【查询基础】.NET开源 ORM 框架 SqlSugar 系列
【排序用法】.NET开源 ORM 框架 SqlSugar 系列
【分组去重】.NET开源 ORM 框架 SqlSugar 系列
【联表查询】.NET开源 ORM 框架 SqlSugar 系列
【导航查询】.NET开源 ORM 框架 SqlSugar 系列
【子查询】.NET开源 ORM 框架 SqlSugar 系列
【嵌套查询】.NET开源 ORM 框架 SqlSugar 系列
【配置查询】.NET开源 ORM 框架 SqlSugar 系列
【并集查询】.NET开源 ORM 框架 SqlSugar 系列
【树型查询】.NET开源 ORM 框架 SqlSugar 系列
【表格查询】.NET开源 ORM 框架 SqlSugar 系列
【动态表达式】.NET开源 ORM 框架 SqlSugar 系列
【查询函数】.NET开源ORM框架 SqlSugar 系列
【过滤器】.NET开源 ORM 框架 SqlSugar 系列
【跨库查询、多库查询】.NET开源 ORM 框架
​【报表查询】.NET开源ORM框架 SqlSugar 系列
【Where语法全解密】.NET开源ORM框架 SqlSugar 系列
【Select 语法全解密】.NET开源ORM框架 SqlSugar 系列
【查询返回结果类型】.NET开源ORM框架 SqlSugar 系列
【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列
【SqlSugar雪花ID常见问题】.NET开源ORM框架 SqlSugar 系列

在这里插入图片描述

相关文章:

  • centos安装python3.9.9总结和笔记
  • coze ai assistant Task 1
  • Java中的常用关键字
  • 基于SpringBoot的校园二手交易平台(计算机毕设-JAVA)
  • Oracle/MySQL/PostgreSQL 到信创数据库数据同步简介
  • uniapp在APP平台(Android/iOS)选择非媒体文件
  • 参考thinkphp架构的FastAPI实现思路
  • 【AI大模型】LLM训练deepseek如何识别视频
  • 基于腾讯云高性能HAI-CPU的跨境电商客服助手全链路解析
  • leetcode-数组操作
  • LeetCode - #226 基于 Swift 实现基本计算器
  • 浙江大学:《DeepSeek——回望AI三大主义与加强通识教育》
  • 【每日学点HarmonyOS Next知识】对话框与导航冲突、富文本、字体大小、列表刷新、Scroll包裹文本
  • ROWNUM 与 ROW_NUMBER() OVER ()
  • llamafactory 微调教程
  • Python---函数
  • for...of的用法与介绍
  • 设计模式八股整理
  • 小白学习:提示工程(什么是prompt)
  • 计算机网络基础:简单渗透
  • 网站建设一般多钱/市场调研报告范文模板word
  • 深圳大型网站开发/网络营销的现状分析
  • 响应式网站建设市场/山西seo基础教程
  • 重庆论坛网站建设/关键词搜索指数查询工具
  • 区块链网站建设/分销渠道
  • 学而思的网站哪里做的/精准网络营销推广