SqlConnection  myConnection=new  SqlConnection(ConfigurationSettings.AppSettings["strConn"]);  
                       myConnection.Open();  
                       string  sql  =  @"SELECT  TOP  @number  *  
                                                     FROM  test  
                                                     WHERE  (testCourse  =  @courseId)  and  (pub  =  1)    
                                                         AND  (typeofproblem  =  @type)";  
                                   SqlCommand  myCommand=new  SqlCommand(sql,myConnection);  
                       
                                   myCommand.Parameters.Add("@courseId",SqlDbType.VarChar,20).Value=courseId;  
                       myCommand.Parameters.Add("@type",  SqlDbType.VarChar,  20).Value  =  type;  
                       myCommand.Parameters.Add("@number",  SqlDbType.Int,  10).Value  =number;  
                       
                       SqlDataReader  reader  =  myCommand.ExecuteReader();  
错误提示是:第  1  行:  '@number'  附近有语法错误。    
这个应该如何处理????  
如果要用存储过程实现的话需要写一些什么????  

解决方案 »

  1.   

    如果是存储过程的话大约是这样处理declare @str nvarchar(1000)set @str = 'SELECT  TOP ' + str(@number) + ' 其他语句'exec(@str)
      

  2.   

    我也不太明白 这样试试
    myCommand.Parameters.Add("@type",  SqlDbType.VarChar,  20);
    myCommand.Parameters.Add("@number",  SqlDbType.Int,  10);
    myCommand.Parameters["@type"].Value = type;
    myCommand.Parameters["@number"].Value = number;或sql="SELECT TOP "+ number +" * FROM ........................";
    这样 
      

  3.   

    yoya0303兄的方法小弟都试过了,还是同样的问题,如果在代码中如何将number变成字符串
    小弟用convert.tostring依然有错。请ff167大哥解答。谢谢!!!!
      

  4.   

    myCommand.Parameters.Add("@type",  SqlDbType.VarChar,  20);
    myCommand.Parameters.Add("@number",  SqlDbType.Int,  10);
    myCommand.Parameters["@type"].Value = type.ToString();
    myCommand.Parameters["@number"].Value = number.ToString();
    我刚才疏忽了
      

  5.   

    或sql="SELECT TOP "+ number.ToString() +" * FROM ........................";
    这样 
      

  6.   

    可能是你往myCommand.Parameters添加参数的次序问题,你按 @number, @courseId, @type的次序再试一次。 
    myCommand.Parameters.Add("@number",  SqlDbType.Int,  10).Value  =number;  
    myCommand.Parameters.Add("@courseId",SqlDbType.VarChar,20).Value = courseId;  
    myCommand.Parameters.Add("@type",  SqlDbType.VarChar,  20).Value  =  type;
      

  7.   

    恩 你也可以设置一个断点 看看执行 myCommand.ExecuteReader(); 时sql 变量的内容是什么
      

  8.   

    直接用@number作top的参数是不行的啦.也就是top xxx这段一定要是一个完整的字符串才可以(比如说top 10 可以但top @x是绝对不可以的)因此如果是存储过程里写的话,要写成我一开始写的那种模式(分页的存储过程会经常用到这种模式).如果是写sql命令的话,试下这样吧sql="SELECT TOP "+ number.ToString() +" 其他";但我一般都是直接写存储过程的.或者跟踪一下sql命令看组出来的字符串是否正确.