2009-07-28 4 views
0

Ich verwende eine SqlDataSource und um zu vermeiden, lange Abfragen direkt in meinem Code zu schreiben, dachte ich, ich könnte eine Abfrage-Klasse erstellen, die die Abfrage, die ich möchte, als Zeichenfolge zurückgibt. Ich habe den folgenden Code ausprobiert, aber ich bekomme nur "Server-Tags dürfen keine <% ...%> Konstrukte enthalten."SqlDataSource set SelectCommand dynamisch

Bevor ich gespeicherte Prozeduren verwendete, aber mein Webhosting erlaubt das nicht, also das ist, wenn ich über die Query-Klassenlösung nachdachte. Ich muss auch hinzufügen, dass ich im Codebehind keine Datenbindung machen möchte.

Gibt es eine Möglichkeit, dies zu tun?

<asp:SqlDataSource ID="DS" 
     runat="server" 
     DataSourceMode="DataSet" 
     ConnectionString="<%$ ConnectionStrings:conn %>" 
     ProviderName="MySql.Data.MySqlClient" 
     SelectCommand="<% Query.getTestQuery() %>" 
     > 
    </asp:SqlDataSource> 

Antwort

0

Verwenden Sie möglicherweise eine ObjectDataSource. Auf diese Weise können Sie in Ihrem Objekt Ihre dynamische Abfrage durchführen.

Andernfalls können Sie den SelectCommand während der SqlDataSource-Ereignisauswahl in Ihrem Code-Behind ändern. Dann können Sie den SelectCommand nach Belieben ändern.

1

Dies ist in ASP.NET nicht möglich. Code in <% %> Tags dient zum Ausführen von beliebigem Code, nicht zum Festlegen von Eigenschaftswerten. Code in <%= %> Tags dient zum Rendern auf den Ausgabestrom. Code in <%# %> ist für Datenbindung, die ähnlich zu dem ist, was Sie erreichen möchten, aber es ist nicht das Gleiche. Der Code in <%$ %> steht für Ausdrucksbindungen, die jedoch zu früh im Lebenszyklus der Seite ausgeführt werden und daher in Ihrem Szenario wahrscheinlich nicht funktionieren.

Verwenden von ObjectDataSource ist eine Möglichkeit, hier zu gehen, da es zu diesem Zeitpunkt nur Code ist, und Ihr Code kann tun, was es will, basierend auf dem Zustand der Seite.

Die Verwendung einer abgeleiteten SqlDataSource ist eine weitere Option. Erstellen Sie ein Steuerelement, das von SqlDataSource abgeleitet wird, und überschreiben Sie dessen OnInit-Methode. In der Methode OnInit können Sie den SelectCommand dynamisch so einstellen, dass er basierend auf dem Status der Seite die gewünschten Funktionen ausführt.