2017-10-02 44 views
0

Comme je l'ai dit, je veux vérifier dans le registre que le nom d'utilisateur n'est pas nul, ou vide
ni déjà pris.C# Vérifiez si le nom d'utilisateur n'est pas vide ou vide

static SqlConnection Con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=heres_the_path;Integrated Security=True"); 
    static string name,pass,email; 
    static DataTable dt = new DataTable(); 

S'il vous plaît aidez-moi à corriger le code, le problème se situe ici:

static bool IsUsernameAlreadyTaken(string name)//Username Checker 
    { 
     SqlDataAdapter sda = new SqlDataAdapter("SELECT count(*) FROM Login WHERE Nev='" + name + "'", Con); 
     sda.Fill(dt); 
     if (dt.Rows[0][0].ToString() == "1") return true; 
     else return false; 
    } 

Ou dans cette boucle while:

static void Register() { 
     Console.WriteLine("What will be your username?"); 
     while (string.IsNullOrEmpty(name) && IsUsernameAlreadyTaken(name)==false) 
     { 
      name = Console.ReadLine(); 
      if (IsUsernameAlreadyTaken(name)) 
      { 
       Console.WriteLine("That's already taken"); 
      } 
      if (string.IsNullOrEmpty(name)) 
      { 
       Console.WriteLine("Why?"); 
      } 
     } 
} 

Maintenant, si je donne un nom au programme qui a déjà existe dans la base de données il ne me dit pas qu'il est déjà pris, juste continu.

+3

"le problème est ici ou là" - Eh bien, c'est quoi? Lorsque vous parcourez cela dans le débogueur, où/comment spécifiquement diffère-t-il de ce que vous attendez? – David

+0

Une fois que vous avez trié le problème de logique/syntaxe, vous avez un nouveau problème: même si vous avez vérifié qu'il n'a pas été pris, il peut être pris avant d'essayer de l'ajouter. Donc, la façon normale de procéder, comme lors de la création de fichiers sur disque, etc., est d'essayer de créer l'enregistrement et de voir si cela fonctionne. Si cela fonctionne, cela n'a pas été pris. Si cela n'a pas fonctionné, alors cela a été pris. Cela nécessite que la base de données elle-même vérifie les noms d'utilisateur en double, c'est-à-dire qu'il s'agit d'une clé dans la base de données. –

+0

Et je le vérifie dans la base de données avec le booléen IsUsernameAlreadyTaken, ou je me trompe? @AndersForsgren –

Répondre

1

Le problème est ici:

while (string.IsNullOrEmpty(name) && IsUsernameAlreadyTaken(name)==false) 

Qu'est-ce que vous demandez le code à faire est la suivante:

  1. Assurez-vous que name est nul ou vide
  2. Si elle est nulle ou vide, vérifiez pour voir si elle est déjà prise.

De toute évidence, cette logique est sérieusement défectueuse.

Voulez-vous dire cela?

while (string.IsNullOrEmpty(name) || IsUsernameAlreadyTaken(name)==false) 
+1

Avec votre code, il vaut mieux pas encore parfait bot. Il dit que "C'est déjà pris" mais le code continue et demande un mot de passe. Ne recommence pas la boucle et demande un nom –

+0

Oui, vous devriez probablement corriger cela. –

+0

while (string.IsNullOrEmpty (nom) || IsUsernameAlreadyTaken (nom)) Problème résolu –