存储过程: 
CREATE PROCEDURE ch_CarBorneStat 

        @FormCode    varchar(50),--派车单号 
        @UserID      int,--用户ID 
        @IsAllowRide int output--是否允许该员工剩坐该车次(0不允许,1允许) 

AS 
Declare @Ride        int,--已乘坐人数 
        @Seat        int,--座位数量 
        @IsDown      int--该员工是否已经搭乘该车次 Select @Ride=Count(FormCode) 
From  Cheeda_CarBorne 
Where  FormCode=@FormCode Select @Seat=Number 
From  Cheeda_CarName 
Where  RegMark=(Select distinct RegMark From Cheeda_CarControl Where FormCode=@FormCode) Select @IsDown=Count(UserID) 
From  Cheeda_CarBorne 
Where  UserID=@UserID if(@Seat>@Ride and @IsDown <1) 
  select @IsAllowRide = 1 
else 
  select @IsAllowRide = 0 
GO 
CS文件 
protected bool IsHitching(string FormCode) 
    { 
        return true; 
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["SqlString"])) 
        { 
            using (SqlCommand cmd = new SqlCommand("ch_CarBorneStat", conn)) 
            { 
                try 
                { 
                    cmd.Connection.Open(); 
                    cmd.CommandType = CommandType.StoredProcedure; 
                    cmd.Parameters.AddWithValue("@FormCode", FormCode).Direction = ParameterDirection.Input; 
                    cmd.Parameters.AddWithValue("@iUserID", Session["uid"].ToString()).Direction = ParameterDirection.Input; 
                    cmd.Parameters["@IsAllowRide"].Direction = ParameterDirection.Output; 
                    cmd.ExecuteNonQuery(); 
                    int err = (int)cmd.Parameters["@IsAllowRide"].Value;                     if (err == 0) 
                    { 
                        return false; 
                    } 
                } 
                catch 
                { 
                    Response.Write(" <script>alert('系统错误,请与管理员联系!');window.close(); </script>"); 
                } 
                finally 
                { 
                    cmd.Connection.Close(); 
                    cmd.Dispose(); 
                    conn.Dispose(); 
                } 
            } 
        } 
    } 
为什么我无法获得返回的值?

解决方案 »

  1.   

    http://support.microsoft.com/default.aspx?scid=kb;en-us;310070
      

  2.   

    cmd.Parameters["@IsAllowRide"].Direction = ParameterDirection.Output; 
    改成:
    cmd.Parameters.Add(
                    new SqlParameter("@IsAllowRide", SqlDbType.Int, 4, ParameterDirection.Output,
                    false, 0, 0, string.Empty, DataRowVersion.Default, null));
      

  3.   

    http://topic.csdn.net/u/20081230/16/e4f74e61-3d9d-43a6-a325-ac4a2d4528f2.html你不是刚发了一个贴子吗?
      

  4.   

    有两种可能性:
    1.应该是存储过程出了问题,所以没有返回值。你可以使用print @xx类型的语句把变量的返回值打印出来看看。
    2.程序上出了问题,因为你采用了多个select语句,这样会生成多个dataset,所以你要找对结果集才行。“Select @Seat=Number 
    From  Cheeda_CarName 
    Where  RegMark=(Select distinct RegMark From Cheeda_CarControl Where FormCode=@FormCode) 

    这样的写法好像是有问题的,你试着把它付给@s,然后执行exec @s试试
      

  5.   

    CS文件
    SqlParameter prmName = new SqlParameter("@IsAllowRide ", SqlDbType.Int, 4);                 
    prmName.Direction = ParameterDirection.Output;                
    cmd.Parameters.AddWithValue(prmName);       int total = = Convert.ToInt16(prmName.Value);            
      

  6.   

    谢谢各位,问题解决了,代码如下: 
    CS文件 
    /// <summary> 
        /// 检查该次车辆是否允许乘坐,0为不允许,1为允许 
        /// </summary> 
        /// <param name="FormCode"> </param> 
        /// <returns> </returns> 
        protected bool IsHitching(string FormCode) 
        { 
            string err = "1"; 
            using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["SqlString"])) 
            { 
                using (SqlCommand cmd = new SqlCommand("ch_CarBorneStat", conn)) 
                { 
                    try 
                    { 
                        cmd.CommandType = CommandType.StoredProcedure; 
                        cmd.Parameters.AddWithValue("@FormCode", FormCode); 
                        cmd.Parameters.AddWithValue("@UserID", Session["uid"].ToString());                     SqlParameter pRet = new SqlParameter("@ret", SqlDbType.Int, 4); //定义返回值参数 
                        pRet.Direction = ParameterDirection.ReturnValue; 
                        cmd.Parameters.Add(pRet); 
                        cmd.Connection.Open();// conn.Open(); 
                        cmd.ExecuteNonQuery(); 
                        //取得存储过程返回的值 
                        err = pRet.Value.ToString(); 
                        conn.Close(); 
                    } 
                    catch 
                    { 
                        Response.Write(" <script>alert('系统错误,请与管理员联系!');window.close(); </script>"); 
                    } 
                    finally 
                    { 
                        cmd.Connection.Close(); 
                        cmd.Dispose(); 
                        conn.Dispose(); 
                    } 
                } 
            } 
            if (err == "1") 
                return true; 
            else 
                return false; 
        } 存储过程
    CREATE PROCEDURE ch_CarBorneStat 

            @FormCode    varchar(50),--派车单号 
            @UserID      int                  --用户ID 

    AS 
    Declare @Ride        int,--已乘坐人数 
            @Seat        int,--座位数量 
            @IsDown      int--该员工是否已经搭乘该车次 Select @Ride=Count(FormCode) 
    From  Cheeda_CarBorne 
    Where  FormCode=@FormCode Select @Seat=Number 
    From  Cheeda_CarName 
    Where  RegMark=(Select distinct RegMark From Cheeda_CarControl Where FormCode=@FormCode) Select @IsDown=Count(UserID) 
    From  Cheeda_CarBorne 
    Where  UserID=@UserID 
    And    FormCode=@FormCode if(@Seat>@Ride and @IsDown <1) 
      begin 
        return 1--是否允许该员工剩坐该车次(0不允许,1允许) 
      end 
    else 
      begin 
        return 0 
      end 
    GO 
      

  7.   

    你是说方法不能返回两个值吗?返回的是bool类型,还想返回个int类型可以用 out参数,比如out int nID