ASP.NET SqlDataSource使用QueryString和LIKE的SelectCommand

3
<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>

问题在于我无法得到任何返回结果,因为 @type 的问题。如果我将 @type 改为 ProductName,那么它就可以正常工作,但是我希望 @type 值是一个动态值,可以由用户选择,并通过使用 QueryString 传递。我该如何解决这种问题?
2个回答

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

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 + '%')"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接