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?
???
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...
@kleines eichhörnchen
hab nur aus versehen auf enter gedrückt, nachdem ich den Titel geschrieben hab und so den beitrag losgeschossen
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
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...
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
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!
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.
Da war ich wohl zu langsam. Die Lösung ist CONCAT. Damit funktioniert's.
Danke sehr.