2017-02-16 6 views
0

Cで登録フォームを行っています コードは本当にうまくいっていますが、ユーザー名が であっても、ユーザー名を複製することができます。 ユーザー名に重複する値を持つための制限を追加するにはどうすればよいですか? ここに私のコードpsがあります。私はそれが長すぎるので例外を追加しませんでした。どのように私はデータベース内の既存のユーザー名を検証することができますか?#

string condense = "datasource=localhost;port=3306;username=root;password=''"; 
     string milk = "insert into empaccount.empinfo(IDNUMBER,email,username,password,firstname,lastname,cnumber) values ('" + this.idnumber.Text + "','" + email.Text + "','" + username.Text + "','" + password.Text + "','" + firstname.Text + "','" + this.lastname.Text + "','" + contactno.Text + "');"; 
     MySqlConnection conDatabase = new MySqlConnection(condense); 
     MySqlCommand cmdDatabase = new MySqlCommand(milk, conDatabase); 
     MySqlDataReader myReader; 

     if (string.IsNullOrEmpty(idnumber.Text)) 
     { 
      idnumber.Text = " Please generate an id number"; 
     } 
      else 
     { 
      conDatabase.Open(); 
      myReader = cmdDatabase.ExecuteReader(); 
      MessageBox.Show("You're Registered!", "Successful!", MessageBoxButtons.OK, MessageBoxIcon.Information); 

      while (myReader.Read()) 
      { 

      } 
     } 
+0

empinfoテーブルに一意の制約を追加できますか? –

+0

私の投稿を編集しました..どこで見つけることができますか? –

+0

テーブルが作成されたデータベーススキーマ内。 –

答えて

0

テーブルの作成に使用したデータベースエディタを使用して、テーブルに一意の制限(制約)を追加する必要があります。次に、ユーザー名が取得された場合、アプリケーションによってスローされた例外をキャッチします。

基本的に、そこにいくつかのユーザー名があり、ユーザー名フィールドに一意の制約があると、追加しようとすると例外がスローされます。次に例を示します。

また、挿入クエリを実行している場合、ExecuteRead()を実行する必要はありません。 ExecuteNonQuery()を実行するだけで、何も返さずにクエリが実行されます。

string condense = "datasource=localhost;port=3306;username=root;password=''"; 
    string milk = "insert into empaccount.empinfo(IDNUMBER,email,username,password,firstname,lastname,cnumber) values ('" + this.idnumber.Text + "','" + email.Text + "','" + username.Text + "','" + password.Text + "','" + firstname.Text + "','" + this.lastname.Text + "','" + contactno.Text + "');"; 
    MySqlConnection conDatabase = new MySqlConnection(condense); 
    MySqlCommand cmdDatabase = new MySqlCommand(milk, conDatabase); 
    MySqlDataReader myReader; 

    if (string.IsNullOrEmpty(idnumber.Text)) 
    { 
     idnumber.Text = " Please generate an id number"; 
    } 
    else 
    { 
     conDatabase.Open(); 
     try { 
     cmdDatabase.ExecuteNonQuery(); 
     } 
     catch { 
     //Username is taken 
     } 
     MessageBox.Show("You're Registered!", "Successful!", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    } 
+0

例外を追加した後 else { conDatabase.Open(); } try { cmdDatabase.ExecuteNonQuery(); } catch { MessageBox.Show( "Username is already taken"); } MessageBox.Show( "あなたが登録しました!"、 "成功!"、MessageBoxButtons.OK、MessageBoxIcon.Information); } 2番目のメッセージボックスは、それを停止する方法を示していますか?保存しませんが、最初のメッセージボックスの後には表示されません。 –

+0

「ユーザー名が取得されました」が表示されていても「登録済みです」ボックスが表示されていますか?その場合、「return;」を追加します。キャッチで「ユーザー名が取得された」直後に –

関連する問題