.net 接收存储过程的返回值 。。。。

Posted on 2009-06-10 20:26 且行且思 阅读(...) 评论(...) 编辑 收藏

例如在向数据库添加新数据时,需要检测是否有重复
本例介绍如何把这个检测的过程放在存储过程中,并用程序调用检测的结果做出反应。
存储过程如下
 
CREATE PROCEDURE DInstitute_Insert
@InstituteNO nvarchar(6),@InstituteName nvarchar(40)
 AS
declare @return int,@count int
if(ltrim(rtrim(@InstituteName))='' or ltrim(rtrim(@InstituteNO))='')
 select @return=3--返回3表示提交的数据有空值
else
begin
 select @count=count(1) from DInstitute where InstituteNO=@InstituteNO
 if(@count>0)
  select @return=1--返回1表示编号有重复
 else
 begin 
  insert into DInstitute (InstituteNO,InstituteName) values  (@InstituteNO,@InstituteName) 
  if(@@error>0)
   select @return=2--返回2表示数据操作错误
  else
   select @return=0--返回0表示数据操作成功
 end
end
return @return
GO

其中DInstitute 是一个学院信息表。只有InstituteNO(学院编号)、InstituteName(学院名称)两个字段。
在C#中调用本存储过程的代码如下:

//执行插入操作
            SqlCommand com1 = new SqlCommand("DInstitute_Insert", DBcon);
            if (com1.Connection.State == ConnectionState.Closed)
                com1.Connection.Open();
            com1.CommandType = CommandType.StoredProcedure;
            com1.Parameters.Add(new SqlParameter("@InstituteNO",SqlDbType.NVarChar,6));
            com1.Parameters.Add(new SqlParameter("@InstituteName", SqlDbType.NVarChar, 40));
            com1.Parameters.Add(new SqlParameter("@return", SqlDbType.Int));
            com1.Parameters["@return"].Direction = ParameterDirection.ReturnValue;
            com1.Parameters["@InstituteNO"].Value = t_NO.Text;
            com1.Parameters["@InstituteName"].Value = t_name.Text;
            try
            {
                com1.ExecuteScalar();
            }
            catch(SqlException ee)
            {
                DB.msgbox("操作失败!"+ee.Message.ToString());
                return;
            }
            finally
            {
                com1.Connection.Close();
            }
            string temp = com1.Parameters["@return"].Value.ToString();
            //返回0表示数据操作成功
            //返回1表示编号有重复   
            //返回2表示数据操作错误 
            //返回3表示提交的数据有空值
            switch (temp)
            {
                case "0":
                    DB.msgbox("添加成功!");
                    break;
                case "1":
                    DB.msgbox("编号有重复!");
                    break;
                case "2":
                    DB.msgbox("数据操作错误!");
                    break;
                case "3":
                    DB.msgbox("提交的数据有空值!");
                    break;
            }
            Binding(); //刷新datagrid

----------------------------------------------  补充其它方法。

System.Data.SqlClient.SqlConnection scon = new System.Data.SqlClient.SqlConnection("server=Netangel;uid=etopsUS;pwd=etops;database=etops");
System.Data.SqlClient.SqlCommand scom = new System.Data.SqlClient.SqlCommand("",scon); scon.Open();
scom.CommandText="p_CorpClassAdd";
scom.CommandType = System.Data.CommandType.StoredProcedure;
scom.Parameters.Add(
                new SqlParameter("ReturnValue", SqlDbType.Int, 4,
                ParameterDirection.ReturnValue, false, 0, 0,
                string.Empty, DataRowVersion.Default, null)) //增加存储过程的返回值参数              scom.ExecuteNonQuery();
Response.Write(scom.Parameters["ReturnValue"].Value.ToString());  //输出存储过程
cmd = New SqlCommand("sp_del_office_byID", conn)
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("@OfficeID", SqlDbType.Int)
            cmd.Parameters("@OfficeID").Value = officeid_pk
            cmd.Parameters.Add("s", SqlDbType.Int)
            cmd.Parameters("s").Direction = ParameterDirection.ReturnValue
            cmd.ExecuteNonQuery()
            s = cmd.Parameters("s").Value

 通用的,输入输出参数各1个,调用时只要传入参数和存储过程名即可返回结果

//程序部分
public bool Execute(string Procname,SqlParameter []parameter,out string procout)
        {
            SqlConnection Sqlcon=new SqlConnection(Configuration.ConnectionString);
            SqlCommand Sqlcom=new SqlCommand();
            Sqlcon.Open();
            Sqlcom.Connection=Sqlcon;
            Sqlcom.CommandText=Procname;            
            Sqlcom.CommandType=CommandType.StoredProcedure;
            Sqlcom.Parameters.Add(new SqlParameter("@m_return",SqlDbType.Int));
            for(int i=0;i<parameter.Length;i++)
                Sqlcom.Parameters.Add(parameter[i]);
            Sqlcom.Parameters["@m_return"].Direction=ParameterDirection.ReturnValue;
            Sqlcom.ExecuteNonQuery();
            procout=Sqlcom.Parameters["@m_return"].Value.ToString();
            return true;
            } private void button2_Click(object sender, System.EventArgs e)
        {
            SqlParameter[] parameter={new SqlParameter("@ID",SqlDbType.Int)};
            parameter[0].Value=1;
            string UC;
            bool retVal=Execute("管理员_CheckExist",parameter,out UC);
            button2.Text=UC.ToString();
        } //存储过程部分
ALTER PROCEDURE dbo.管理员_CheckExist
@ID int
AS
declare @matchCount int
select @matchCount = count(*) from 管理员 where ID=@ID
return @matchCount

.net 接收存储过程的返回值 。。。。的更多相关文章

  1. JDBC和JPA调用储存过程 接收存储过程有返回值

    ============jdbc==========================================--java代码:一个输出参数--String connURL = null;Con ...

  2. SqlServer如何获取存储过程的返回值

    1.Output参数返回值 1 CREATE PROCEDURE [dbo].[upInformation]( 2 @age int , 3 @id bigint OUTPUT 4 ) 5 AS 6 ...

  3. 关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值

    关于ExecuteNonQuery执行存储过程的返回值 用到过ExecuteNonQuery()函数的朋友们在开发的时候肯定这么用过. if(cmd.ExecuteNonQuery("xxx ...

  4. C#获取执行存储过程的" 返回值"代码

    以下是C#代码: /// <summary> /// 执行存储过程,返回" 返回值" /// </summary> /// <param name=& ...

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

    1.存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种情况(1)如果通过查询分析器 ...

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

    示例存储过程:create procedure proc_loginusername varchar(20),password varchar(20)asdeclare @result intsele ...

  7. MSSQL - 存储过程Return返回值

    1.存储过程中不使用外部参数. 存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================== ...

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

    很早就开始注意到EF了,但一直没有机会用,换了工作后,第一个项目就使用EF6进行开发. 项目不是很大,EF完全可以胜任. 但是开发过程中,难免还是会遇到一些复杂的运算,需要频繁访问数据库. 此时,想到 ...

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

    1.SqlServer中out处理 C#代码 #region"SqlServer中存储过程处理out返回值" //public void getdata() //{ // stri ...

随机推荐

  1. [Luogu] P1441 砝码称重

    题目描述 现有n个砝码,重量分别为a1,a2,a3,……,an,在去掉m个砝码后,问最多能称量出多少不同的重量(不包括0). 题目分析 因为读错题WAWA大哭. 先dfs枚举选的砝码,满足条件时进行d ...

  2. MYSQL每日一学 - 时间间隔表达式

    参考链接:https://dev.mysql.com/doc/refman/5.7/en/expressions.html Interval表达式(Temporal intervals)的使用 Int ...

  3. 基于nvm的Node、NPM的版本管理(NPM permission error的解决)

    最近在使用npm过程中,发现全局安装总会遇到permission相关的错误,所以总是要在前面加sudo,还得不停输入密码. 懒惰使我进步,随手google了一下相关问题的解决方案,发现npm在官方文档 ...

  4. Jquery 引擎模板 -template详解

    一.1.jTemplate简介 jTemplates是一个基于Jquery的js模板引擎插件.该引擎全部代码由JS实现,可以配合AJAX,JSON一起协同工作,模板内容可以用JS代码,实现了活动更新, ...

  5. 使用idea搭建ssh项目

    参考: https://www.cnblogs.com/getchen/p/8036709.html 需要自己提前在数据库中建好表 然后连接数据库通过侧边栏的persistence来生成实体类和相应的 ...

  6. C51 原创电子琴 (蜂鸣器/计时器/中断/矩阵按键)

    需求分析 用C51的16个矩阵按键当作两个八度的琴键 按下时发出相应音调的声音,静态数码管显示相应音符的数字. 为了解锁更多曲目,两个多的琴键设计成#4,显示时加上小数点 下图分别为1和#4的显示,其 ...

  7. python virtualenv 管理工具 - virtualenvwrapper

    我们使用python virtualenv构建不同的python环境,python3 也加入了virtualenv 模块. virtualenvwrapper 提供了更便捷的 virtualenv环境 ...

  8. FIRST集合、FOLLOW集合、SELECT集合以及预测分析表地构造

    FIRST集合.FOLLOW集合.SELECT集合以及预测分析表地构造 FIRST集合的简单理解就是推导出的字符串的开头终结符的集合. FOLLOW集合简单的理解就对于非终结符后面接的第一个终结符. ...

  9. hihoCoder#1109 最小生成树三·堆优化的Prim算法

    原题地址 坑了我好久...提交总是WA,找了个AC代码,然后做同步随机数据diff测试,结果发现数据量小的时候,测试几十万组随机数据都没问题,但是数据量大了以后就会不同,思前想后就是不知道算法写得有什 ...

  10. CSU 1258 异或运算的线段树

    题目大意:在给定区间内对每个数的最后一个二进制为1的位将其修改为0,如果数本身已经为0了,就不做改变 输出给定区间的所有数的异或值 #include <cstdio> #include & ...