我已经使用MySQL一天来处理我的登录系统,并且在创建新用户时遇到了问题。我有3个字段需要担心,显示名称,用户名和电子邮件。现在我需要检查任何字段是否已在数据库中有条目。 因此,如果已经给出的显示名称已经在数据库中,那么它应该显示消息"此显示名称已经采用" ,其他2的显示名称相同。
我已经阅读过无数帖子,其中人们使用SELECT COUNT和更多,但我仍然无法在我自己的项目中使用它。
我将如何做到这一点?
答案 0 :(得分:0)
我试图找到自己的解决方案太长时间了,经过大量的追踪和错误后,我已经让自己做了一些代码。它可能不完美,但它的工作正常:
string sql = "SELECT Nickname, Username, Email "
+ " FROM UserData WHERE (Nickname=?Nickname OR Username=?Username OR Email=?Email)";
MySqlCommand check = new MySqlCommand(sql, conn);
conn.Open();
check.Parameters.AddWithValue("?Nickname", txtCreateName.Text);
check.Parameters.AddWithValue("?Username", txtCreateUserName.Text);
check.Parameters.AddWithValue("?Email", txtCreateEmail.Text);
MySqlDataReader Reader;
Reader = check.ExecuteReader();
List<string> Nicknames = new List<string>();
List<string> Usernames = new List<string>();
List<string> Email = new List<string>();
while (Reader.Read())
{
Nicknames.Add(Reader.GetString(0));
Usernames.Add(Reader.GetString(1));
Email.Add(Reader.GetString(2));
}
conn.Close();
Reader.Close();
Boolean alreadyexists = false;
if (Nicknames.Contains(txtCreateName.Text))
{
alreadyexists = true;
lblErrorDisplay.Visible = true;
}
if (Usernames.Contains(txtCreateUserName.Text))
{
alreadyexists = true;
lblErrorUsername.Visible = true;
}
if (Email.Contains(txtCreateEmail.Text))
{
alreadyexists = true;
lblErrorEmail.Visible = true;
}
if (alreadyexists)
{
return;
}
如果有人对此代码进行了一些改进,那么我们将非常感激,但现在可以使用。
答案 1 :(得分:0)
只需在每个字段上创建UNIQUE INDEX
即可。
这样你可以确定不会有任何重复,因为DB在内部处理。
而且没有竞争条件。
要处理重复插入,只需检查特定的错误代码。