SQLCommand.ExecutenonQuery受影响的行数为什么会是-1?

一般我们在执行SQL语句的时候会调用ExecuteNonQuery();然后用一个声明一个int值接受这个受影响的行数,通过判断这个int值,我们可以得知这条SQL语句是否已经执行。通常我们判断就是这个int值大于0,因为我们知道,最起码受影响的行数是1,我们判断大于0就OK了,但是在运行时我们发现我们判断的语句的值为false,为什么呢?最后查了一下MSDN文档,看完解释就明白了。

对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1。


当我们用executenonquery执行select语句的时候于是就有了返回值为-1,回滚发生在事务中,如果执行SQL不包含事务,可以不做考虑。有事务的话,就要看看是哪里出错了,导致提交不成功,事务回滚。

下面看一下这个Demo

 1 private int Select(string selectqueryString,
 2     string connectionString)
 3 {
 4     using (SqlConnection connection = new SqlConnection(
 5                connectionString))
 6     {
 7         SqlCommand command = new SqlCommand(selectqueryString, connection);
 8         command.Connection.Open();
 9         int result=command.ExecuteNonQuery();
10         return result;
11     }
12 }
13 //result 的值为-1
14 private int Common(string queryString,
15     string connectionString)
16 {
17     using (SqlConnection connection = new SqlConnection(
18                connectionString))
19     {
20         SqlCommand command = new SqlCommand(queryString, connection);
21         command.Connection.Open();
22         int result= command.ExecuteNonQuery();
23         return result;
24     }
25 }
26 //这里的querystring为update insert delete语句
27 //result的值为受影响的行数
时间: 2024-08-25 16:14:36

SQLCommand.ExecutenonQuery受影响的行数为什么会是-1?的相关文章

SQL Server返回插入数据的ID和受影响的行数

首先看看数据库里面的数据(S_Id为自增长标识列): sql server 中返回上一次插入数据的ID(标识值)有三种方式: 第一种 @@IDENTITY: 1 insert into Student(S_StuNo,S_Name,S_Sex,S_Height) 2 values('013','卫庄','男','185'); 3 4 select @@IDENTITY -- 返回 17 @@IDENTITY可以返回当前连接所有范围内插入最后所生成的标识值(包括任何调用的存储过程和触发器).这个函

EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值

一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为  -1 ,sqlserver 里面  还没有测试过 using (var ctx = new MyDbContext()) { ctx.Database.ExecuteSqlCommand("UPDATE Person SET Name = 'Michael' WHERE PersonID = 1"); } 二 : Database.SqlQuery<T>   EF5执行sql查询语句

mysql 存储过程:提供查询语句并返回查询执行影响的行数

mysql 存储过程:提供查询语句并返回查询执行影响的行数DELIMITER $$ DROP PROCEDURE IF EXISTS `p_get_select_row_number`$$ CREATE PROCEDURE `test_cases`.`p_get_select_row_number`(IN p_select_sql VARCHAR(200), OUT p_count INT(8) ) BEGIN -- 声明 DECLARE cnt INT DEFAULT 0; DECLARE s

PostgreSQL获取操作影响的行数

如何来获取普通的操作所影响的行数,PostgreSQL里面有一个内置的变量DIAGNOSTICS与ROW_COUNT可以做到这一点. 一.环境: DB:9.4beta3 二.准备: postgres=# create table test(id int); CREATE TABLE postgres=# insert into test select generate_series(1,20); INSERT 0 20 postgres=# select * from test; id ----

sql语句影响的行数

全局变量@@RowCount 和函数RowCount_Big()用于返回上一条语句影响的行数.如果行数大于 20 亿,则需要使用ROWCOUNT_BIG(). 1,ROWCOUNT_BIG(): Following a SELECT statement, this function returns the number of rows returned by the SELECT statement. Following an INSERT, UPDATE, or DELETE statemen

.net 更新access数据库 影响的行数为0

在更新Access数据库的时候,明明传入的数据及参数类型都正确,但是一直更新不了,查看影响的行数一直为0 此原因为 C#操作Access数据库的时候更新的参数和条件参数要按照更新语句中的顺序进行设置,如果设置不正确,则会出现以上问题 1 update TPersonnel 2 set pname=@pname, 3 shenfhm=@shenfhm, 4 sex=@sex, 5 phone=@phone, 6 weixing=@weixing, 7 pid=@pid, 8 email=@emai

c#调用存储过程查询表并返回影响的行数

// 在此处放置用户代码以初始化页面 String DBConnStr; DataSet MyDataSet = new DataSet(); SqlDataAdapter DataAdapter = new SqlDataAdapter(); DBConnStr = "server=192.168.2.120,2433;database=DB_test;uid=sa;pwd=43g"; SqlConnection myConnection = new SqlConnection(DB

SQL Server 输出受影响的行

前期准备: create table Nums(X int); create table T(X int); go 目的:把对表Nums的insert | delete | update 反映到T表中. --------------------------------------------------------------------------------------------------------------------------------------------- insert

CI中获取读操作的结果集行数+获取写操作的影响行数

本质:读操作,用mysql_num_rows函数,写操作用mysql_affected_rows函数 mysql_num_rows() 返回结果集中行的数目.此命令仅对 SELECT 语句有效.要取得被 INSERT,UPDATE 或者 DELETE 查询所影响到的行的数目,用 mysql_affected_rows(). CI中的方法: 读操作,获取行数: $query->num_rows() 该函数将会返回当前请求的行数.在本例子中, $query 表示当前 SQL 所产生的请求结果对象: