Autor Beitrag
Talemantros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Do 06.11.14 17:18 
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

ausblenden 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?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
"where " + spalte + " = ?suchfeld";					
Talemantros Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 444
Erhaltene Danke: 2

Win7 Proff 64bit
C# (VS2013)
BeitragVerfasst: Fr 07.11.14 10:55 
Hi Th69,
vielen Dank.
Hat super funktioniert.

Gruß und schönes Wochenende
Daniel