我知道这在代码隐藏中是可能的,但是在那里更改selectcommand并绑定它会导致gridview问题的刷新和排序,所以这不是我正在寻找的答案。
我已经为我的SQL参数添加了参数化语句,但是我需要更改查询的其他部分,我认为它不会作为参数化语句。
示例:
<asp:SqlDataSource ID="SQLSolutionSource" runat="server"
SelectCommand="SELECT id, my_cat1, my_cat2, my_cat3, my_cat4, my_cat5, my_cat6 FROM [my_db].[dbo].[my_table]"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>" />
我将有大约10个IF ELSE语句使用命令的“SELECT id,my_cat1,my_cat2,my_cat3,my_cat4,my_cat5,my_cat6”部分。
如果是代码隐藏,我可以用上面的字符串创建一个变量,并将selectcommand更改为“”+ my_string +“FROM [my_db]。[dbo]。[my_table]”;
有没有办法在ASPX页面上执行此操作?我已经尝试创建公共字符串并使用SelectCommand =“&lt;%= my_string%&gt; FROM [my_db]。[dbo]。[my_table]”但它似乎根本不起作用。
我理解人们可能会对安全性和SQL注入感到疑惑,但是这个变量将被硬编码,并且不允许用户更改。我只是想简化我的命令并清理我的代码,所以如果我需要更改所选项目,我只需要在一个变量中进行,而不是在10个不同的地方。
答案 0 :(得分:0)
最终,我能够使用EXECUTE sp_executesql构建一个动态SQL查询作为我的selectcommand工作得很好。
编辑:在下面添加了示例。
示例代码(未经测试,可能需要调整,因为我的生产代码完全不同)
<asp:SqlDataSource ID="SQLSolutionSource" runat="server"
SelectCommand="
declare @perm_source varchar(30)
set @perm_source = @perm_type
declare @select_query Nvarchar(400)
SET @select_query = 'SELECT id, my_cat1, my_cat2, my_cat3, my_cat4, my_cat5, my_cat6 FROM ' + @perm_source
EXECUTE sp_executesql @select_query
"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>" />
现在有些人可能认为FROM'+ @perm_source容易受到注入攻击,但在我的情况下它不是,因为变量(@perm_type)是参数化的,并且仅基于代码隐藏的静态值。