/// <summary>
        /// 获得数据列表(查询条件)——排序
        /// </summary>
        public DataSet GetListToPage(string strV_CompName, int pageIndex, int pageSize, string sortExpression, string direction)
        {
            StringBuilder strSql = new StringBuilder();            strSql.Append("select * ");
            strSql.Append(" FROM tbl_Company ");
            strSql.Append(" where I_OperTpye=1");            if (strV_CompName != "")
            {
                strSql.Append(" and V_Name like @V_Name");
            }
            if (sortExpression != "")
            {
                strSql.Append(" order by @hi");
            }
            if (direction != "")
            {
                strSql.Append(" @hello");
            }
            SqlParameter[] parameters = {
                    new SqlParameter("@V_Name", SqlDbType.VarChar),
       new SqlParameter("@hi", SqlDbType.VarChar),
                   new SqlParameter("hello", SqlDbType.VarChar),
};
            parameters[0].Value = "%" + strV_CompName + "%";
            parameters[1].Value =  sortExpression.ToString();
            parameters[2].Value = direction.ToString();
            return DBUtility.DbHelperSQL.GetCurrentPage(strSql.ToString(),pageIndex,pageSize,"onetable",parameters);
        }为什么order by 后面的条件:用SqlParameter参数设置之后会报错啊,而使用“+”连接符连接却不报错。
但是规定不能使用+号连接。
是不是我设置的哪里有问题啊请遇到过类似情况的朋友帮看一下。

解决方案 »

  1.   

                if (sortExpression != "") 
                { 
                    strSql.Append(" order by @hi"); 
                } 
                if (direction != "") 
                { 
                    strSql.Append(" @hello"); 
                } 
    首先你这个有逻辑问题,如果第一个if不执行 生成的sql会报错2 向你这样的sql需要动态执行用 exec(sql)
      

  2.   

    ORDER BY ' + @orderby + '
    用存储过程
      

  3.   

    还有 new SqlParameter("@hello", SqlDbType.VarChar), 
      

  4.   

    调试 看看strSql.ToString()的值 
    到SqlServer中执行一下 看看能不能执行
      

  5.   


    这里的@hi 和@hello是为了让大家看的方便,原来不是这样的字符。我刚才改的时候忘加@了。请问改怎么设置才对呢?
      

  6.   

         
                if (direction != "") 
                { 
                    strSql.Append(sortExpression.Equals("")?"order by @hello":",@hello"); 
                }         
      

  7.   

    第 1 行: '@direction' 附近有语法错误。 
      

  8.   

    1。错误信息是:第 1 行: '@hello' 附近有语法错误。2.把第二个参数注释掉:报:
    ORDER BY 子句所标识的第 1 个 SELECT 项包含了一个变量,该变量位于标识列位置的表达式中。只有排序依据表达式引用的是列名时,才允许在该表达式中使用变量。 
      

  9.   

    不行的啦,除非你用一楼的方法exec(sql)
    要不order by 子句就不要用参数,直接用String构造。
      

  10.   

    用Exec? 
    这句代码:
      return DBUtility.DbHelperSQL.GetCurrentPage(strSql.ToString(),pageIndex,pageSize,"onetable",parameters); 怎么用exec????