MySQL在一个查询中计算多个列

时间:2014-11-28 22:55:47

标签: c# mysql .net

我已经使用MySQL一天来处理我的登录系统,并且在创建新用户时遇到了问题。我有3个字段需要担心,显示名称,用户名和电子邮件。现在我需要检查任何字段是否已在数据库中有条目。 因此,如果已经给出的显示名称已经在数据库中,那么它应该显示消息"此显示名称已经采用" ,其他2的显示名称相同。

我已经阅读过无数帖子,其中人们使用SELECT COUNT和更多,但我仍然无法在我自己的项目中使用它。

我将如何做到这一点?

2 个答案:

答案 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在内部处理。 而且没有竞争条件。

要处理重复插入,只需检查特定的错误代码。