如何通过URL传递参数到ASP的SqlDataSource实现SQL单条记录查询
你给出的写法完全不可行,存在语法错误和严重的安全风险,正确实现方式如下:
原有写法的问题
- 语法不合法:ASP.NET 不支持嵌套的
<%# %>表达式,你写的两层嵌套标签在页面解析阶段就会直接报错,无法运行。 - 存在SQL注入高危漏洞:直接把 URL 参数拼接进 SQL 语句,攻击者可以通过构造特殊参数值执行任意SQL操作,比如删库、篡改数据,绝对不能在生产环境使用这种写法。
正确实现方案
SqlDataSource 本身内置了 QueryString 类型的参数源,直接用参数化查询即可,不用手动拼接取值:
<asp:SqlDataSource ID="dsRecipe" runat="server" ConnectionString="<%$ ConnectionStrings:theConnectionString %>" SelectCommand="SELECT TOP 1 * FROM [theTable] WHERE itemNum = @itemNum"> <SelectParameters> <asp:QueryStringParameter Name="itemNum" QueryStringField="num" Type="Int32" /> </SelectParameters> </asp:SqlDataSource>
说明
SelectCommand里用@参数名做占位符,不用自己拼接参数值<SelectParameters>里指定参数来源是 QueryString 的num字段,同时指定参数类型(这里假设itemNum是数字类型,就填Int32,如果是字符串就改为String),框架会自动做类型校验和参数化处理,完全避免SQL注入风险- SQL 里加
TOP 1可以强制只返回单条记录,匹配你的需求
内容的提问来源于stack exchange,提问作者BuffClass
相关产品推荐
相关产品推荐

