2016-07-07 16 views
-1

Ich habe diese Funktion eine parametrisierte SELECT-Abfrage ausführen:Ein Ausdruck von Nicht-Typ boolean in einem Kontext angegeben, wo eine Bedingung zu erwarten ist, paramerization DbCommand in C#

public string LookUp(string sColuna, string sTabela, string sWhere) 
{ 
    string[] Parameters = { "@column", "@table", "@where" }; 
    var comando = @"SELECT @column FROM @table WHERE @where"; 
    var cmd = this.OraConnection.CreateCommand(); 
    cmd.CommandText = comando; 
    cmd.Parameters.AddRange(Parameters.Select(item => { var param = cmd.CreateParameter(); param.ParameterName = item; param.Value = 1; return para; }).ToArray()); 
    cmd.Parameters[0].Value = sColuna; 
    cmd.Parameters[1].Value = sTabela; 
    cmd.Parameters[2].Value = sWhere; 
    DbDataReader Reader = cmd.ExecuteReader(); 
    return Reader.GetString(0); 
} 

, wenn es die DbDataReader Reader = cmd.ExecuteReader(); erreicht er wirft mir eine Ausnahme sagen: Zusätzliche Informationen: Ein Ausdruck eines nicht-booleschen Typs, der in einem Kontext angegeben ist, in dem eine Bedingung erwartet wird, in der Nähe von "@where". Kann man keinen Parameter in der where-Klausel haben?

Jetzt habe ich geändert, es zu:

var cmd = this.OraConnection.CreateCommand(); 
      cmd.CommandText = string.Format("SELECT {} FROM {} WHERE", sColuna, sTabela, sWhere); 
      DbDataReader Reader = cmd.ExecuteReader(); 
      return Reader.GetString(0); 
+0

A Where-Klausel in einen Booleschen Ausdruck auswerten müssen ... z Wo xyz = @wo – Kevin

+0

Kann ich sowas nicht haben wie WHERE @etwas = @etwas? Ich gebe das an die sWhere var: UserName = 'Joao' – LikeIfYouCaredAboutMyName

+0

ist '@ where' enthält Zeichenfolge wie' WHERE val = val' ?? –

Antwort

0

String sWhere ist der Parameter benötigt einen Booleschen Ausdruck auszuwerten

[Der Beginn des Query] WHERE [Etwas] = [Ihr Parameter]
[Der Anfang Ihrer Abfrage] WHERE [Etwas] = @ wo

Für @where Wert = sWhere

Wenn Sie eine komplexe Antwort über den Aufbau WHERE-Klausel wollen, haben einen Blick auf diese Antwort about the same question

+0

ok Ich verstehe, was du meinst, aber kannst ' Ist das [Etwas] auch ein Var? Kann es ein Parameter sein, oder muss es repariert werden? – LikeIfYouCaredAboutMyName

+0

Wenn Sie dem Link folgen, sehen Sie, dass es nicht direkt ein Parameter sein kann, während Sie es versuchen, aber Sie können eine alternative Option mit dem Objekt als Parameter für das linke Element des booleschen Ausdrucks ausarbeiten. Grundsätzlich kann man eine parametrisierte Where-Klausel konstruieren, aber nicht die Art, wie man es versucht;) – JeromeVOB

+0

Ok ich habe die Antworten gelesen und bestätige, dass es aber nicht für meinen Fall funktioniert, weil ich jetzt nicht möglich bin, was der Feldname bedeutet sei so, dass ich es nicht reparieren kann. Alle Parameter in der Abfrage können sich ändern, da dies sowohl für Oracle und SQL als auch für eine Vielzahl von Benutzern und Datenbanken funktionieren soll. Gibt es noch andere Alternativen? Ich könnte nur den Befehl als Ganzes übergeben, aber dann wäre ich nicht in der Lage zu parametrieren. Stellt die Select-Anweisung ein Risiko hinsichtlich der SQL-Injektion dar? – LikeIfYouCaredAboutMyName