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> 

Das Problem ist, kann keine Rückkehr Ergebnisse erhalten, die alle wegen @type, wenn ich die @type zu Product ändern, seine Werke in Ordnung, , weil ich die @type wollen Wert wird dynamischer Wert, der durch Benutzer, wählen kann und ich überlasse es, indem ich queryString verwende. Wie kann ich diese Art von Problem lösen?asp.net SqlDataSource Select LIKE mit Abfrage-Zeichenfolge mit

Antwort

2

Sie können in diesem Fall dynamische SQL.

Ändern Sie die Auswahlabfrage in gespeicherte Prozedur sagen -

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 

Dann obige Verfahren verwenden, um die Daten zu erhalten

Sie einen Blick auf nehmen: http://www.codeproject.com/Articles/20815/Building-Dynamic-SQL-In-a-Stored-Procedure

+0

verwenden Gibt es andere Möglichkeiten, dass einfach in sqldatasource bearbeiten? –

+1

ich denke nicht – Thakur

0

Wenn Sie einige Felder müssen überprüfen Sie, könnten Sie etwas wie

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