如何调用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返回存储过程的值
ExecuteNonQuery 返回的是最后一条SQL语句影响的行数。如果你想得到存储过程中的Return,那存储过程中,你必须写Return 0或Return 1。 Return 只能是int 另外还有输出参数,可以是任意类型。概念别搞混了。假设有存储过程如下:CREATE PROCEDURE [dbo].[sp_add](x int,y int,r int output )AS BEGIN...

SQL Server 如何执行 带参数的 存储过程
“conn”:为链接字符 “CommandType.StoredProcedure”:表示要执行的SQL存储过程类型 “sqlexec”:要执行的SQL存储过程 “myparm”:为传递的参数,它需要参数的初始化、赋予参数名称、设定类型、长度和值等 (4)当ExecuteNonQuery()执行select 查询时,结果总是返回-1。ExecuteNonQuery()执行Update、Inser...

c# 处理存储过程output返回值的问题
而ExecuteNonQuery是根据条件全查出来了放在你本地内存,就像一个方法执行完一样,所以return也执行了,也就有值。返回值我一般写在添加等操作的存储过程里,查询没必要即查询结果还要在附带一个返回值。不如只查结果,返回值不就是通过一些计算得来的吗,完全可以在代码中计算出来。比如我添加的存储过程是...

如何获取ExecuteNonQuery里Select语句的值
SQL Server中存储过程的返回值不是通过return语句返回的(return语句是在用户自定义函数中使用的),而是通过存储过程的参数来返回,在定义存储过程的参数时使用关键字output来指定此参数是返回值。 而在调用存储过程时

...我要执行一条带参数有一个string返回值的存储过程应如何执行...
具体的传递看你需要带入什么参数 db.AddParameter(cmd, "@m_id", DbType.String, 50, ParameterDirection.ReturnValue, "", DataRowVersion.Current, null); \/\/string返回值的设置 db.ExecuteNonQuery(cmd); \/\/执行 至于你的第二个问题,本人才疏学浅,不知道解决!

C#高级编程:调用存储过程[1]
这几个命令设置了每个参数的值 然后执行存储过程 该过程没有返回值 因此使用ExecuteNonQuery就足够了 命令参数可以像前面那样依次设置 或者按照名称来设置 ( ) 记录的删除 下一个存储过程可用于从数据库中删除一个Region记录 CREATE PROCEDURE RegionDelete (@RegionID INTEGER) AS SET NOCOUNT OFF...

C#调用梦数据库存储过程方法
= int.Parse(txtEnter.Text);\/\/执行存储过程 cmd.ExecuteNonQuery();\/\/获取返回值 var ret = cmd.Parameters["@return"].Value;\/\/获取出参 string price = cmd.Parameters["@DPrice"].Value.ToString();if ((int)ret > 0){ textBox1.Text = price;} } \/\/关闭连接 conn.Close();} ...

cmd.ExecuteNonQuery为啥返回1
您好,SqlCommand.ExecuteNonQuery 方法 对连接执行 Transact-SQL 语句并返回受影响的行数。返回值 受影响的行数。备注: 您可以使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句,在不使用 DataSet 的情况下更改数据库...

c#调用oracle存储过程,返回2个值
{ if(ParameterDirection.Output == op.Direction){ result.Add(op);} cmd.Parameters.Add(op);} cmd.CommandText = ProcedureName;cmd.ExecuteNonQuery();for(int i = 0; i < result.Count; i ++){ outresult.Add(((OracleParameter)result[i]).Value);} \/\/返回值在outresult对象中 ...

ASPNET怎样调用一个存储过程(带参数的)?
ASPNET怎样调用一个存储过程(带参数的)使用的是Ado.NET中的相关的数据库操作方法。Ado.NET连接数据库有以下几个步骤:1:使用配置的数据库连接串,创建数据库连接 Connection 对象 2:构建操作的sql语句 3:定义command对象 4:打开数据连接 5:执行命令 举一个例子,删除操作 public int DeleteStudent...

相似回答