简体   繁体   English

无法检查用户是否已存在于我的数据库中

[英]Can't make check if user already exists in my database

I started to learn ASP.NET. 我开始学习ASP.NET。 I create a register system, and when I try to check if the username or email already exists in the database, it's not checked and creates the user even when you have it already. 我创建了一个注册系统,当我尝试检查数据库中是否已存在用户名或电子邮件时,即使已经存在,也不会检查并创建用户。

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();
}

Thanks ! 谢谢 !

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;

Having SQL Server check for the existence of matches will stop at the first match instead of potentially returning a set of matches and then it is simply returning a value accordingly. 让SQL Server检查是否存在匹配将在第一个匹配时停止,而不是可能返回一组匹配,然后它只是相应地返回一个值。 This will minimize data transferred between the server and your software plus avoid performing a count when we really just care if there are any matches. 这将最大限度地减少服务器和软件之间传输的数据,并避免在我们真正关心是否有任何匹配时执行计数。

每当你想要找到TRUE / FALSE值或计算no记录时,总是使用COUNT(1)。

bool exists = false;
string checkuser = "SELECT count(*) FROM accounts WHERE username=@username;";

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

object result = cmd2.ExecuteScalar();

if (result != null)
    exists = (Convert.ToInt32(result) == 1) ? true : exists;

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

Check if user Exist already 检查用户是否已存在

int exists = 0;
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();

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM