定义存储过程: 
CREATE PROCEDURE countnumbers 
@number1 int  output 
AS 
Declare  @SQL  NVarchar(500) 
Select  @SQL='select  @number1=count(stu_no)  from ing  where total_score>=90 
Exec  sp_executesql  @SQL 
GO 
c#中调用存储过程的代码: 
//执行存储过程 
  string cnnString = "Data Source=XIAO;Initial Catalog=ingonline;Integrated Security=True"; 
    SqlConnection con = new SqlConnection(cnnString); 
  SqlCommand com = new SqlCommand(); 
  con.Open(); 
    com.CommandType = CommandType.StoredProcedure; 
    //给出存储过程的名字 
  com.CommandText = "countnumbers"; 
                //输出参数 
                com.Parameters.Add("@number1", SqlDbType.Int); 
                com.Parameters["@number1"].Direction = ParameterDirection.Output; 
              com.Connection = con; 
              com.ExecuteNonQuery();
                label9.Text = com.Parameters["@number1"].Value.ToString().Trim(); 
              
             
出错信息:必须声明变量@number1
请各位高手帮忙 
              

解决方案 »

  1.   

    不知道你为什么还拼接一下SQL语句,SQL 2005,2008中直接像下边这样写就好
    CREATE PROCEDURE countnumbers 
    @number1 int  output 
    AS 
    BEGIN
       select  @number1=count(stu_no)  from ing  where total_score>=90 
    END
      

  2.   

        @number1 int   output   
        AS   
              begin   
                Declare   @sql   nvarchar(4000)   
                set   @sql='select  @number1=count(stu_no)  from ing  where total_score>=90'   
                Execute   sp_executesql   @sql,N'@number1 int output'
                return   
              end   
      

  3.   

    估计是拼sql的时候出错了
    可以 先试试你的存储过程能不能正常运行
      

  4.   

    回kkun_3yue:上面语句的简化了的,因为我在程序中用到的表名是变量,需要这样写。请回答一下我的问题吧,谢谢哈
      

  5.   

    回wuyq11:这样还是出现错误,被准备语句 '(@number1 int output)select  @number1=count(stu_no)   from  ing  ' 需要参数 @number1,但未提供该参数。
      

  6.   

    大概是这句select  @number1=count(stu_no)  from ing  where total_score>=90 不对吧,谁可以解决一下?
      

  7.   

    CREATE PROCEDURE countnumbers 
    @number1 int  output 
    AS 
    Declare  @SQL  NVarchar(500) 
    Select  @SQL='select  @a=count(stu_no)  from ing  where total_score>=90 
    exec sp_executesql @sqls,N'@a int output',@number1 output 
    select @number1 
    GO--动态SQL语法
    3. 输出参数 
    declare @num int, 
            @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  8.   

    CREATE PROCEDURE countnumbers 
    @number1 int  output 
    AS 
    Declare  @SQL  NVarchar(500) 
    Select  @SQL='select  @a=count(stu_no)  from ing  where total_score>=90 '
    exec sp_executesql @sqls,N'@a int output',@number1 output 
    select @number1 
    GO
      

  9.   

    CREATE PROCEDURE countnumbers 
    @number1 int  output 
    AS 
    --Declare  @SQL  NVarchar(500) 
    Select @number1='select count(stu_no)  from ing  where total_score>=90'
    --Exec  sp_executesql  @SQL 
    GO