环境sql server 2005, vs2005写了一个查询的sql语句, 
比如select * from emp order by @sortMethod,用SqlDataAdapter返回DataSet, 想把排序方式做为一个参数写进去,即
mySqlDataAdapter.SelectCommand.Parameters.Add("@sortMethod", SqlDbType.VarChar).Value = myPageSetting.SortMethod;但是总报sql出错,跟踪了下,发现就问题就在order by的参数上,怀疑变成了
select * from emp order by 'desc'怎么处理,各位有好的解决办法吗?

解决方案 »

  1.   

    都传过去了,过滤掉单引号吧哈哈
    也可以用StringBuilder自己组装字符串,应该就行
      

  2.   

    mySqlDataAdapter.SelectCommand.Parameters.Add("@sortMethod", SqlDbType.VarChar).Value = "myPageSetting.SortMethod"; 
      

  3.   


    mySqlDataAdapter.SelectCommand.Parameters.Add("@sortMethod", SqlDbType.VarChar).Value = "myPageSetting.SortMethod";
    这样不行啊
      

  4.   

    @sortMethod存储过程里面他是什么类型的
      

  5.   


    sqlBuilder.Append("         and rownum between @startRow and @endRow ");
    sqlBuilder.Append("         order by EnterpriseID ");
    sqlBuilder.Append(             myPageSetting.SortMethod);//mySqlDataAdapter.SelectCommand.Parameters.Add("@sortMethod", SqlDbType.VarChar).Value = myPageSetting.SortMethod;
    这样可以,但是感觉很不爽,
    因为我一大堆变量在下面一起Parameters.Add的,
    单单这一个要放到sqlBuilder里面去,太不完美了
      

  6.   


    啊哈,这个你也想得出来啊?!你的参数查询不是都是用在常量数值上吗?你这里可是字段名啊!如果一定要通过参数提交一个变量,那么你的sql中就只能出现类似这样的语句了declare @sql nvarchar(100)
    set @sql='select * from emp order by '+@sortMethod
    .......
      

  7.   


    没用存储过程,我想传 asc 或者 desc 进sql中去,
    但是mySqlDataAdapter.SelectCommand.Parameters.Add()方法总给这两个关键字加引号
      

  8.   

    不用那么复杂
    用返回的dataTable.select("字段",“desc ”);
    ok了,而且性能好
      

  9.   

    通过dataview实现排序或把排序方式传入存储过程实现