2010-11-26 10 views
0

Ainsi, tout au long de mon programme, j'ai probablement environ 50 zones de texte à divers endroits. Je sais comment remplacer une simple citation par quelque chose (dans ce cas '-> \'), mais je pense qu'il doit y avoir une meilleure façon de faire ceci que de passer et d'ajouter du code spécifique pour chaque boîte de texte. Je dois faire ceci parce que quand cette substance est envoyée à la base de données, s'il y a une citation simple, elle donne une erreur. Est-il possible de modifier le comportement de contrôle TextBox par défaut pour que toutes les zones de texte du programme remplacent automatiquement toutes les guillemets simples par \ '?Remplacer «avec» dans toutes les zones de texte de mon programme

EDIT:

 string statement = "select count(*) from users where username='@username'"; 
    MySqlCommand command = new MySqlCommand(statement, conn); 
    command.Parameters.AddWithValue("@username", username); 
    if (Convert.ToInt32(command.ExecuteScalar()) == 1) 

Je joue avec le code paramerterized et c'est ce que j'ai en ce moment. De la façon dont je le comprends, la chaîne d'instruction est fondamentalement la même qu'avant, mais où j'avais l'habitude d'avoir la variable "username" que je sais utiliser un paramètre (que j'ai appelé @username), alors la commande est créée. Ensuite, dans la variable parameters.addwithvalue, il remplace le nom d'utilisateur du paramètre, avec tout ce qui est dans le nom d'utilisateur de la variable. Malheureusement, cela ne fonctionne pas pour moi, et je ne vois pas vraiment comment cela aide parce que le nom d'utilisateur est toujours juste coincé dans la commande?

EDIT: Trouvé le problème, dans la déclaration que vous n'avez pas besoin de mettre des guillemets simples autour « @username »

il devrait donc être:

string statement = "select count(*) from users where [email protected]"; 

Répondre

6

Ne pas utiliser concaténation pour construire Requêtes SQL Utilisez correctement parametrized queries. Cela rendra les requêtes répétées un peu plus rapides et éliminera également le code de désinfection des entrées (remplaçant ' par \' par exemple) et les attaques par injection SQL.

+0

J'ai édité mon message, veuillez le regarder de nouveau. Je ne savais pas comment publier du code dans ces commentaires de manière efficace, alors je l'ai juste mis là-haut. – zack

+0

Merci. Vous m'avez aidé une tonne: D – zack

+0

Pas de problème. En effectuant ce changement, vous venez d'éliminer une énorme classe de vulnérabilités de sécurité. – cdhowie

0

Vous pouvez utiliser la fonction javascript onKeyUp ou l'événement asp.net OnTextChanged pour créer une fonction qui modifiera les devis.

+1

WPF n'est pas ASP.NET. – cdhowie

+0

Je n'ai pas vu le tag wpf .. –

1

Vous devez utiliser des requêtes paramétrées, non seulement pour résoudre le problème que vous avez, mais également pour réduire votre exposition à l'injection SQL. Lorsque vous utilisez la concaténation de chaîne pour générer des requêtes SQL, vous êtes susceptible d'attaquer SQL injection.

Questions connexes