关于executenonquery的信息
如何调用ExecuteNonQuery返回存储过程的值
ExecuteNonQuery 返回的是最后一条SQL语句影响的行数。
如果你想得到存储过程中的Return,那存储过程中,你必须写Return 0或Return 1。 Return 只能是int
另外还有输出参数,可以是任意类型。
概念别搞混了。
假设有存储过程如下:
CREATE PROCEDURE [dbo].[sp_add]
(
@x int,
@y int,
@r int output
)
AS
BEGIN
SET NOCOUNT ON;
set @r = @x + @y;
return 0;
END
调用方式:
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()怎么用
报错是由于执行cmd.ExecuteNonQuery()这个错误的,在这里就有执行错误,系统就会将调试终止,提示你出错,后边的代码根本没有执行,怎么会实现你的报错呢,你这样不能够抓取系统报错,一般都是用try catch来抓取报错的
try
{
conn.Open();
if(cmd.ExecuteNonQuery()==1)
label2.Text="数据录入成功";
}
catch
{
lable2.Text="数据录入失败";
}
执行try中代码出现错误都会执行catch{}中的代码,你原本那样抓取系统报错不可取
ExecuteNonQuery()返回值的几种情况
ExecuteNonQuery()方法主要用户更新数据,通常它使用Update,Insert,Delete语句来操作数据库,其方法返回值意义:对于 Update,Insert,Delete语句执行成功是返回值为该命令所影响的行数,如果影响的行数为0时返回的值为0,如果数据操作回滚得话返回值为-1。
(回滚的意思:删除由一个或多个部分完成的事务执行的更新。为在应用程序、数据库或系统错误后还原数据库的完整性,需要使用回滚。回滚泛指程序更新失败, 返回上一次正确状态的行为)
对于这种更新操作 用我们平时所用的是否大于0的判断操作应该没有问题而且比较好,但是对于其他的操作如对数据库结构的操作,如果操作成功时返回的却是-1,这种情况跟我们平时的思维方式有点差距所以应该好好的注意了。
例如对数据库共添加一个数据表的Create操作,当创建数据表成功时返回-1,如果操作失败的话(如数据表已经存在)往往会发生异常,所以执行这种操作时最好用try--catch--语句来容错。
简单意思是用sql语句创建数据库,创建数据表等等一些对数据库结构的操作最好不要用大于0来判断是否操作成功。
扩展资料
c#数据执行方法:
1、使用ExecuteReader()操作数据库,执行查询操作的非常好的方法。
ExecuteReader比DataSet而言,DataReader具有较快的访问能力,并且能够使用较少的服务器资源。DataReader对象提供了游标形式的读取方式,当从结果行中读取了一行,则游标会继续读取到下一行。
通过read方法可以判断数据是否还有下一行,如果存在数据,则继续运行返回true,如果没有数据,则返回false。DataReader可以提高执行效率,基于序号的查询可以使用DataReader。
使用ExecuteReader()操作数据库,通常情况下是使用ExecuteReader()进行数据查询操作,使用ExecuteReader()查询数据能够提升查询效率,而如果需要进行数据库事务处理的话,ExecuteReader()并不是一个理想的选择。
2、使用ExecuteNonQuery(),ExecuteScalar()操作数据库,执行增删改操作的利器
ExecuteNonQuery()通常情况下为数据库事务处理的首选,当需要执行插入,删除,修改等操作时,首选ExecuteNonQuery(),ExecuteNonQuery()执行成功返回的是一受影响的行数,对于"Create Table"和"Drop Table"语句,返回值是0。
而对于其他类型的语句,返回值是-1,ExecuteNonQuery()操作数据时,可以不使用DataSet直接更改数据库中的数据。
ExecuteScalar()方法也可以用来执行SQL语句,但是executescalar()执行SQL语句后返回值与ExecuteNonQuery()并不相同,executescalar()方法的返回值的数据类型是object。
如果执行的SQL语句是查询语句,则返回结果是查询后的第一行第一列,如果执行的SQL语句不是一个查询语句,则会返回一个未实例化的对象,必须通过类型装换来显示。
一般情况下,ExecuteNonQuery()操作后返回的是一个值,而executescalar()操作后则会返回一个对象,executescalar()经常使用当需要返回单一值时的情况。例如当插入一条数据信息时,需要马上知道刚才插入的值,则可以使用executescalar()方法。
“cmd.ExecuteNonQuery()”是什么意思?
这是关于?Sql?语句中的语句,cmd.ExecuteNonQuery?会有一个返回值,将值赋值给整型?count,返回受影响的行数值。
执行SQL句,返回受影响行数(判断执行SQL句是否成功)。
sql 语句是对数据库进行操作的一种语言。结构化查询语言简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
创建数据库-CREATE DATABASE database-name。
删除数据库-drop database dbname。
创建新表-create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)。
删除新表-drop table tabname。
增加一个列-Alter table tabname add column col type。
添加主键-Alter table tabname add primary key(col)。
删除主键-Alter table tabname drop primary key(col)。