再论c#获取存储过程返回值(包括SqlSugar)

时间:2021-11-21 02:19:13

其实这个问题好多年以前研究过:

https://blog.csdn.net/xpnew/article/details/6909902

最近因为需要统计日结月结,给同事写了一套调用存储过程的代码。同时因为项目ORM层是通过SqlSugar实现的,就又研究了一下SqlSugar调用存储过程的内容。

折腾了一番之后,对于【c#获取存储过程返回值】这个技术点,又有了新一层认识。下面写一下要点总结:

一、核心内容是指定Command参数的Direction

MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue;

这个和以前的的看法是一样的。只是这次经历的研究,发现有很多细节在里面,在后面逐一列出

再论c#获取存储过程返回值(包括SqlSugar)

二、调用存储过程的方法:GetScalar和ExecuteCommand

在SqlSugar当中,使用Direction 的办法,这两种调用方法都能正确地返回值。

但是这两个方法,实际上是不一样的:

GetScalar返回的是结果集(表格)的第一行、第一列。

ExecuteCommand是执行了存储过程,成功更新/添加多少条。

再论c#获取存储过程返回值(包括SqlSugar)

具体来说:

■完全没有执行任何更新、插入,返回-1

■只有UPDATE DELET INSERT 执行的结果会算在内,上图的2/3/3分别是随便添加了一个update更新了2行,删除了原来的统计结果3条,重新计算了统计结果再插入也是3条。

■包含多个UPDATE DELET INSERT操作的时候,返回的结果是全部操作行数之和。

三、存储过程里面的Select/Update和Return

在不太严谨的使用当中,可以用Select代替Return Value(前提是通过GetScalar 调用 )

存储过程当中 这样写:

再论c#获取存储过程返回值(包括SqlSugar)

执行结果:

再论c#获取存储过程返回值(包括SqlSugar)

c#代码调试:

再论c#获取存储过程返回值(包括SqlSugar)

再论c#获取存储过程返回值(包括SqlSugar)

不过当我做了一个简单的干扰就不行了。

比如说我在最终返回之前添加了一个select

再论c#获取存储过程返回值(包括SqlSugar)

在SQL Server管理器里面:

再论c#获取存储过程返回值(包括SqlSugar)

C#代码调试:

再论c#获取存储过程返回值(包括SqlSugar)

也就是说,使用Select返回结果是有局限的不能在最终返回之前有任何其它的SELECT.

当然,UPDATE就更不行了。参见上一节。

总之,假如想把存储过程当作一个有返回代码的“函数”、“方法”看待的话,还是要用 OUTPUT或者ReturnValue

四、ReturnValue的其它细节

1、需要在执行之前添加到Command参数里。

以前在c#通过 ADO.net连接数据库的时候,我好像验证过,执行之前指定了返回参数才有这个处理,ADO.net不会自动处理。

SqlSugar里面这次验证过了,不添加是不会自动生成这个参数的,看了源代码也是这样。

再论c#获取存储过程返回值(包括SqlSugar)

2、ReturnValue是“额外的”参数数量,如果出现了“使用了过多的参数数量”一类的异常,请检查其它参数,从其它的参数上寻找问题。

3、参数的名称无关紧要,只要不会干扰到其它传入、传出参数就行。

再论c#获取存储过程返回值(包括SqlSugar)的更多相关文章

  1. C# 获取 存储过程 返回值

    C#获取存储过程的返回值,这一方法,总是容易忘,今天给贴出来,以方便下次使用 存储过程: CREATE  PROCEDURE [dbo].[Proc_GetInfo]     ),     ) out ...

  2. C#获取存储过程返回值和输出参数值的方法

    //转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...

  3. SqlDataReader 获取存储过程返回值

    编写存储过程,获取不到返回值 附上代码: SqlDataReader reader = null;// totalRecords = ; try { SqlConnectionHolder conne ...

  4. 【转】SQL SERVER 获取存储过程返回值

    1.OUPUT参数返回值 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_buyerid int , @o_id bigint OUTPUT ) AS BEG ...

  5. EF中执行存储过程,获取output返回值

    EF不能直接支持执行存储过程,于是使用转化成执行SQL语句的形式,却怎么也获取不到output的值,折腾的好久,终于解决了,分享下曲折的经历: public int AddVote(int title ...

  6. 用jquery的ajax方法获取return返回值的正确姿势

    如果jquery中,想要获取ajax的return返回值,必须注意两方面,ajax的同步异步问题,在ajax方法里面还是外面进行return返回值. 下面列举了三种写法,如果想成功获取到返回值,参考第 ...

  7. SQL存储过程返回值

    1 SQL存储过程返回值有3种 1.1 直接return返回(例如 return 1): 1.2 通过参数output返回(例如字符串类型): 1.3 直接返回程序集(Dataset程序集). 2 用 ...

  8. Shell $?获取函数返回值或者上一个命令的退出状态

    Shell $?获取函数返回值或者上一个命令的退出状态 来自:互联网 时间:2021-01-12 阅读:2 $? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值. 所谓退出状态, ...

  9. Python从线程获取函数返回值

    Python中利用强大的threading模块可以很容易的实现多线程开发,提高运行速度.这一般是对某个进行大量计算操作的的函数进行多线程处理,然后合并各线程的结果.获取函数返回值的方法可以如下: 1) ...

随机推荐

  1. iOS 检查版本号的代码

    - (void)checkNewVersion{ if ([@"appStore" isEqualToString:CHANNEL]) { AFHTTPRequestOperati ...

  2. HTTP协议(超文本传输协议)

    一.HTTP的简介: 超文本传输协议. 它是基于TCP连接的(默认端口号是80).所以在传输数据前客户端需向服务器发送连接请求.当服务器同意连接请求,建立连接后才可以发送数据报文. 二.HTTP的报文 ...

  3. 【剑指offer】第一个字符只出现一次

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27106997 题目描写叙述: 在一个字符串(1<=字符串长度<=10000,所 ...

  4. Spring源码情操陶冶-AbstractApplicationContext&num;registerBeanPostProcessors

    承接前文Spring源码情操陶冶-AbstractApplicationContext#invokeBeanFactoryPostProcessors 瞧瞧官方注释 /** * Instantiate ...

  5. layui 重加载

    tableIns.reload({ page: { curr: 1 //重新从第 1 页开始 } }); tableIns为layui 表格定义的函数 var tableIns= table.rend ...

  6. java数组的声明、创建和遍历

    一.数组的声明.创建 1.一维数组 先是声明 dataType[] arrayRefVar; // 首选的方法 数据类型[] 数组名; dataType arrayRefVar[]; // 效果相同, ...

  7. 如何将相册中的动态GIF图转化成NSData类型

    http://www.cocoachina.com/bbs/read.php?tid=151776

  8. 第21件事 资源支持离不开RACI表

    十步法的第九步寻求资源支持.资源主要包括人力资源.物力资源和财力资源.人力资源,即需要多少人:物力资源,即需要多少软硬件设备:财力资源,即需要多少预算.根据产品或项目目标,资源估算时要考虑需要什么样的 ...

  9. 记 Install VNC On RaspberryOS During 创新实训 自然语言交流系统

    树莓派初始化设置并安装VNC SSH上去之后第一件事就是更新debian: sudo apt-get update, 升级完成后重启一下; 在SSH终端输入sudo raspi-config, 这里需 ...

  10. PGM学习之七 MRF,马尔科夫随机场

    之前自己做实验也用过MRF(Markov Random Filed,马尔科夫随机场),基本原理理解,但是很多细节的地方都不求甚解.恰好趁学习PGM的时间,整理一下在机器视觉与图像分析领域的MRF的相关 ...