en utilisant SI la condition à l'intérieur d'une boucle while en C#
J'ai un problème avec mon code C#. J'ai créé un formulaire de connexion en C# 2010. Quand je suis de valider le nom d'utilisateur, j'ai utilisé un si condition à l'intérieur de la boucle while mais le truc c'est que même quand le nom d'utilisateur et mot de passe sont corrects, il exécute la d'autre-déclaration. Merci de m'aider à résoudre ce.
Voici mon code :
private void btnlogin_Click(object sender, EventArgs e) {
string connection=
@"Data Source=.\SQLEXPRESS;"
+" AttachDbFilename=|DataDirectory|ResturantDB.mdf;"
+" Integrated Security=True; User Instance=True";
SqlConnection cn=new SqlConnection(connection);
try {
cn.Open();
}
catch(Exception) {
//print the exception's message?
MessageBox.Show("Connection to Database failed; check Connection!");
}
SqlCommand cmd=new SqlCommand("SELECT * FROM [Login]", cn);
cmd.Connection=cn;
SqlDataReader reader=null;
reader=cmd.ExecuteReader();
while(reader.Read()) {
if(
txtuser.Text==(reader["Username"].ToString())
&&
txtpass.Text==(reader["Password"].ToString())
) {
//MessageBox.Show( "logged in!" );
Home newhome=new Home();
newhome.Show();
this.Hide();
}
else {
MessageBox.Show("Incorrect credentials!");
}
}
}
- avez-vous une seule ligne dans la table Login?
- Premièrement: il semble que vous stockez les mots de passe en texte clair. Ne pas! Il ya beaucoup de questions à propos de hachage de mot de passe et le salage ici sur DONC. veuillez les lire attentivement. Deuxièmement: vous ne voulez pas de requête de toutes les lignes de Connexion de la Table. Juste celle qui correspond à la donnée de
Username
. Alors seulement vérifier qu'une fois. Ne pas utiliser une boucle ici.
Vous devez vous connecter pour publier un commentaire.
Je vais le résoudre de cette manière:
Username
a plusieursPassword
s.vous devez utiliser une pause, lorsqu'un nom d'utilisateur se trouve dans votre condition si comme
vous obtenez dans le bloc else parce que si aucune connexion n'est pas correct, la boîte de message s'affiche et qui est en n-1 cas dans votre code.
Vous êtes vérifier si tous les utilisateurs ont le même nom d'utilisateur et mot de passe. Vous avez besoin pour affiner votre SQL pour sélectionner seulement qu'un utilisateur. Aussi, veuillez lire dans hachage de mot de passe pour l'amour de vos utilisateurs.
Parce que sa en boucle.
créer une variable boolean. mise à jour de sa valeur dans la boucle (s'il est trouvé même nom d'utilisateur et mot de passe) et de vérifier à l'extérieur en fonction de sa valeur.
Ce faire
"SELECT * FROM [Login] WHERE Username = @Username"
. Et puiscmd.Parameters.AddWithValue("@Username", txtuser.text)
Pas besoin de boucle à travers les enregistrements de votre cas
utiliser cette requête, compare nom d'utilisateur et le mot de passe dans la requête:
la plus Simple et la méthode Sécurisée