Laden...

Parameter in der Select-Anweisung

Erstellt von tomson456 vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.397 Views
T
tomson456 Themenstarter:in
23 Beiträge seit 2005
vor 18 Jahren
Parameter in der Select-Anweisung

Hallo,

ich hab folgendes Problem. Ich will in einer SELECT Anweisung einen Parameter verwenden, allerdings nicht im WHERE Teil sondern bei FROM. Ich hab in eine Datenbank mehrer gleiche Tabellen und will davon eine bestimmte wählen.

Hab bis jetzt folgendes probiert:


string table=Request.QueryString["id"];
oleDbSelectCommand1.Parameters.Add("@tab",table);
oleDbSelectCommand1.CommandText = "SELECT [IP-Nummer], Rechner, Beschreibung FROM [@tab]";

table wird über den Anhang an der URL befüllt. Die übergabe funktioniert auch richtig. Aber es kommt immer wieder die Fehlermeldung das die Tabelle nicht gefunden werden konnte.

Kann man auch in der FROM Klausel der SELECT-Anweisung Parameter verwenden?

Vielen Dank schonmal für eure Hilfe
gruss, Tom

D
462 Beiträge seit 2005
vor 18 Jahren

Hallo!

vielleicht liegts an den eckigen Klammern um den Parameter ... ich kenn das nur ohne!

mfg

F
529 Beiträge seit 2003
vor 18 Jahren

Das mit den eckigen Klammern funktioniert. Ich habe es zwar noch nie gesehen, aber ich werde mir auf alle Fälle merken, dass man die auch benutzen kann.

Sind sich die Tabellenstrukturen der unterschiedlichen Tabellen sehr ähnlich, wenn aus allen Tabellen das gleiche ausgewählt wird? Könntest du dann nicht eine ,,große`` Tabelle verwenden und andere Unterscheidungsmerkmale einbauen?

Ob der Parameter im From-Teil funktioniert kannst du da nachlesen:
http://msdn2.microsoft.com/en-us/library/ms188927(en-US,SQL.90).aspx
Aber ich wüsste nicht, warum das nicht auch gehen soll.

Besuchen sie das VisualC++ - Forum

4.207 Beiträge seit 2003
vor 18 Jahren

Die eckigen Klammern dienen im SQL-Server als Trennzeichen, wenn ich zum Beispiel einen Feldnamen mit einer Leerstelle darin habe ... oder einen Feldnamen mit einem Sonderzeichen (wie [IP-Adresse]) .... oder einen Feldnamen, der ein Schlüsselwort darstellt.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

4.207 Beiträge seit 2003
vor 18 Jahren

Ach ja, und PS: Parameter können meines Wissens nach nur für Felder eingesetzt werden, nicht für Tabellen oder sonstiges.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

T
tomson456 Themenstarter:in
23 Beiträge seit 2005
vor 18 Jahren

Hallo,

vielen Dank für eure Antworten. Das mit dem Parameter geht anscheinend wirklich nicht. Aber ich hab ne Lösung gefunden. Ich setze mir die SELECT Anweisung als String zusammen und übergebe sie der dem oleDbSelectCommand1.CommandText als variable.


string table=Request.QueryString["id"];
string select = "SELECT [IP-Nummer], Rechner, Beschreibung FROM ["+table+"]";
oleDbSelectCommand1.CommandText = select;

Damit funktioniert es.

Viele Grüße
Thomas

D
155 Beiträge seit 2005
vor 18 Jahren

Nur (grade bei Webanwendungen tötlich) kann es hierbei schnell zur SQL Injection kommen!!!

Ich weiß, manchmal denkt mal als Entwickler ein bisschen Optimistisch (wird schon nix passieren), passierts dann denkt man nach. Übrigens: Selbst über den Connectionstring kann man schon unerwartete Sachen machen.

So nun der Link nach der ganzen Moral:

SQL Injection

Gruß Christian

4.207 Beiträge seit 2003
vor 18 Jahren

Dem kann ich mich nur anschließen .... der oben gezeigte Code ist ganz ganz ganz ganz ganz ganz furchtbar schlecht 😉. Schlecht im Sinne von unsicher.

Wenn Du auf einen Querystring dafür zurückgreifen willst, prüfe IMMER gegen eine Liste von vordefinierten Werten, um zu verhindern, dass jemand irgendwelchen Mist einschleust. Entspricht der hereinkommende Wert keinem erwarteten, melde einen Fehler.

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de