L'erreur provient d'une simple faute de frappe. Vous avez ajouté des espaces à la valeur transmise pour la condition Sid
.
Toutefois, votre requête doit être réécrite de cette manière
string cmdText = "select Count(*) from [user] where [email protected] and [email protected]";
SqlCommand cmd = new SqlCommand(cmdText, cnn)
cmd.Parameters.AddWithValue("@sid", textBox1.Text);
cmd.Parameters.AddWithValue("@pwd", textBox2.Text);
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count > 0)
MessageBox.Show("pass");
else
MessageBox.Show("fail");
Cette approche utilise une requête paramétrées pour éviter Sql Injection, et utilise directement un SqlCommand sans construire le SqlDataAdapter
et DataTable
. Le SqlCommand.ExecuteScalar est la méthode correcte à utiliser lorsque vous devez récupérer simplement la première colonne d'une seule ligne ou appeler une fonction T-SQL scalaire comme COUNT()
En note, gardez à l'esprit que le stockage des mots de passe en texte clair dans votre base de données est un gros problème de sécurité. Celui qui a accès à la base de données sera capable de lire les mots de passe de chaque utilisateur. Les mots de passe doivent être stored as a computed hash et vérifiés en répétant l'algorithme de hachage sur les données entrées par l'utilisateur.
avez-vous essayé de parcourir votre code pour voir quelles valeurs sont transmises? – jbutler483
Sur une note de côté - vous devez vraiment corriger cette terrible vulnérabilité d'injection SQL. – Cylindric
@steve Voilà une réponse, pourquoi ne pas l'afficher en tant que tel? – Cylindric