<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT ProductName, ProductPrice FROM Product WHERE (@type LIKE '%' + @seach + '%')">
<SelectParameters>
<asp:QueryStringParameter Name="type" QueryStringField="type" />
<asp:QueryStringParameter Name="seach" QueryStringField="search" />
</SelectParameters>
</asp:SqlDataSource>
问题是我无法获得任何返回结果,因为og @type
。
如果我将@type
更改为ProductName
它可以正常工作
但我希望@type
值是一个可由用户选择的动态值
并使用QueryString
传入。我该如何解决这类问题?
答案 0 :(得分:2)
在这种情况下,您可以动态SQL。
将选择查询更改为存储过程,例如 -
CREATE PROCEDURE usp_GetData
@type VARCHAR(100),
@search NVARCHAR(max)
AS
BEGIN
DECLARE @SQLQuery AS NVARCHAR(max)
SET @SQLQuery = 'SELECT ProductName, ProductPrice FROM Product WHERE ( ['
+ @type + '] LIKE ''%' + @search + '%'')'
PRINT @SQLQuery
EXECUTE sp_executesql @sqlquery
END
然后使用上述程序获取数据
您可以查看:http://www.codeproject.com/Articles/20815/Building-Dynamic-SQL-In-a-Stored-Procedure
答案 1 :(得分:0)
如果您要检查的字段很少,则可以使用
之类的内容"SELECT ProductName, ProductPrice FROM Product
WHERE (@type = 'ProductName' and ProductName LIKE '%' + @search + '%')
OR (@type = 'ProductDescription' and ProductDescription LIKE '%' + @search + '%')
OR (@type = 'Metadata' and Metadata LIKE '%' + @search + '%')"