2016-08-26 1 views
1

Ich bin Daten aus der DB abrufen, wenn Benutzer Kontrollkästchen aktiviert. Werte im DB sind "JA" oder "NEIN". Sie funktionieren beide separat gut, aber wenn ich beide Kontrollkästchen anklicke, möchte ich alle Datensätze anzeigen, die beide Werte haben. Hier ist mein Code:Dynamic SQL - rufen Sie beide Checkbox-Werte aus DB

Using cmd As New OracleCommand() 

       Dim SQL As String = "Select * FROM MyTable " 
       Dim Bind_SQL As String = " Where " 

       Dim Activity As String 

       If ChkActiveYES.Checked = True Then 
        Activity = "YES" 
        SQL = String.Concat(SQL, Bind_SQL, " ACTIVE_PLAYER = :activity") 
        cmd.Parameters.Add(New OracleParameter("activity", Activity)) 
        Bind_SQL = " and " 

       ElseIf ChkActiveNO.Checked = True Then 
        Activity = "NO" 
        SQL = String.Concat(SQL, Bind_SQL, " ACTIVE_PLAYER = :activity") 
        cmd.Parameters.Add(New OracleParameter("activity", Activity)) 
        Bind_SQL = " and " 

       ElseIf ChkActiveYES.Checked = True And ChkActiveNO.Checked = True Then 
        Activity = "NO" 
        SQL = String.Concat(SQL, Bind_SQL, " ACTIVE_PLAYER = :activity") 
        cmd.Parameters.Add(New OracleParameter("activity", Activity)) 
        Bind_SQL = " and " 

        Activity = "YES" 
        SQL = String.Concat(SQL, Bind_SQL, " ACTIVE_PLAYER = :activity") 
        cmd.Parameters.Add(New OracleParameter("activity", Activity)) 
        Bind_SQL = " and " 

       End If 
End using 

Was fehlt mir hier?

Antwort

2

Es wird nicht zu diesem Teil:

... 
ElseIf ChkActiveYES.Checked = True And ChkActiveNO.Checked = True Then 

, weil es hier schon betritt:

If ChkActiveYES.Checked = True Then 

die Überprüfung Setzen von, wenn sowohl im ersten Teil Ihrer if-Anweisung überprüft .

+0

Ich habe diesen Teil nicht einmal bemerkt. Das wird das unmittelbare Problem sein, aber sobald das gelöst ist, wird meine Antwort relevant werden. – jmcilhinney

+0

Nicht so fließend mit "Oracle", aber er sagte, es funktioniert _individuell_, also dachte ich, das war das Problem. : D –

+0

danke Crush, es funktioniert jetzt. – LuckyLuke82

2

Wie kann jeder Datensatz einen ACTIVE_PLAYER-Wert von JA und NEIN haben? Es kann nicht, also wirst du keine Übereinstimmungen bekommen. Sie müssen OR verwenden, um diese beiden Kriterien zu kombinieren.

Außerdem fügen Sie denselben Parameternamen zweimal hinzu. Sie müssen zwei Parameter mit zwei verschiedenen Namen hinzufügen, wenn Sie zwei verschiedene Werte wünschen.

Ich würde vorschlagen, einen anderen Ansatz, der die Probleme sowohl Crush Sundae und ich habe angesprochen. Benutze einfach alle Werte die ganze Zeit und dann muss die SQL dynamisch sein, z.B.

cmd.CommandText = "SELECT * FROM MyTable WHERE (:p1 IS NOT NULL AND MyColumn = :p1) OR (:p2 IS NOT NULL AND MyColumn = :p2)" 
cmd.Parameters.Add("p1", OracleDbType.VarChar).Value = If(ChkActiveYES.Checked, "YES", CObj(DBNull.Value)) 
cmd.Parameters.Add("p2", OracleDbType.VarChar).Value = If(ChkActiveNO.Checked, "NO", CObj(DBNull.Value)) 
+0

Habe ich nicht bemerkt. Ja, es muss ein "OR" sein. Feld kann nicht gleichzeitig "JA" und "NEIN" sein. –

+0

Danke, Sie beide, ich habe als Antwort für die ersten, die gepostet, hinzugefügt, aber Sie waren gleichermaßen nützlich :). Es funktioniert jetzt gut. – LuckyLuke82