首页 > 解决方案 > 无法检查用户是否已存在于我的数据库中

问题描述

我开始学习 ASP.NET。我创建了一个注册系统,当我尝试检查数据库中是否已经存在用户名或电子邮件时,即使您已经拥有它,它也不会被检查并创建用户。

try
{
    conn.Open();
    bool exists = false;
    string checkuser = "SELECT count(*) FROM accounts WHERE username='" + username.Text + "'";

    SqlCommand cmd2 = new SqlCommand(checkuser, conn);
    cmd2.Parameters.AddWithValue("username", username.Text);

    exists = (int)cmd2.ExecuteScalar() > 0;

    if (exists)
    {
        Response.Write("User already exists");
    }

    string command = "INSERT INTO accounts (username, email, password) VALUES (@username, @email, @password)";

    SqlCommand cmd = new SqlCommand(command, conn);

    cmd.Parameters.AddWithValue("@username", username.Text);
    cmd.Parameters.AddWithValue("@email", email.Text);
    cmd.Parameters.AddWithValue("@password", password.Text);

    cmd.ExecuteNonQuery();
}
catch(Exception)
{
    label_msg.Visible = true;
    label_msg.Text = "Something went wrong....";
    throw;
}
finally
{
    Response.Redirect("/layout.aspx");
    conn.Close();
}

谢谢 !

标签: c#htmlcssasp.netvisual-studio

解决方案


string checkuser = "if exists (select 1 from accounts where username=@username) select 1 else select 0 end";
SqlCommand cmd2 = new SqlCommand(checkuser, conn);
cmd2.Parameters.AddWithValue("@username", username.Text);

bool exists = (int)cmd2.ExecuteScalar() > 0;

让 SQL Server 检查是否存在匹配项将在第一个匹配项处停止,而不是可能返回一组匹配项,然后它只是相应地返回一个值。这将最大限度地减少服务器和您的软件之间传输的数据,并避免在我们真正关心是否有任何匹配时执行计数。


推荐阅读