Laden...

MySQL-Abfrage funktioniert nicht mit Parameter

Erstellt von buyden vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.306 Views
B
buyden Themenstarter:in
203 Beiträge seit 2007
vor 15 Jahren
MySQL-Abfrage funktioniert nicht mit Parameter

verwendetes Datenbanksystem: MySQL5

hi,
ich hab folgenden code zum Befüllein einer Listbox


private void edPlatineSelect_TextChanged(object sender, EventArgs e)
        {
            using (conTfbs)
            {
                listPlatineSelect.Items.Clear();
                cmdSelect.Parameters.Clear();
                cmdSelect.CommandText =
                        "SELECT bezeichnung FROM platine " +
                        "WHERE bezeichnung LIKE '@p1%'";
                cmdSelect.Parameters.Add("p1", MySqlDbType.VarChar).Value = edPlatineSelect.Text;
                conTfbs.Open();
                MySqlDataReader drSelect = cmdSelect.ExecuteReader(CommandBehavior.CloseConnection);
                if (drSelect.HasRows)
                {
                    while (drSelect.Read())
                    {                        
                        listPlatineSelect.Items.Add(drSelect["bezeichnung"].ToString());                        
                    }
                }
            }            
        }

leider passiert so gar nix. Wenn ich allerdings ohne Parameter arbeite funktioniert's wie gewünscht.
Was mach ich da falsch?

3.971 Beiträge seit 2006
vor 15 Jahren

???

Vllt, schreibst du auch was genau nicht funktioniert. Bzw. zeig mal was Quellcode

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

B
buyden Themenstarter:in
203 Beiträge seit 2007
vor 15 Jahren

@kleines eichhörnchen
hab nur aus versehen auf enter gedrückt, nachdem ich den Titel geschrieben hab und so den beitrag losgeschossen

1.378 Beiträge seit 2006
vor 15 Jahren

Du hast den ParameterNamen unter Hochkommas gesetzt wodurch er nicht ausgewertet wird.

Den Parameter müsstest du aus dem String heraus ziehen:

@p1+'%'

oder so ähnlich.

Lg XXX

3.971 Beiträge seit 2006
vor 15 Jahren

Fehlersuche MySQL Update und Insert

Bitte beachten auch,
[Hinweis] Wie poste ich richtig? Punkt 2, die selbe Frage hattest du hier schonmal gestellt.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

U
237 Beiträge seit 2007
vor 15 Jahren

Beim .Net Connector von MySql werden die Parameter mit einem "?" markiert, nicht mit einem @.
Auch beim Hinzufügen der Parameter in die Collection muss beim Namen des Parameters ein ? hinzu.


cmdSelect.CommandText =
                        "SELECT bezeichnung FROM platine " +
                        "WHERE bezeichnung LIKE '?p1%'";
                cmdSelect.Parameters.Add("?p1", MySqlDbType.VarChar).Value = edPlatineSelect.Text;

heute code ich, morgen debug ich und übermorgen cast ich die königin auf int

1.200 Beiträge seit 2007
vor 15 Jahren

Das Problem ist die Wildcard '%'. Die darf nicht in der Parameterbezeichnung stehen.

Falsch:

"WHERE bezeichnung LIKE '?p1%'";

Richtig:

"WHERE bezeichnung LIKE ?";
cmdSelect.Parameters.Add("?p1", MySqlDbType.VarChar).Value = edPlatineSelect.Text + "%";

oder

"WHERE bezeichnung LIKE CONCAT(?, '%')";
cmdSelect.Parameters.Add("?p1", MySqlDbType.VarChar).Value = edPlatineSelect.Text;

Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!

YARRRRRR!

B
buyden Themenstarter:in
203 Beiträge seit 2007
vor 15 Jahren

Das Problem sind scheinbar wirklich die Hochkommas und das %. Lass ich die weg, funktioniert's, egal ob mit @ oder ?. Ich brauche aber das % sonst findet mysql meinen string nur, wenn er komplett ist. Ohne Hochkommas bekomm ich aber mit % nen MySql-Syntax-Fehler, mit Hochkommas wird der komplette Parameter ignoriert.

@kleines Eichhörnchen
es war mir schon bewusst, das ich sowas schonmal gefragt habe, aber ich hab schon soviel rumprobiert, auch mit der Lösung des letzten Threads und trotzdem nichts erreicht.

B
buyden Themenstarter:in
203 Beiträge seit 2007
vor 15 Jahren

Da war ich wohl zu langsam. Die Lösung ist CONCAT. Damit funktioniert's.
Danke sehr.