【发布时间】:2014-08-28 04:00:51
【问题描述】:
我尝试了几个小时检查我的代码,试图找出哪里出错了,而谷歌似乎也没有答案。 基本上我正在运行这段代码:
public bool LoginRequest(string ReceivedUsername, string ReceivedPassword)
{
bool ValidLogin = false;
try
{
using (SqlConnection myConnection = new SqlConnection(ConnectString))
{
myConnection.Open();
Log.Debug("Succesful sql connection");
SqlCommand userSELECTcom = new SqlCommand("SELECT username,password FROM users;", myConnection);
SqlDataReader reader = userSELECTcom.ExecuteReader();
//verify login
while (reader.Read())
{
CompareUsername = reader["username"].ToString();
ComparePassword = reader["password"].ToString();
Log.Debug(ReceivedUsername + " against " + CompareUsername);
Log.Debug(ReceivedPassword + " against " + ComparePassword);
if (CompareUsername == ReceivedUsername && ComparePassword == ReceivedPassword)
{
ValidLogin = true;
Log.Debug(ReceivedUsername + " has logged in successfully!!!");
myConnection.Close();//close sql conn
reader.Close();//close sqldatareader
return ValidLogin;
}
else if (CompareUsername != ReceivedUsername || ComparePassword != ReceivedPassword)
{
if (!reader.Read())
{
Log.Debug(ReceivedUsername + " has not logged in successfully with password: " + ReceivedPassword);
myConnection.Close();//close sql conn
reader.Close();//close sql data reader
return ValidLogin;
}
}
}
//end of verify sequence
}
}
//logging any login request issues
catch (Exception e)
{
Log.Debug(e);
}
return ValidLogin;
}
我设置了一个日志记录程序,它可以告诉我代码执行时发生的所有事情。这些行:" Log.Debug(ReceivedUsername + " 与 " + CompareUsername); Log.Debug(ReceivedPassword + " 对 " + ComparePassword); "
帮助我查看阅读器正在检查哪一行。我尝试了六行,每行都有唯一的用户名和密码,结果基本上表明只有第 1、3 和 5 行由读者根据用户的输入进行检查。因此,如果我尝试使用第 2 行、第 4 行或第 6 行中的用户名和密码登录我的客户端,我会收到一条错误消息,提示我登录失败。谁能解释为什么会这样?
【问题讨论】:
-
只是给你一个旁注。如果您在连接周围使用“使用”关键字,则无需致电。关闭它。它继承了 IDisposable,它使用你的调用。
-
通常最好直接从数据库查询而不是从表中检索所有数据。推荐使用where子句。
-
肯定会考虑到 Cubicle.Jockey。你能进一步解释一下哈桑吗?
-
@Jaja。是的。我要求将
where clause添加到您的 sql 查询中。 -
@HassanNisar 不太了解这个条款,所以我对它进行了一些研究。我可能错了,但这种说法不会让你容易受到 SQL 注入攻击吗? SELECT username FROM users WHERE username = 'var_user_input'
标签: c# sql sql-server-2012-express