c# - 无法检查用户是否已存在于我的数据库中
问题描述
我开始学习 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();
}
谢谢 !
解决方案
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 检查是否存在匹配项将在第一个匹配项处停止,而不是可能返回一组匹配项,然后它只是相应地返回一个值。这将最大限度地减少服务器和您的软件之间传输的数据,并避免在我们真正关心是否有任何匹配时执行计数。
推荐阅读
- automated-tests - 在当前场景中使用来自另一个功能的另一个场景,Behat 测试
- git - git merge-file:如何将冲突合并到
? - python-3.x - 多元自然进化策略
- javascript - 我在按钮上做错了什么?
- javascript - 我想根据价格和数量获得 3 件商品的总和
- javascript - 将 Sencha ExtJs 2.2.3 升级到版本 6
- php - 在 Laravel 的每个页面上使用代码的最佳实践
- php - Codeception 和 Selenium:无法设置 cookie
- python - mypy 没有检测到未初始化的属性
- html - 如果元素的文本内容太长,如何在布局网格中强制换行?