2010-11-28 11 views
1

Der Versuch, eine Select-Anweisung aus einer MySql-Datenbank auszuführen. Die folgende funktioniert, wenn ich Stecker Variablen in direkt:C# MySql-Anweisung. Finde meinen Fehler!

MySqlCommand playerSearch = conn.CreateCommand(); 
playerSearch.CommandText = @"select username from players where username like '%" + username + "%'"; 
playerSearch.Prepare(); 
// Execute the command, get the restuls, etc. 

Allerdings, wenn ich versuche, es die bevorzugte Art und Weise zu tun, mit Paramater Zugabe, wie zum Beispiel:

MySqlCommand playerSearch = conn.CreateCommand(); 
playerSearch.CommandText = @"select username from players where username like @username"; 
playerSearch.Prepare(); 
playerSearch.Parameters.AddWtihValue("@username", "'%" + username + "%'"); 
// Execute the command, get the restuls, etc. 

ich keine Ergebnisse zurück aus der Abfrage erhalten. Bisher habe ich nicht herausgefunden, warum das nicht funktioniert. Irgendein Rat?

Antwort

6

Löschen Sie die inneren Anführungszeichen.

playerSearch.Parameters.AddWtihValue("@username", "%" + username + "%"); 
+0

Arbeitete wie ein Charme, danke. Das ist aufgrund des AddWithValue der Fall? – vimalloc

+0

Die Datenbank-Client-Bibliothek weiß, wie mit dem Angeben ordnungsgemäß umzugehen ist. –

+0

Noch besser - lassen Sie den Operator LIKE ganz zugunsten eines Volltextindexes fallen. –

-1

Nun, nur Mysql laufen und Abfrage direkt eingeben, als MySQL-Server gibt es Informationen geben wird, wo Ihre Syntaxfehler ist, wenn es einen gibt. Der beste Weg ist, lassen Sie Programm, um Ihre Abfrage als Nur-Text (ich meine zur Laufzeit) und dann in die mysql-Befehlszeile.

1

Erstellen Sie die Platzhalter in der Abfrage, anstatt die Daten:

MySqlCommand playerSearch = conn.CreateCommand(); 
playerSearch.CommandText = @"select username from players where username like '%' + @username + '%'"; 
playerSearch.Prepare(); 
playerSearch.Parameters.AddWtihValue("@username", username); 
// Execute the command, get the restuls, etc. 

noch besser, vermeiden vollständig diese Art von LIKE Abfrage zu schreiben. Anfängliche Platzhalter in Ihrer Abfrage verhindern, dass die Datenbank Indizes verwendet. Verwenden Sie einen echten full-text search Mechanismus. LIKE ist ein schlechter Ersatz.

Verwandte Themen