Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - Probleme mit Parametern


Talemantros - Do 06.11.14 17:18
Titel: Probleme mit Parametern
Hallo,
ich habe eine Abfrage, die leider kein Ergebnis liefert und ich sehe den Fehler gerade nicht.
Aus der aufrufenden Methode übergebe ich 2 String für die Spalte der Tabelle und den Suchwert.

Zum Beispiel:
Spalte = Bereich
Suchwert = Einstellungen

Die Methode, die dies mit Parametern verarbeiten soll


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
        public static DataTable LiefereHistorie(string suchfeld, string spalte)
        {
            DataTable dt = new DataTable();
            strSQL = "Select bereich, zuordnung1, zuordnung2, zeitstempel, beschreibung, mitarbeiter.benutzername from historie Join mitarbeiter "
                + "on historie.mitarbeiterid=mitarbeiter.mitarbeiterid "
                + "where ?spalte = ?suchfeld ";

            using (MySqlConnection conn = new MySqlConnection(connStr))
            {
                using (MySqlDataAdapter da = new MySqlDataAdapter(strSQL, conn))
                {
                    da.SelectCommand.Parameters.AddWithValue("?suchfeld", suchfeld);
                    da.SelectCommand.Parameters.AddWithValue("?spalte", spalte);

                    //MsgBox.MsgAusgabe.ShowError(spalte);
                    //MsgBox.MsgAusgabe.ShowError(suchfeld);

                    da.Fill(dt);
                }
            }
            return dt;
        }


Mit den Messageboxen habe ichmir die übergebenen Werte anzeigen lassen, ob diese korrekt sind.
Leider liefert dies kein Ergebnis.
Wenn ich nun aber die Werte direkt in den SQL String schreibe ohne Paramter zum Test dann liefert er das richtige Ergebnis.

Sieht jemand den Fehler bei den Parametern?


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
        public static DataTable GetHistorieForExectSearch(string suchfeld, string spalte)
        {
            DataTable dt = new DataTable();
            strSQL = "Select bereich, zuordnung1, zuordnung2, zeitstempel, beschreibung, mitarbeiter.benutzername from historie Join mitarbeiter "
                + "on historie.mitarbeiterid=mitarbeiter.mitarbeiterid "
                + "where bereich = 'Einstellungen' ";

            using (MySqlConnection conn = new MySqlConnection(connStr))
            {
                using (MySqlDataAdapter da = new MySqlDataAdapter(strSQL, conn))
                {
                    //da.SelectCommand.Parameters.AddWithValue("?suchfeld", suchfeld);
                    //da.SelectCommand.Parameters.AddWithValue("?spalte", spalte);

                    //MsgBox.MsgAusgabe.ShowError(spalte);
                    //MsgBox.MsgAusgabe.ShowError(suchfeld);

                    da.Fill(dt);
                }
            }
            return dt;
        }


Der letzte funktioniert richtig.

Es kommt kein Fehler oder so, er liefert halt nur eine leeres DataTable.

Danke

Gruß
Daniel


Th69 - Do 06.11.14 17:25

Die SQL-Parameter funktionieren nur für Werte nicht für Tabellenspalten, d.h. diese mußt du dann doch per String-Konkatenation in den SQL-String einbauen:

C#-Quelltext
1:
"where " + spalte + " = ?suchfeld";                    


Talemantros - Fr 07.11.14 10:55

Hi Th69,
vielen Dank.
Hat super funktioniert.

Gruß und schönes Wochenende
Daniel