2017-04-07 56 views
0

我知道這是可能的代碼隱藏,但改變那裏的selectcommand並綁定它會導致gridview刷新和排序問題,所以這不是我正在尋找的答案。在ASPX SqlDataSource SelectCommand中使用字符串變量,這可能嗎?

我已經合併了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 %>" /> 

我將具有使用命令的 「選擇ID,my_cat1,my_cat2,my_cat3,my_cat4,my_cat5,my_cat6」 部分約10 IF ELSE語句。

如果是代碼隱藏,我可以用上面的字符串創建一個變量,並將selectcommand改爲「」+ my_string +「FROM [my_db]。[dbo]。[my_table]」;

有沒有辦法在ASPX頁面上做到這一點?我嘗試過創建公共字符串,並使用SelectCommand =「<%= my_string%> FROM [my_db]。[dbo]。[my_table]」,但它似乎根本不起作用。

我知道人們可能會對安全含義和SQL注入感到疑惑,但是這個變量將被硬編碼,不允許用戶更改。我只是想簡化我的命令並清理我的代碼,所以如果我需要更改選定的項目,我只需要在一個變量中執行,而不是在10個不同的地方執行。

+0

您可能希望完全從SqlDataSource移開...查看[my answer](http://stackoverflow.com/questions/43279371/updatecommand-parameter-value-always-a-string/43280341#43280341)to這個其他問題。 – mason

+0

謝謝,但我沒有尋找替代數據實現,只是我的問題的答案。 –

+0

爲什麼不呢? SqlDataSource非常糟糕。 – mason

回答

0

最終,我能夠使用EXECUTE sp_executesql作爲我的selectcommand運行良好的動態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)是參數化的,並且僅基於代碼隱藏的靜態值。

+0

您可能想要將解決問題的代碼添加到此答案中,這將有助於其他遇到同樣問題的人員。 – milo526

相關問題