数据库操作--获取存储过程的返回值

用SQL Server数据库写了个存储过程,代码如下

<span style="font-family:KaiTi_GB2312;font-size:18px;">create procedure proc_select
@id int
as
begin
if exists(select * from news where [email protected])
	return 1
else
	return 2
end
</span>

在C#中通过执行存储过程来获取返回值,但是返回的结果总是-1,纠结啊。在数据库中查询,是没有问题的。存储过程也正确。在数据库中测试改存储过程,也是没有问题的。

那到底是哪里错了呢?为什么会返回-1?

我的代码是这样的

<span style="font-family:KaiTi_GB2312;font-size:18px;">private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string conStr = "server=192.168.24.235;database=newssystem;uid=sa;pwd=1";
                SqlConnection conn = new SqlConnection(conStr);
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "proc_select";
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Connection = conn;
                conn.Open();
                SqlParameter sp = new SqlParameter("@id", "5");
                cmd.Parameters.Add(sp);
  textBox1.Text = cmd.ExecuteNonQuery().ToString ();
</span>

这样的话就相当于在SQL中是这样执行的

后来经过上网查询,如果数据库执行返回的是“命令已成功完成”,则返回的是-1,好吧。。。但是还有一种情况就是如果发生回滚,返回值也为 -1。这就不好玩了,那我怎么判断我的存储过程到底是不是执行成功了?到底怎样获取存储过程正确的返回值呢?

经过上网查询,原来加几行代码就可以了。

<span style="font-family:KaiTi_GB2312;font-size:18px;"> private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string conStr = "server=192.168.24.235;database=newssystem;uid=sa;pwd=1";
                SqlConnection conn = new SqlConnection(conStr);
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "proc_select";
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Connection = conn;
                conn.Open();
                SqlParameter sp = new SqlParameter("@id", "5");
                cmd.Parameters.Add(sp);
                SqlParameter returnValue = new SqlParameter("@returnValue", SqlDbType.Int);
               returnValue.Direction = ParameterDirection.ReturnValue;
                cmd.Parameters.Add(returnValue);
                cmd.ExecuteNonQuery();
                textBox1.Text = returnValue.Value.ToString();
                conn.Close();
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }
</span>

代码中加了一个返回参数,就成功解决了返回值的问题。哈哈~又进步了!

时间: 2024-08-05 19:34:32

数据库操作--获取存储过程的返回值的相关文章

利用SQLServer查询分析器获取存储过程的返回值,检查测试存储过程

1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况(1)如果通过查询分析器执行该存储过程,在显示栏中如果有影响的行数,则影响几行count就是几(2)如果通过查询分析器执行该存储过程,在显示栏中如果显示'命令已成功完成.'则count = -1;在显示栏中如果有查询结果,则count = -1总结:A.ExecuteNonQuery()该方法只返回影响的行数,如果没有影响

Entity Framework中对存储过程的返回值的处理

很早就开始注意到EF了,但一直没有机会用,换了工作后,第一个项目就使用EF6进行开发. 项目不是很大,EF完全可以胜任. 但是开发过程中,难免还是会遇到一些复杂的运算,需要频繁访问数据库. 此时,想到的比较简单的方式,就是使用存储过程,在存储过程中进行一定的运算,然后把运算的结果(一个查询结果)通过存储过程返回. 思路上完全没有问题,就直接建了一个存储过程,然后更新edmx.发现,更新后,EF中,生成的对这个存储过程的调用,返回结果却是“Int”??? 之前也有做过通过存储过程返回值,都是返回一

将存储过程的返回值赋给变量

1.OUPUT参数返回值 复制代码代码如下: CREATE PROCEDURE [dbo].[nb_order_insert](@o_buyerid int ,@o_id bigint OUTPUT)ASBEGINSET NOCOUNT ON;BEGININSERT INTO [Order](o_buyerid )VALUES (@o_buyerid )SET @o_id = @@IDENTITYENDEND 存储过程中获得方法: 复制代码代码如下: DECLARE @o_buyerid int

在Delphi中如何获得SQL中存储过程的返回值?

示例存储过程:create procedure proc_loginusername varchar(20),password varchar(20)asdeclare @result intselect @result=count(*) from loginuser where [email protected] and [email protected]if @result=0return 0return 1go Delphi代码:var ret:integer;......      wi

无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCreate()开始,直到调用onDestory()为止.Activity在onCreate()中设置所有“全局”状态以完成初始化. 而在onDestory()中释放所有系统资源.例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程, 而在onDestory()销

SqlServer 获得存储过程的返回值(参数返回),别玩了output

declare @dingdanid int declare @fanhuizhi int set @dingdanid = 1 exec 检测订单出库资格 @dingdanid ,@fanhuizhi output   (注意别忘了output否则返回值是NULL) select @fanhuizhi create proc dbo.检测订单出库资格 @dingdanID int,     @returnValue int output as -- 输入变量 订单编号 set @returnV

SqlServer和MySQL中存储过程out返回值处理C#代码

1.SqlServer中out处理 C#代码 #region"SqlServer中存储过程处理out返回值" //public void getdata() //{ // string str = " server=192.168.xxxx ;user id=xxx;[email protected]#;database=xxxxx_db;min pool size=4;max pool size=4;packet size=3072"; // SqlConnect

python asyncio 获取协程返回值和使用callback

Reference from: https://www.cnblogs.com/callyblog/p/11216961.html 1. 获取协程返回值,实质就是future中的task import asyncioimport timeasync def get_html(url): print("start get url") await asyncio.sleep(2) return "bobby" def callback(url, future): pri

shell获取函数的返回值

背景:定义了一个函数,比对本地和线上服务器集群数量差别,想要获取不同集群的个数.shell和其他语言的函数返回值还是差别挺大的. 定义一个函数 functionname(){ 操作内容 echo 输出内容 return 返回值 #返回值可有可不有 } 获得函数的返回值 1.函数默认是将标准输出传递出来,不是返回值. 所以如果直接调用functionname,实际上是将输出传递回来 例如: a=`functionname` 将函数functionname的标准输出传递给a 2.调用函数不需要加()