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

news2025/3/12 6:34:26

系列文章目录

🎀🎀🎀 .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 系列

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NO.33十六届蓝桥杯备战|函数|返回值|声明|调用|引用|函数重载(C++)

返回值 我们在设计的函数的时候&#xff0c;函数在经过计算后&#xff0c;有时候需要带回⼀些计算好的数据&#xff0c;这时候往往使⽤return 来返回&#xff0c;这⾥我们就讨论⼀下使⽤ return 返回。 return 后边可以是⼀个数值&#xff0c;也可以是⼀个表达式&#xff0c;…

5G工业路由器赋能无人码头,港口物流智能化管理

全球贸易发展促使港口需提升运营效率&#xff0c;传统港口面临诸多难题&#xff0c;无人码头成为转型关键方向。5G 工业路由器为其提供有力通信支持&#xff0c;引领港口物流变革。 随着无人码头建设在全球兴起&#xff0c;如荷兰鹿特丹港、中国上海洋山港等。码头作业设备需实…

【Academy】OAuth 2.0 身份验证漏洞 ------ OAuth 2.0 authentication vulnerabilities

OAuth 2.0 身份验证漏洞 ------ OAuth 2.0 authentication vulnerabilities 1. 什么是 OAuth&#xff1f;2. OAuth 2.0 是如何工作的&#xff1f;3. OAuth 授权类型3.1 OAuth 范围3.2 授权代码授权类型3.3 隐式授权类型 4. OAuth 身份验证4.1 识别 OAuth 身份验证4.2 侦察OAuth…

有关Java中的多线程

学习目标 ● 掌握线程相关概念 ● 掌握线程的基本使用 ● 掌握线程池的使用 ● 了解解决线程安全方式 1.为什么要学习线程? ● 从1946年2月14日世界上第一台计算机在美国宾夕法尼亚大学诞生到今天&#xff0c;计算和处理的模式早已从单用户单任务的串行模式发展到了多用户多…

【eNSP实战】配置交换机端口安全

拓扑图 目的&#xff1a;让交换机端口与主机mac绑定&#xff0c;防止私接主机。 主机PC配置不展示&#xff0c;按照图中配置即可。 开始配置之前&#xff0c;使用PC1 ping 一遍PC2、PC3、PC4、PC5&#xff0c;让交换机mac地址表刷新一下记录。 LSW1查看mac地址表 LSW1配置端…

LLMs基础学习(一)概念、模型分类、主流开源框架介绍以及模型的预训练任务

文章目录 LLM基础学习&#xff08;一&#xff09;一、大语言模型&#xff08;LLMs&#xff09;的简单介绍定义与基本信息核心特点局限性参考的模型 二、大语言模型&#xff08;LLMs&#xff09;名称后 “175B”“60B”“540B” 等数字的含义数字代表模型参数数量具体示例参数数…

软件IIC和硬件IIC的主要区别,用标准库举例!

学习交流792125321&#xff0c;欢迎一起加入讨论&#xff01; 在学习iic的时候&#xff0c;我们经常会遇到软件 IC和硬件 IC,它两到底有什么区别呢&#xff1f; 软件 IC&#xff08;模拟 IC&#xff09;和硬件 IC&#xff08;外设 IC&#xff09;是两种实现 IC 总线通信的方式…

4个 Vue 路由实现的过程

大家好&#xff0c;我是大澈&#xff01;一个喜欢结交朋友、喜欢编程技术和科技前沿的老程序员&#x1f468;&#x1f3fb;‍&#x1f4bb;&#xff0c;关注我&#xff0c;科技未来或许我能帮到你&#xff01; Vue 路由相信朋友们用的都很熟了&#xff0c;但是你知道 Vue 路由…

git文件过大导致gitea仓库镜像推送失败问题解决(push failed: context deadline exceeded)

问题描述&#xff1a; 今天发现gitea仓库推送到某个镜像仓库的操作几个月前已经报错终止推送了&#xff0c;报错如下&#xff1a; 首先翻译报错提示可知是因为git仓库大小超过1G限制。检查本地.git文件&#xff0c;发现.git文件大小已达到1.13G。确定是.git文件过大导致&…

怎么利用DeepSeek进行PCB设计?

最近在琢磨利用Deepseek改善PCB的细节设计&#xff0c;毕竟立创EDA里面没有集成DS&#xff0c;因此&#xff0c;如何让DS能识别图片成了重中之重。所幸最近腾讯元宝里面集成了R1的满血版&#xff0c;这个版本可以上传图片&#xff0c;于是让DS识别图片就可能了。 在原理图设计…

详细介绍 Jupyter nbconvert 工具及其用法:如何将 Notebook 转换为 Python 脚本

nbconvert 是 Jupyter 提供的一个非常强大的工具&#xff0c;允许用户将 Jupyter Notebook 文件&#xff08;.ipynb&#xff09;转换成多种格式&#xff0c;包括 Python 脚本&#xff08;.py&#xff09;、HTML、PDF、LaTeX 等。你可以通过命令行来运行 nbconvert&#xff0c;也…

windows上传uniapp打包的ipa文件到app store构建版本

uniapp是一个跨平台的框架&#xff0c;使用windows电脑也可以开发ios软件&#xff0c;因为uniapp的打包是在云端实现的&#xff0c;本地电脑无需使用mac电脑即可完成打包。 但是打包后的ipa文件需要上架到app store的构建版本上&#xff0c;没有mac电脑&#xff0c;又如何上架…

PySide(PyQT),QGraphicsItem的pos()和scenePos()区别

在QGraphicsItem中&#xff0c;pos()和scenePos()是两个重要的方法&#xff0c;用于描述图形项的位置&#xff0c;但它们的含义和用途有所不同。理解它们的区别对于正确操作和管理QGraphicsItem的位置至关重要。 1. pos()方法 • 定义&#xff1a;pos()返回的是QGraphicsItem在…

消防设施操作员考试备考:以技巧为翼,翱翔知识天空​

消防设施操作员考试的备考过程中&#xff0c;掌握实用技巧能让学习事半功倍。以下为您介绍一系列备考技巧&#xff0c;助您在知识的天空中自由翱翔。​ 记忆技巧&#xff1a;化繁为简​ 消防知识众多&#xff0c;记忆难度较大。可以采用多种记忆方法&#xff0c;如口诀记忆法…

物联网商业模式

物联网商业模式是一种战略规划&#xff0c;它融合了物联网技术来创造价值并获取收入。它与传统商业模式的不同之处在于&#xff0c;它利用互联设备来改善运营、提升客户体验以及优化服务项目。在当今由科技驱动的世界中&#xff0c;这种商业模式通过利用实时数据来提供创新服务…

【RabbitMQ】事务

事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的&#xff0c;该协议实现了事务机制&#xff0c;因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的&#xff0c…

MVCC的理解(Multi-Version Concurrency Control,多版本并发控制)

1.事务特性(ACID) 原子性&#xff1a;事务要么全部成功&#xff0c;否则全部回滚 一致性&#xff1a;保证逻辑完整性&#xff08;关联表删除&#xff09; 隔离性&#xff1a;事务并发隔离&#xff08;行锁&#xff0c;间隙锁&#xff09; 持久性&#xff1a;已提交的事务永…

每日一题----------集合

数组&#xff1a; &#xff08;1&#xff09;长度开始必须指定&#xff0c;而且一但指定&#xff0c;不能修改。 &#xff08;2&#xff09;保存的必须为同一类型的元素。 &#xff08;3&#xff09;使用数组进行增加元素的代码--比较麻烦。 如果要添加数据则需要&#xff…

滑动窗⼝(同向双指针)---最⼤连续1的个数III

题目链接 给定一个二进制数组 nums 和一个整数 k&#xff0c;假设最多可以翻转 k 个 0 &#xff0c;则返回执行操作后 数组中连续 1 的最大个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出&#xff1a;6 解释&#xff1a;[1,1,1,0,0,…