以下是部分代码,其中Session和其他变量都是已定义过的,而且我的错误和Session、变量无关:代码的作用是分页:string cmdStr = "Select Top @RecordOfPage * From Customer Where CustomerID Not In (Select Top @NotInRecordCount CustomerID From Customer Order By CustomerID) Order By CustomerID";
        SqlCommand cmd = new SqlCommand(cmdStr,new SqlConnection(connStr));
        SqlParameter parameter = new SqlParameter("@RecordOfPage", SqlDbType.Int);
        parameter.Direction = ParameterDirection.Input;
        parameter.Value = (int)Session["RecordOfPage"];
        cmd.Parameters.Add(parameter);
        parameter = new SqlParameter("@NotInRecordCount", SqlDbType.Int);
        parameter.Direction = ParameterDirection.Input;
        parameter.Value = (int)Session["RecordOfPage"] * ((int)Session["CurrentPage"] - 1);
        cmd.Parameters.Add(parameter);        DataTable dt = new DataTable();
        SqlDataAdapter adp = null;
        try
        {
            cmd.Connection.Open();
            adp = new SqlDataAdapter(cmd);
            adp.Fill(dt);   /////////这句异常:"@RecordOfPage附近错误,@NotInRecordCount附近错误"
            Repeater1.DataSource = dt;
            Repeater1.DataBind();
        }
        catch
        {
            Response.Write(@"<script language=javascript>alert('发生错误!')</script>");
        }
        finally
        {
        }
我将cmdStr定义改为直接拼接字符串后就好了,不知为何?
以下是直接拼接字符串后的代码:
string cmdStr = "Select Top 10 * From Customer Where CustomerID Not In (Select Top 10 CustomerID From Customer Order By CustomerID) Order By CustomerID";

解决方案 »

  1.   

    用cast(@RecordOfPage as varchar(10))试试
      

  2.   

    select top n
    n 不能使用参数
      

  3.   

    我以前好象也遇到类似的问题,我是这样解决的:在SQL语句中,表Customer中如果没有字段名@RecordOfPage,则@RecordOfPage本身就是作为一个参数,直接可以用cmd.Parameters["@RecordOfPage"].Value=(int)Session["RecordOfPage"];如查@RecordOfPage处是用“?”代替,则需用cmd.Parameters.Add(parameter);指令显式增加参数。不知对否,请试一试。