给参数赋值(高手进)

maowenyong825 2008-07-06 07:44:28
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 ''张%'''
为什么要二个单引号?
...全文
71 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
brz97 2008-07-06
  • 打赏
  • 举报
回复
唉,忍不住还是想说一句
建议楼主好好看看 防sql注入 的相关文章,还有 安全sql语句 的相关文章
brz97 2008-07-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 brz97 的回复:]
呵呵,楼主遇到的问题就是典型的sql注入问题

楼主在sql语句中使用了拼接的方式,那么在传入参数的时候如果包含特殊字符自然会影响sql语句的结构

以楼主的语句作为例子

exec('select '+@PageSize+' * from tbl_Operator '+@Condition+'')

在接收参数后变成了

exec('select '+@PageSize+' * from tbl_Operator where OperatorNO like '张%'')

请注意语句结构

'select '+@PageSize+' * from tbl_Operator…
[/Quote]

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

所有'都要替换成''
brz97 2008-07-06
  • 打赏
  • 举报
回复
呵呵,楼主遇到的问题就是典型的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语句

maowenyong825 2008-07-06
  • 打赏
  • 举报
回复
"where OperatorNO like '"+this.textbox1.Text+"%'" 这个最终拿到数据库中根本执行存储过程都报错
maowenyong825 2008-07-06
  • 打赏
  • 举报
回复
因为这是自定义varchar的参数哦,不加+号存储过程都报错
万小萌 2008-07-06
  • 打赏
  • 举报
回复
在存储过程中''表示一个',这个和\\表示\是一个道理。
你最好把"where OperatorNO like '"+this.textbox1.Text+"%'" 最终的值拿到数据库里查一下,看有没有,看看this.textbox1.Text是不是‘张’看看有没有空格。
'select '+@PageSize+' * from tbl_Operator '+@Condition+'',为什么后面还要+''?

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧