我有一个具有用户名texbox和密码文本框的登录程序。程序应该从用户获取用户的名称和密码,并将其与访问数据库文件中可用的名称和密码相匹配。该文件位于bin / debug文件夹中。问题是while循环不起作用,我只从循环中得到“不正确的用户名和密码消息”。有人可以帮我吗? 这是我的代码:
private void loginButton_Click(object sender, EventArgs e)
{
try
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
command.CommandText = "select * from login where UserName= '" + userTextBox.Text + "'and Password= '" + passwordTextBOx.Text + "'";
OleDbDataReader reader = command.ExecuteReader();
int count = 0;
while (reader.Read())
{
count = count + 1;
}
if (count == 1)
{
this.Hide();
Form newForm = new Form();// create new form
newForm.Show();//display newform
}
if (count > 1)
{
MessageBox.Show("Duplicate UserName and Password");
}
else
{
MessageBox.Show("Incorrect UserName and Password");
}
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
答案 0 :(得分:4)
如果你想要的只是返回的行数,你应该使用ExecuteScalar
和command.CommandText = "select Count(*) from login where UserName= @Username and Password= @Password";
command.Parameters.AddWithValue("@Username", userTextBox.Text);
command.Parameters.AddWithValue("@Password", passwordTextBOx.Text);
OleDbDataReader reader = command.ExecuteScalar();
while (reader.Read())
{
count = reader.GetInt32(0);
}
:
@Username / @Password
请注意,OleDb不支持命名参数。因此,当我将它们命名为dt:first-child + dd {
opacity: 1;
}
时,这些实际上只是占位符。 OleDb仅使用位置参数,因此将它们添加到查询中的顺序非常重要。首先添加密码会给你一个错误的结果。