虽然循环功能不正常

时间:2018-05-18 05:55:51

标签: c#

我有一个具有用户名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);
     }
}

1 个答案:

答案 0 :(得分:4)

如果你想要的只是返回的行数,你应该使用ExecuteScalarcommand.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仅使用位置参数,因此将它们添加到查询中的顺序非常重要。首先添加密码会给你一个错误的结果。