因此,我尝试创建一个登录屏幕,其中文本框的输入必须与数据库中的用户名和密码匹配。这可能是愚蠢的,但是我不知道为什么它不起作用。 这是我第一次使用stackoverflow,因此如果我做错了任何事情,请随时指出。
这是我的登录课程:
namespace WindowsFormsApp1
{
class Logon
{
public static Users Login(string Gebruiker, string Wachtwoord)
{
Users NewUser = new Users();
SqlConnection connection = Connection.GetConnection();
string Username = "SELECT Username FROM Gegevens WHERE Username = @Username";
SqlCommand username = new SqlCommand(Username, connection);
username.Parameters.AddWithValue("@Username", Gebruiker);
try
{
connection.Open();
SqlDataReader GetUsername = username.ExecuteReader(CommandBehavior.SingleRow);
if (GetUsername.Read())
{
NewUser.Username = GetUsername["Username"].ToString();
}
}
catch (SqlException ex)
{
throw ex;
}
finally { connection.Close(); }
string Password = "SELECT Password FROM Gegevens WHERE Password = @Password";
SqlCommand password = new SqlCommand(Password, connection);
password.Parameters.AddWithValue("@Password", Wachtwoord);
try
{
connection.Open();
SqlDataReader GetPassword = password.ExecuteReader();
if (GetPassword.Read())
{
NewUser.Password = GetPassword["Password"].ToString();
}
}
catch (SqlException ex2)
{
throw ex2;
}
finally { connection.Close(); }
return NewUser;
}
}
}
用户类别:
namespace WindowsFormsApp1
{
class Users
{
private string username;
private string password;
public Users() { }
public string Username
{
get { return username; }
set { username = value; }
}
public string Password
{
get { return password; }
set { password = value; }
}
}
}
最后按钮本身:
namespace WindowsFormsApp1
{
public partial class Login : Form
{
public Login()
{
InitializeComponent();
}
private void btnAccept_Click(object sender, EventArgs e)
{
Users NewUser;
string User = txtUsername.Text;
string Pass = txtPassword.Text;
NewUser = Logon.Login(User, Pass);
if (User == NewUser.Username && Pass == NewUser.Password)
{
Form1 ls = new Form1();
ls.Show();
}
}
}
}
答案 0 :(得分:0)
您应该使用一个查询来验证用户凭据,例如
SELECT top 1 1 FROM Gegevens WHERE Username = @Username and Password = @Password
答案 1 :(得分:0)
我可以在您的代码中看到以下几点:
string Password = "SELECT Password FROM Gegevens WHERE Password = @Password";
它不会验证用户是否具有目标密码,而只会从碰巧使用它的所有用户中返回多次您要查找的密码。
最好像这样使用一个查询
string userQuery = "SELECT Username, Password FROM Gegevens WHERE Username = "@Username" and Password =
@Password";
第二个问题是如何从密码查询中检索数据。
NewUser.Username = GetUsername["Username"].ToString();
将其更改为类似的内容
SqlDataReader userReader = userQueryExecuteReader();
if (userReader.Read())
{
NewUser.Username = userReader[0].ToString();
NewUser.Password = userReader[1].ToString();
}
您可以通过放置断点来逐步调试代码。 MS guidance here。请这样做,并让我们知道确切的错误或代码在何处停止。然后我们可以帮助您解决确切的问题。
欢迎来到。