使用sql数据库的C#登录屏幕不工作
我有一个简单的登录屏幕,当用户单击登录按钮时,它应该运行sql查询来搜索username==username文本框和password==password文本框所在的行。我的代码的这一部分工作得很好 但是,当我尝试运行if语句时,它将打开一个新表单并关闭登录表单,它会出错,即使我添加了一些消息框来检查语句是否正确 有什么想法吗 登录按钮:使用sql数据库的C#登录屏幕不工作,c#,sql,if-statement,string-comparison,sqldatareader,C#,Sql,If Statement,String Comparison,Sqldatareader,我有一个简单的登录屏幕,当用户单击登录按钮时,它应该运行sql查询来搜索username==username文本框和password==password文本框所在的行。我的代码的这一部分工作得很好 但是,当我尝试运行if语句时,它将打开一个新表单并关闭登录表单,它会出错,即使我添加了一些消息框来检查语句是否正确 有什么想法吗 登录按钮: private void btnLogin_Click(object sender, EventArgs e) { try
private void btnLogin_Click(object sender, EventArgs e)
{
try
{
string connection = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DebenhamsProjectOfficeDatabase.mdf;Integrated Security=True;User Instance=True";
SqlConnection cn = new SqlConnection(connection);
cn.Open();
string userText = txtUsername.Text;
string passText = txtPassword.Text;
SqlCommand cmd = new SqlCommand("SELECT ISNULL(Username, '') AS Username, ISNULL(Password,'') AS Password FROM Users WHERE Username='" + userText + "' and Password='" + passText + "'", cn);
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
MessageBox.Show(userText + " / " + dr["Username"].ToString());
MessageBox.Show(passText + " / " + dr["Password"].ToString());
if (dr["Username"].ToString() == userText && dr["Password"].ToString() == passText)
{
this.Hide();
Dashboard dashboard = new Dashboard();
dashboard.ShowDialog();
this.Close();
}
else
{
MessageBox.Show("Invalid Username or Password");
}
}
dr.Close();
cn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
登录尝试:
根据以下答案和注释中的建议,代码已更正为以下内容(使用sql命令中的sql参数): 检查sql返回时,尝试在其末尾添加trim()
dr[“Username”].ToString().trim()
和dr[“Password”].ToString().trim()
有时数据库会存储您看不见的额外空间 检查sql返回时,尝试在其末尾添加trim()
dr[“Username”].ToString().trim()
和dr[“Password”].ToString().trim()
有时数据库会存储您看不见的额外空间 试试这个:我想它会管用的
SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE Username='" + userText.toString() + "' and Password='" + passText.toString() + "'", cn);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
MessageBox.Show(username + " / " + usertext);
MessageBox.Show(password + " / " + passtext);
this.Hide();
Dashboard dashboard = new Dashboard();
dashboard.ShowDialog();
this.Close();
}
else
{
MessageBox.Show("Invalid Username or Password");
}
简单地试试这个:我认为它会起作用
SqlCommand cmd = new SqlCommand("SELECT * FROM Users WHERE Username='" + userText.toString() + "' and Password='" + passText.toString() + "'", cn);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
MessageBox.Show(username + " / " + usertext);
MessageBox.Show(password + " / " + passtext);
this.Hide();
Dashboard dashboard = new Dashboard();
dashboard.ShowDialog();
this.Close();
}
else
{
MessageBox.Show("Invalid Username or Password");
}
尝试使用Trim()fn一旦完成此操作,请尝试放置'where 1=1;--在密码lolHi NickB中,您可以将这样的条件从if(dr[“Username”].ToString()==userText&&dr[“password”].ToString()==passText)更改为if(dr[“Username”.tostrim().Equals(userText.Trim())&&dr[“password”].tostrim().Trim().Equals(passText.Trim())@AMR..不是一个有用的评论..但那是hilarious@AMR…确实是..试着使用Trim()fn一旦你开始工作,试着在密码中输入'where 1=1;--Lohi NickB你能把这样的条件从if(dr[“Username”].ToString()==userText&&dr[“password”].ToString()==passText)改为if(dr[“Username”.ToString().Trim()吗.Equals(userText.Trim())和&dr[“Password”].ToString().Trim().Equals(passText.Trim())@AMR。。这不是一个有用的评论。。但那是hilarious@AMR .. 事实上,我选择了这个作为答案@NickB6@PradipKT请不要忽略有关SQL注入和保存密码存储的注释。ling.s的答案显示了一个更好的解决方案(尽管没有处理SQL注入和存储问题)。@mrab我同意他应该集中精力学习如何使用SQL参数。这个程序,如果一个真正的公司登录,只是等待被黑客。尽管如此,我还是回答了他的问题:-)这不会被公司使用,哈哈,这是一个大学项目。他们需要服用一些严重的药物才能让我接近他们的现场代码。另外,我绝不是developerCheers@AMR,非常感谢您抽出时间。我将检查并添加它。选择此作为答案@NickB6@PradipKT请不要忽略有关SQL注入和保存密码存储的注释。ling.s的答案显示了一个更好的解决方案(尽管没有处理SQL注入和存储问题)。@mrab我同意他应该集中精力学习如何使用SQL参数。这个程序,如果一个真正的公司登录,只是等待被黑客。尽管如此,我还是回答了他的问题:-)这不会被公司使用,哈哈,这是一个大学项目。他们需要服用一些严重的药物才能让我接近他们的现场代码。另外,我绝不是developerCheers@AMR,非常感谢您抽出时间。我将检查这个并添加它。