【问题标题】:Using a string variable in an ASPX SqlDataSource SelectCommand, is this possible?在 ASPX SqlDataSource SelectCommand 中使用字符串变量,这可能吗?
【发布时间】:2017-09-03 03:27:23
【问题描述】:

我知道这在代码隐藏中是可能的,但是在那里更改 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”部分。

如果是代码隐藏,我可以用上面的字符串创建一个变量,并将选择命令更改为 "" + my_string + " FROM [my_db].[dbo].[my_table]";

有没有办法在 ASPX 页面上执行此操作?我尝试创建公共字符串并使用 SelectCommand=" FROM [my_db].[dbo].[my_table]" 但它似乎根本不起作用。

我知道人们可能会对安全隐患和 SQL 注入感到疑惑,但此变量将是硬编码的,并且不允许用户更改。我只是想简化我的命令并清理我的代码,所以如果我需要更改选定的项目,我只需要在一个变量中进行,而不是 10 个不同的地方。

【问题讨论】:

  • 您可能希望完全摆脱 SqlDataSource...请参阅 my answer 到另一个问题。
  • 谢谢,但我不是在寻找替代数据实现,只是为了回答我的问题。
  • 为什么不呢? SqlDataSource 很糟糕。

标签: c# sql asp.net selectcommand


【解决方案1】:

最终,我能够使用 EXECUTE sp_executesql 构建一个动态 SQL 查询作为运行良好的选择命令。

编辑:在下面添加示例。

示例代码(未经测试,可能需要调整,因为我的生产代码完全不同)

  <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) 是参数化的并且仅基于来自代码隐藏的静态值。

【讨论】:

  • 您可能希望将解决您问题的代码添加到此答案中,这将帮助其他有同样问题的人。
猜你喜欢
  • 1970-01-01
  • 2010-10-03
  • 2010-11-27
  • 2013-03-31
  • 1970-01-01
  • 2016-11-11
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多