关于ExecuteNonQuery执行的返回值(SQL语句、存储过程)
因为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
另外还有输出参数,可以是任意类型。
概念别搞混了。
假设有存储过程如下:
|
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)ASBEGIN SET NOCOUNT ON; set @r = @x + @y; return 0;END |
调用方式:
|
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语句、存储过程)的更多相关文章
- C#中 如何执行带GO的sql 语句
C#中是不允许执行带GO的sql 语句的, 如何做呢? 思路就是将带GO的sql语句转化为分段执行, 但在同一事务内执行. 扩展方法是个很不错的主意, 但是尽量不要影响原来的cmd的一些东东, 如 c ...
- Mysql 定位执行效率低的sql 语句
一.通过MySQL慢查询日志定位执行效率低的SQL语句. MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysq ...
- 监控SQL:执行表中所有sql语句、记录每个语句运行时间(3)
原文:监控SQL:执行表中所有sql语句.记录每个语句运行时间(3) 通过执行一个 带参数的存储过程 exec OpreateTB('OpreateUser','IsRun') 更新表的数据 表 ...
- 执行最慢的SQL语句
---执行最慢的SQL语句SELECT top 20(total_elapsed_time / execution_count)/1000 N'平均时间ms',total_elapsed_time/1 ...
- Selenium2学习-036-WebUI自动化实战实例-034-JavaScript 在 Selenium 自动化中的应用实例之六(获取 JS 执行结果返回值)
Selenium 获取 JavaScript 返回值非常简单,只需要在 js 脚本中将需要返回的数据 return 就可以,然后通过方法返回 js 的执行结果,方法源码如下所示: /** * Get ...
- 在Hive中执行DDL之类的SQL语句时遇到的一个问题
在Hive中执行DDL之类的SQL语句时遇到的一个问题 作者:天齐 遇到的问题如下: hive> create table ehr_base(id string); FAILED: Execut ...
- 执行次数最多的sql语句
执行次数最多的sql语句 * FROM ( creation_time N'语句编译时间' ,DB_NAME(st.dbid) AS dbname ,OBJECT_NAME(st.objectid) ...
- 【hibernate spring data jpa】执行了save()方法 sql语句也执行了,但是数据并未插入数据库中
执行了save()方法 sql语句也执行了,但是数据并未插入数据库中 解决方法: 是因为执行了save()方法,也执行了sql语句,但是因为使用的是 @Transactional 注解,不是手动去提 ...
- SQL Server存储过程执行一个带返回值(output)的存储过程
语法如下: --存储过程一CREATE PROCEDURE testProc @out VARCHAR(500) OUTPUT AS BEGIN SET @out='操作成功' RETURNEND - ...
随机推荐
- element-ui : <el-table> 按钮点击操作阻止@row-click
描述:<el-table> 点击行时,会跳转到一个详细信息页面, 但是同时这一行也有编辑和删除按钮. 问题: 在点击按钮时,@row-click事件也被触发了,而我并不想触发 row-cl ...
- 《metasploit渗透测试魔鬼训练营》靶机演练之第五章实战案例KingView 6.53版本CVE-2011-0406漏洞
在一个笔记本上开两个虚拟机有点卡,而且太麻烦,就把metasploit的目标靶机放在别的机器上了,ip自己配置了一下, 目标主机:192.168.137.254 入侵机:192.168.137.253 ...
- 3.C++和C混合编程
最近经常看到头文件中有 #ifdef __cplusplus extern "C" { #endif ....... #ifdef __cplusplus } #endif 这样的 ...
- .NET完全手动搭建三层B/S架构
简介:三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(WebUI).业务逻辑层(BusinessLogicLayer).数据访问层(DataAc ...
- linux crontab 计划任务设置 (简结)
命令: crontab -l 查看当前运行的计划任务 crontab -e 编辑当前运行计划任务 修改或添加 VIM编辑器用法:按 i 键进入编辑文本状态, esc 结束编辑状态 , :wq ...
- 用JavaScript中jQuery编写放大镜效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- mysql如何批量删除数据表
-- 注意这里的`是英文输入法状态下,主键盘数字1的左边的键.drop table `user`,`c_class`;
- PHP 扩展 trie-tree, swoole过滤敏感词方案
在一些app,web中评论以及一些文章会看到一些*等,除了特定的不显示外,我们会把用户输入的一些敏感字符做处理,具体显示为*还是其他字符按照业务区实现. 下面简单介绍下业务处理. 原文地址:小时刻个人 ...
- urllib库使用方法 2 parse
import urllib.parse #url.parse用法包含三个方法:quote url, unquote rul, urlencode#quote url 编码函数,url规范只识别字母.数 ...
- django定义模型类-14
目录 1. 定义 字段类型 约束类型 django的模型类定义在应用下的 models.py 文件中. 模型类继承自 django.db.models 包下的 Model 类. 新创建应用 book ...