2016-08-12 3 views
2

Ich habe derzeit eine asp.net-Website. Ich habe jedoch festgestellt, dass Benutzer sich auf meiner Registrierungsseite mehrmals mit demselben Benutzernamen registrieren können. Daher frage ich mich, ob es eine Möglichkeit gibt, die Benutzer daran zu hindern, sich mehrmals mit demselben Benutzernamen zu registrieren.Wie zu verhindern, dass doppelte Datenwerte in MySQL-Datenbank erscheinen

Ich weiß, dass ich eine Spalte in meiner Datenbank festlegen kann, um einen Primärschlüssel zu haben ... Aber was mache ich, wenn ich mehrere Spalten haben möchte, um Primärschlüssel zu haben?

Das ist mein Code einfügen ....

MySqlCommand command = mcon.CreateCommand(); 
    mcon.Open(); 
    command.CommandText = "insert into pointofcontact (FirstName, LastName,  EmailAddress, ContactNumber, BackupContactNumber, Address, Gender, Username, Password, Status, ProfilePic) values(?firstname, ?lastname, ?emailaddress, ?contactnumber, ?backupcontactnumber, ?address, ?gender, ?username, ?password, ?status, ?image)"; 
    command.Parameters.AddWithValue("?firstname", firstname); 
    command.Parameters.AddWithValue("?lastname", lastname); 
    command.Parameters.AddWithValue("?emailaddress", email); 
    command.Parameters.AddWithValue("?contactnumber", mobileNumber); 
    command.Parameters.AddWithValue("?backupcontactnumber", backupNumber); 
    command.Parameters.AddWithValue("?address", homeAddress); 
    command.Parameters.AddWithValue("?gender", gender); 
    command.Parameters.AddWithValue("?username", username); 
    command.Parameters.AddWithValue("?password", password); 
    command.Parameters.AddWithValue("?status", status); 
    command.Parameters.AddWithValue("?image", imageName); 
    command.ExecuteNonQuery(); 
    mcon.Close(); 

    MySqlDataReader reader = null; 
    mcon.Open(); 
    MySqlCommand command2 = mcon.CreateCommand(); 
    command2.CommandText = "select * from pointofcontact where Username = ?username"; 
    command2.Parameters.AddWithValue("?username", tbUsername.Text); 
    reader = command2.ExecuteReader(); 
    if (reader != null && reader.HasRows) 
    { 
     lblValidate.Text = "Username already exists."; 
    } 

    Response.Redirect("IndexAfterLogin1.aspx"); 

Die Daten, die die Benutzereingaben der Lage sind, in meine MySQL-Datenbank eingefügt werden, aber die eingegebenen Daten in der Lage, für Benutzername und E-Mail-Felder wiederholt werden für verschiedene Benutzer, und das möchte ich nicht.

+0

Mögliche Duplikat [? Wie kann ich eindeutige Einschränkung für mehrere Spalten in MySQL angeben] (http://stackoverflow.com/questions/635937/how-do-i-specify-unique-constraint-für-mehrere-spalten-in-mysql) –

+1

Mindestens einige Einschränkungen der Datenbank hinzufügen, so dass Code eine Ausnahme auslösen wird, wenn Sie versuchen, ein Duplikat einzufügen. –

Antwort

0

Zu diesem Zweck können Sie ein unique key in Tabelle hinzufügen sonst create a function in der Datenbank zu überprüfen, bevor das ist es

0

Machen Sie das Feld Benutzername als primäre oder eindeutige Schlüssel einsetzen. Es wird nicht zulassen, dass doppelte Einträge für dieses Feld

0

Bestellen Sie den Code wie folgt:

try 
{ 
MySqlDataReader reader = null; 
mcon.Open(); 
MySqlCommand command2 = mcon.CreateCommand(); 
command2.CommandText = "select * from pointofcontact where Username = ?username"; 
command2.Parameters.AddWithValue("?username", tbUsername.Text); 
reader = command2.ExecuteReader(); 
if (reader != null && reader.HasRows) 
{ 
    lblValidate.Text = "Username already exists."; 
    **return;** 
} 
else 
{ 
    MySqlCommand command = mcon.CreateCommand(); 
    command.CommandText = "insert into pointofcontact (FirstName, LastName,  EmailAddress, ContactNumber, BackupContactNumber, Address, Gender, Username, Password, Status, ProfilePic) values(?firstname, ?lastname, ?emailaddress, ?contactnumber, ?backupcontactnumber, ?address, ?gender, ?username, ?password, ?status, ?image)"; 
    command.Parameters.AddWithValue("?firstname", firstname); 
    command.Parameters.AddWithValue("?lastname", lastname); 
    command.Parameters.AddWithValue("?emailaddress", email); 
    command.Parameters.AddWithValue("?contactnumber", mobileNumber); 
    command.Parameters.AddWithValue("?backupcontactnumber", backupNumber); 
    command.Parameters.AddWithValue("?address", homeAddress); 
    command.Parameters.AddWithValue("?gender", gender); 
    command.Parameters.AddWithValue("?username", username); 
    command.Parameters.AddWithValue("?password", password); 
    command.Parameters.AddWithValue("?status", status); 
    command.Parameters.AddWithValue("?image", imageName); 
    command.ExecuteNonQuery(); 
    } 
} 
catch 
{ 
    .... 
} 
finally 
{ 
mycon.Close(); 
} 
+0

Darf ich fragen, was ich für den "Fang" Teil der Codierung eingeben? :) – MrStutterz

+0

Try Catch Endlich Block ist immer bevorzugt –

Verwandte Themen