create proc P_GetOperator
(@Condition varchar(1000),@PageSize int
)
as
exec('select '+@PageSize+' * from tbl_Operator '+@Condition+'')
go我在asp.net为上述存储过程传查询条件参数
"where OperatorNO like '"+this.textbox1.Text+"%'"
为什么查询不出结果?结果发现在SQL语句执行存储过程时,要这样才可以exec p_GetOperator 5,'where OperatorNo like ''张%'''
为什么要二个单引号?

解决方案 »

  1.   

    在存储过程中''表示一个',这个和\\表示\是一个道理。
    你最好把"where OperatorNO like '"+this.textbox1.Text+"%'" 最终的值拿到数据库里查一下,看有没有,看看this.textbox1.Text是不是‘张’看看有没有空格。
    'select '+@PageSize+' * from tbl_Operator '+@Condition+'',为什么后面还要+''?
      

  2.   

    因为这是自定义varchar的参数哦,不加+号存储过程都报错
      

  3.   

    "where OperatorNO like '"+this.textbox1.Text+"%'" 这个最终拿到数据库中根本执行存储过程都报错
      

  4.   

    呵呵,楼主遇到的问题就是典型的sql注入问题楼主在sql语句中使用了拼接的方式,那么在传入参数的时候如果包含特殊字符自然会影响sql语句的结构以楼主的语句作为例子exec('select '+@PageSize+' * from tbl_Operator '+@Condition+'') 在接收参数后变成了exec('select '+@PageSize+' * from tbl_Operator where OperatorNO like '张%'') 请注意语句结构'select '+@PageSize+' * from tbl_Operator where OperatorNO like '语句到此断了
    加上后面的张%'') 就成了非法sql语句
      

  5.   


    解决办法
    使用两个' 替换一个'
    使用两个'    数据库会认为是表示字符 ' 而不是sql语句拼接中用来断句的符号'所有'都要替换成''
      

  6.   

    唉,忍不住还是想说一句
    建议楼主好好看看 防sql注入 的相关文章,还有 安全sql语句 的相关文章