因为msdn中说返回受影响的行数:

Executes a Transact-SQL statement against the connection and returns the number of rows affected.

但是却没看到备注里说

For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. When a trigger exists on a table being inserted or updated, the return value includes the number of rows affected by both the insert or update operation and the number of rows affected by the trigger or triggers. For all other types of statements, the return value is -1. If a rollback occurs, the return value is also -1.

对于UPDATE, INSERT,和 DELETE返回受影响的函数,但是对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。

用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过.

if(cmd.ExecuteNonQuery("xxxx")>0)

{

//执行成功!

}

else

{

//执行失败!

}

通过ExecuteNonQuery()的返回值来判断操作数据库的成功与否是可以的.但是要分情况.

1.ExecuteNonQuery() 不执行存储过程.

此时如果对数据库执行,插入,更新,删除操作,返回的是 受影响的行数.(及一个大于等于0的整数)

2.ExecuteNonQuery() 执行查询不返回影响的行数.

2.ExecuteNonQuery   执行存储过程.

[1].存储过程有返回值(传出参数)

(1).把数据库中受影响的行数赋给返回值,这是得到的返回值是受影响的函数(大于或等于0的整数).

(2).把某个值赋给返回值.

[2].存储过程没有返回值

执行成功后返回 -1.

(没有返回值的存储过程理应 返回 受影响的行数 (执行 增删改) 但是.但我们在ado.net中执行存储过程的时候,dotnet 自动为给了存储过程一个默认值:set nocount on;

所以给我们的感觉是执行存储过程默认返回 -1  )

ExecuteNonQuery 返回的是最后一条SQL语句影响的行数。
如果你想得到存储过程中的Return,那存储过程中,你必须写Return 0或Return 1。  Return 只能是int
另外还有输出参数,可以是任意类型。
概念别搞混了。

假设有存储过程如下:

SQL code
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE PROCEDURE [dbo].[sp_add]
(
    @x int,
    @y int,
    @r int output
)
AS
BEGIN
    SET NOCOUNT ON;
 
    set @r =  @x + @y;
     
    return 0;
END

调用方式:

C# code

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using (SqlConnection conn = new SqlConnection())
{
                conn.ConnectionString = xxxx;
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.CommandText = "sp_add";
                    SqlParameter[] ps = new SqlParameter[4];
                    ps[0] = new SqlParameter("@x", 1);
                    ps[1] = new SqlParameter("@y", 2);
                    ps[2] = new SqlParameter("@r", SqlDbType.Int);
                    ps[2].Direction = ParameterDirection.Output;
                    ps[3] = new SqlParameter();
                    ps[3].SqlDbType = SqlDbType.Int;
                    ps[3].Direction = ParameterDirection.ReturnValue;
                    cmd.Parameters.AddRange(ps);
                    int r = cmd.ExecuteNonQuery();
 
                    Console.WriteLine(string.Format("@r={0},存储过程返回:{1},ExecuteNonQuery返回:{2}", ps[2].Value, ps[3].Value, r));
                }
 }

关于ExecuteNonQuery执行的返回值(SQL语句、存储过程)的更多相关文章

  1. C#中 如何执行带GO的sql 语句

    C#中是不允许执行带GO的sql 语句的, 如何做呢? 思路就是将带GO的sql语句转化为分段执行, 但在同一事务内执行. 扩展方法是个很不错的主意, 但是尽量不要影响原来的cmd的一些东东, 如 c ...

  2. Mysql 定位执行效率低的sql 语句

    一.通过MySQL慢查询日志定位执行效率低的SQL语句. MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysq ...

  3. 监控SQL:执行表中所有sql语句、记录每个语句运行时间(3)

    原文:监控SQL:执行表中所有sql语句.记录每个语句运行时间(3) 通过执行一个 带参数的存储过程  exec  OpreateTB('OpreateUser','IsRun')  更新表的数据 表 ...

  4. 执行最慢的SQL语句

    ---执行最慢的SQL语句SELECT top 20(total_elapsed_time / execution_count)/1000 N'平均时间ms',total_elapsed_time/1 ...

  5. Selenium2学习-036-WebUI自动化实战实例-034-JavaScript 在 Selenium 自动化中的应用实例之六(获取 JS 执行结果返回值)

    Selenium 获取 JavaScript 返回值非常简单,只需要在 js 脚本中将需要返回的数据 return 就可以,然后通过方法返回 js 的执行结果,方法源码如下所示: /** * Get ...

  6. 在Hive中执行DDL之类的SQL语句时遇到的一个问题

    在Hive中执行DDL之类的SQL语句时遇到的一个问题 作者:天齐 遇到的问题如下: hive> create table ehr_base(id string); FAILED: Execut ...

  7. 执行次数最多的sql语句

    执行次数最多的sql语句 * FROM ( creation_time N'语句编译时间' ,DB_NAME(st.dbid) AS dbname ,OBJECT_NAME(st.objectid) ...

  8. 【hibernate spring data jpa】执行了save()方法 sql语句也执行了,但是数据并未插入数据库中

    执行了save()方法  sql语句也执行了,但是数据并未插入数据库中 解决方法: 是因为执行了save()方法,也执行了sql语句,但是因为使用的是 @Transactional 注解,不是手动去提 ...

  9. SQL Server存储过程执行一个带返回值(output)的存储过程

    语法如下: --存储过程一CREATE PROCEDURE testProc @out VARCHAR(500) OUTPUT AS BEGIN SET @out='操作成功' RETURNEND - ...

随机推荐

  1. 35、springboot-运行状态监控使用Actuator

    Spring Boot Actuator 提供了运行状态监控的功能 Actuator 监控数据可以通过阻REST远程 shell 和JMX方式获得.我 首先来介绍通过 REST 方式查看 Actuat ...

  2. notepad++怎样添加文件目录

    需要安装一个Explorer.dll文件 方法一:这个方法我个人试了不成功,可能因为版本问题,进入后选择Explorer进行安装 方法二:网上下载      Explorer.dll文件,放到\\No ...

  3. yum 安装 php5.6

    yum 安装 php5.6 安装 PHP rpm -Uvh http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/i386/epel-release-6-8.noa ...

  4. LeetCode29.两数相除 JavaScript

    给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 示例 1: 输 ...

  5. java通过IO流复制文件

    package kimoji; import java.io.*; public class FileTest { public static void main(String[] args) thr ...

  6. 聊聊编程开发的数据库批量插入(sql)

    这里的批量插入,主要是支持SQL的大型存储数据库,本文以Mysql,Oracle,SqlServer,postgresql4类来说明,这大概是国内应用比较多的了.其余的应该可以按照这些去找.提到编程的 ...

  7. 安装mysql时出现initialize specified but the data directory has files in in.Aborting.该如何解决

    eclipse中写入sql插入语句时,navicat中显示的出现乱码(???). 在修改eclipse工作空间编码.navicate中的数据库编码.mysql中my.ini中的配置之后还是出现乱码. ...

  8. css中可以继承的属性

    声明 : 本文源于https://www.cnblogs.com/thislbq/p/5882105.html CSS中可以和不可以继承的属性   一.无继承性的属性 1.display:规定元素应该 ...

  9. Uncaught (in promise) DOMException: play() failed because the user didn't interact with the document first.

    最近在开发一个网站时,有个需要是 如果有新预警信息要在网页中播放提示音.页面打开会请求是否有新信息,有则播放提示音.在Chrome的最新浏览器中,播放会报错,控制台显示Uncaught (in pro ...

  10. mongo数据集合属性中存在点号(.)

    基本知识点: 1.似乎mongo3.6之前不允许插入带点(.)或美元符号($)的键,但是当我使用mongoimport工具导入包含点的JSON文件时,它工作正常. 2.在使用spring-data-m ...