À l'aide d'une Instruction Préparée en C# avec Mysql
J'ai essayé de l'instruction préparée dans mon programme, mais pas de travail.
La partie commenté est l'Instruction Préparée partie. Quand je l'ai changer en normal de déclaration, tout est bon.
Quelqu'un peut me dire ce qui me manque?
Merci beaucoup.
private void btnLogin_Click(object sender, EventArgs e)
{
MySqlCommand cmd = MySqlConn.cmd;
//cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username='@val1' AND admin_password=PASSWORD('@val2')", MySqlConn.conn);
//cmd.Prepare();
//cmd.Parameters.AddWithValue("@val1", tboxUserName.Text);
//cmd.Parameters.AddWithValue("@val2", tboxPassword.Text);
cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username='"+tboxUserName.Text+"' AND admin_password=PASSWORD('"+tboxPassword.Text+"')", MySqlConn.conn);
MySqlDataReader res = cmd.ExecuteReader();
if (!res.HasRows) { MessageBox.Show("Error! "); res.Close(); return; }
else
{
//do something
}
res.Close();
}
- Ce qui ne fonctionne pas exactement? Est une erreur affichée?
Vous devez vous connecter pour publier un commentaire.
Essayez de supprimer
'
de votre requête et d'utiliserPrepare
après l'ajout de paramètres:Votre solution est presque correct comme-est. Cependant, ce qui est un processus d'ouverture de session et donc pour la sécurité de la tâche, il ya quelques suggestions que je voudrais faire aussi bien.
Tout d'abord, envisager de faire votre bouton gestionnaire d'événements s'affichent comme suit:
Cela permettra de faire l'entretien et la lisibilité de l'application plus facile. Puis déclarer une fonction nommée
Login()
pour effectuer le levage lourd:Vous remarquerez quelques petites choses ici. Tout d'abord, les citations ont été supprimés à partir de votre chaîne de requête originale qui empêchaient les paramètres nommés de fonctionner correctement. En outre, la requête renvoie une
count()
résultat de la fonction au lieu d'essayer de créer un jeu de résultats contenant le nom d'utilisateur administrateur et le mot de passe. Enfin, la méthode est encapsulé dans un bloc try-catch , tels que dans le cas où une erreur se produit, la méthode renvoiefalse
et le journal en est refusé. J'ai aussi cassé la requête dans une chaîne concaténée pour la lisibilité.