2017-10-02 3 views
0

私が言ったように、ユーザー名がヌルでないか、または空であることをレジスタでチェックします。
C#ユーザー名がヌルでないか、空でないか、または既に取得されていないかを確認してください。

​​

私は、コードを修正する助けてください、問題がどこかにここにある:

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?"); 
      } 
     } 
} 

私はプログラムにすでに名前を付けた場合:

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; 
    } 

またはこのwhileループで

データベースに存在していて、それは既に取られているとは言えません。

+3

"問題はここまたはここにある" - まあ、それは?デバッガでこれを実行すると、どのように具体的に期待通りのものになりますか? – David

+0

論理/構文の問題を並べ替えると、新しい問題が発生します。それが行われていないことを確認したにもかかわらず、追加しようとする前に解決する可能性があります。だから、ディスクなどにファイルを作成するときと同じように、これを行う通常の方法は、レコードを作成し、それが動作するかどうかを調べることです。それが動作すれば、それは取られませんでした。それがうまくいかなければ、それは取られた。これは、データベース自体が重複するユーザ名をチェックすることを必要とする。すなわち、それはdbのキーである。 –

+0

そして静的なbool IsUsernameAlreadyTakenを使ってデータベースでチェックしていますか、間違っていますか? @AndersForsgren –

答えて

1

問題はここにある:それはnullの場合nameがnullまたは

  • 空であることを保証するために

    1. チェック:

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

      あなたが行うコードを求めている何がこれですまたは空の場合は、すでに使用されているかどうかを確認してください。

    明らかに、このロジックには深刻な欠陥があります。

    あなたはこれを意味しましたか?

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

    あなたのコードでは、まだ完全ではないボットが良いです。それは "それは既に取られている"と述べているが、コードは継続してパスワードを要求する。ループを再開して名前を聞かないでください –

    +0

    ええ、おそらくそれを修正すべきです。 –

    +0

    しばらく(string.IsNullOrEmpty(名)|| IsUsernameAlreadyTaken(名)) 問題は、 'name'のは、あなたが' Register'呼び出すときに、既存のユーザーに一致する任意の値を持っている場合は、whileループが実行されません –

    関連する問題