2016-03-21 14 views
1

Ich habe einen Code hinter Methode, die SqlDataSource-Objekt verwendet, um Daten aus der Datenbank abzurufen, wird dann als Datenquelle für meine Rasteransicht verwendet, um die Datensätze anzuzeigen. Ich muss meiner WHERE-Klausel meiner SelectCommand-Abfrage bedingt eine weitere Bedingung hinzufügen und die Daten über Parameter an die Abfrage übergeben. Wie mache ich das?Wie verwenden Sie parametrisierte Abfragen in SqlDataSource.SelectCommand in Code hinter?

SqlDataSource sds = new SqlDataSource(); 

sds.SelectCommand = "Select CustomerName, LoanNumber, LoanDate FROM Loan WHERE IsActive = 1 "; 

if (filterRecord != "All") { // DDL filter on page, all records by default 
    sds.SelectCommand += "AND LoanType = ??"; //this is where I need to parameterize my query 
} 

Ich dachte, so etwas wie

if (filterRecord != "All") { 
    sds.SelectCommand += "AND LoanType = @LoanType"; 
    sds.SelectParameters.Add("@LoanType", "Mortgage"); 
} 

Aber das scheint nicht zu funktionieren.

+0

'Aber das scheint nicht zu funktionieren. Was funktioniert nicht? Gibt es eine Ausnahme? – LarsTech

+0

Es heißt "Muss skalare Variable" @LoanType "deklarieren. – wizloc

+0

Haben Sie den' LoanType = ?? 'oder den' LoanType = @ LoanType'? – LarsTech

Antwort

1

ich zu einem SqlCommand Umschaltobjekt raten würde Ihre Abfrage zu definieren und Lesen der Datensätze mit einem SqlDataReader-Objekt. Sie können die Parameter auf Ihre Abfrage wie folgt mit etwas hinzufügen:

SqlCommand cmd = new SqlCommand(queryString, connection); 
cmd.Parameters.AddWithValue("@paramName", value); 

Anschließend können Sie das SqlDataReader an der Gitteransicht binden, wie Sie normalerweise, indem sie sie als Datenquelle zu deklarieren.

+0

Danke. Das ist tatsächlich, was ich gelandet bin Ich konnte nie herausfinden, wie man der SqlDataSource Parameter hinzufügt – wizloc

0

hielt ich nicht, dass Sie das Datasource-Objekt verwenden:

eine ASP-Parameter an die SQL-Datenquelle hinzufügen:

<asp:Parameter Name="LoanType" Type="String" DefaultValue="default" /> 

Ändern Sie den Befehl select an:

"Select CustomerName, LoanNumber, LoanDate FROM Loan WHERE IsActive = 1 AND (@LoanType="default" or LoanType [email protected])" 

Dann in Ihrem Code hinter dies tun:

if (filterRecord != "All") { 
    sds.SelectParameters("LoanType").DefaultValue="Mortgage" 
} 

Beschreibung: Sie müssen den SQL-Parameter im ASP-Webformular definieren, bevor Sie ihn im Code bearbeiten. Ich habe einen Parameter mit einem Dummy-Wert "default" definiert. Wenn Sie also den Parameter im Code nicht hinter dem Parameter @LoanType ändern ist gleich "default" string und der @ LoanType = "default" gibt für alle Zeilen den Wert true zurück und berücksichtigt nicht den LoanType = @ LoanType. Wenn Sie jedoch den Parameter im Code hinter dem @ LoanType = "default" ändern, wird false zurückgegeben und LoanType = @ LoanType für jede Zeile überprüft, was zu dem führt, was Sie wollen!

Meine alte Antwort: Das ist gut, wenn Sie nicht die SQL-Datenquelle verwenden, und Sie sind mit Ihrem SQL-Befehl

if (filterRecord != "All") { 
    SqlParameter Parameter = new SqlParameter(); 
    Parameter.ParameterName = "@LoanType"; 
    Parameter.SourceColumn = "LoanType"; 
    Parameter.SqlDbType = SqlDbType.NVarChar; 
    Parameter.Value = "Mortgage"; 

    sds.SelectCommand += "AND LoanType = @LoanType"; 
    sds.SelectParameters.Add(Parameter); 
} 
+0

Ich benutze die SQLDataSource im Code hinter, auch nicht auf der aspx Seite. Irgendwelche Ratschläge? – wizloc

+0

OK. Ich änderte die Antwort. Überprüfen Sie die neue – Amir