C#中使用带返回值的存储过程

Posted on 2007-01-09 13:21 寒夜听雨 阅读(4310) 评论(2)   编辑 收藏 网摘 所属分类: CSharp
例如在向数据库添加新数据时,需要检测是否有重复
本例介绍如何把这个检测的过程放在存储过程中,并用程序调用检测的结果做出反应。
存储过程如下:
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

Feedback

#1楼    回复  引用    

2007-01-10 14:22 by PASS [未注册用户]
return 只能返回int型

可以用output参数

#2楼    回复  引用    

2007-05-24 17:01 by 過客 [未注册用户]
不建議用return 建議用output

转载于:https://www.cnblogs.com/ijunxiong/archive/2008/11/15/1334187.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值