在存储过程中,使用return 返回一个值在外边怎么接受请各位大侠 把接受的代码写详细些,谢谢了本人新手

解决方案 »

  1.   

     没用过 你用output 不行吗 ?
      

  2.   

    完整的例子
    ASP.NET中如何调用存储过程-
    用ASP.NET与SQL SERVER可是缘份最好了,稍大的程序一般第一先考虑的是SQL SERVER,只是一些很考虑经济的才使用ACCESS等了。用SQL SERVER,为了使数据库的效率更好,一般都会才取存储过程,因存储过程执行速度快,并且可以实现一些高级的查询等功能。比如传入一些数据参数,但执行的SQL过程可能不同等。下面就来个例子,建立一新的角色,要求角色的名字不能重复,以下是一存储过程CREATE PROCEDURE sp_AccountRole_Create@CategoryID int,
    @RoleName nvarchar(10),
    @Description nvarchar(50),
    @RoleID int output
    AS
        DECLARE @Count int    -- 查找是否有相同名称的记录
        SELECT @Count = Count(RoleID) FROM Account_Role WHERE
            RoleName = @RoleName    IF @Count = 0        INSERT INTO Account_Role
            (CategoryID, RoleName, Description) valueS
            (@CategoryID, @RoleName, @Description)        SET @RoleID = @@IDENTITY        RETURN 1
    GO执行存储过程的C#过程:SqlConnection DbConnection = new SqlConnection(mConnectionString);
    SqlCommand command = new SqlCommand( "sp_AccountRole_Create", DbConnection );
    DbConnection.Open(connectString);
    // 废置SqlCommand的属性为存储过程
    command.CommandType = CommandType.StoredProcedure;command.Parameters.Add("@CategoryID", SqlDbType.Int, 4);
    command.Parameters.Add("@RoleName", SqlDbType.NVarChar, 10);
    command.Parameters.Add("@Description", SqlDbType.NVarChar, 50);
    command.Parameters.Add("@RoleID", SqlDbType.Int, 4);
    // 返回值
    command.Parameters.Add("Returnvalue",
                SqlDbType.Int,
                4,        // Size
                ParameterDirection.Returnvalue,
                false,        // is nullable
                0,        // byte precision
                0,        // byte scale
                string.Empty,
                DataRowVersion.Default,
                null );command.parameters["@CategoryID"].value = permission.CategoryID;
    command.parameters["@RoleName"].value = permission.PermissionName;
    command.parameters["@Description"].value = permission.Description;
    // 可以返回新的ID值
    command.parameters["@RoleID"].Direction = ParameterDirection.Output;int rowsAffected = command.ExecuteNonQuery();
    int result = command.parameters["Returnvalue"].value;
    int newID = command.parameters["@RoleID"].value;可以得到三个值,分别是行影响值,存储过程返回值,新的ID值 
      

  3.   


    --创建存储过程  实现存/取钱
    if exists(select * from sysobjects where name='proc_takeMoney')
    drop procedure proc_takeMoney
    go
    create procedure proc_takeMoney
    @cardID varchar(19),               -- 卡号
    @tMoney money,                     -- 交易金额
    @Ttype varchar(10),                -- 存钱/取钱
    @pass varchar(12)=NULL             -- 密码
    as
    print '交易正在进行,请稍候.....'
    if(@Ttype = '取款')
     begin
    if(@pass=(select pass from cardInfo where cardID=@cardID))                              -- 判断密码是否正确
    begin
      if (@tMoney<(select balance from cardInfo where cardID=@cardID))                      -- 判断余额是否够取
          begin 
    insert into transInfo(transType,cardID,transMoney) values ('支取',@cardID,@tMoney)  --交易表增加记录
        update cardInfo set balance=balance-@tMoney where cardID=@cardID --更新
    print '交易成功,交易金额:'+convert(varchar(10),@tMoney)
      end
      else
    declare @balance money
    select @balance=balance from cardInfo where cardID=@cardID
    print '交易失败,余额不足!'
    print '卡号:'+convert(varchar(10),@cardID)+'  余额:'+convert(varchar(10),@balance)
    end
    else
         print '密码不正确!'
     return 0
     end
    else     -- 存款 --
     begin
          insert into transInfo(transType,cardID,transMoney) values ('存入',@cardID,@tMoney)    -- 交易表增加记录
      update cardInfo set balance=balance+@tMoney where cardID=@cardID                                     -- 更新账户余额
     end--创建存储过程 实现转账
    if exists(select * from sysobjects where name='proc_openAccount')
    drop procedure proc_openAccount
    go
    create procedure proc_openAccount
    @card1 char(19),                         -- 卡1
    @card2 char(19),                         -- 卡2
    @outmoney money,                         -- 交易金额
    @pass varchar(10)=NULL                   -- 密码
    -- 创建事物:防止余额不足时 交易失败
    as
    begin transaction
     exec proc_takeMoney @card1,@outmoney,'取款',@pass
     exec proc_takeMoney @card2,@outmoney,'存款'-- 接收返回值
    declare @returninfo int
    exec @returninfo = proc_takeMoney
    SET @returninfo  if (@returninfo>1)
       rollback tran
     else
      begin
       commit tran
       print '转账成功!'
      end 接受返回值的地方有问题, 
      

  4.   

    CREATE PROCEDURE Categoriestest4
    @id int output,
    @CategoryName nvarchar(15)
    AS
    insert into dbo.Categories 
    (CategoryName,[Description],[Picture])
    values (@CategoryName,'test1',null)
    set  @id = @@IDENTITY
    GO 
    SqlConnection sqlconn = new SqlConnection(conn);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = sqlconn;
            cmd.CommandText = "Categoriestest4";
            cmd.CommandType = CommandType.StoredProcedure;
            // 创建参数
            IDataParameter[] parameters = {
                    new SqlParameter("@Id", SqlDbType.Int,4) ,
                    new SqlParameter("@CategoryName", SqlDbType.NVarChar,15) ,
                };
            // 设置参数类型
            parameters[0].Direction = ParameterDirection.Output;  // 设置为输出参数
            parameters[1].Value = "testCategoryName";
            // 添加参数
            cmd.Parameters.Add(parameters[0]);
            cmd.Parameters.Add(parameters[1]);        sqlconn.Open();
            // 执行存储过程并返回影响的行数
            Label1.Text = cmd.ExecuteNonQuery().ToString();
            sqlconn.Close();
            // 显示影响的行数和输出参数
            Label1.Text += "-" + parameters[0].Value.ToString() ;