InvalidOperationException:没有当前行错误

时间:2017-05-28 11:32:26

标签: c# sqlite login

我在登录表单上收到此错误。我不确定修复它因为我不知道什么是错的。

  

InvalidOperationException:没有当前行

当我启动应用程序时,它会崩溃。

enter image description here

     private void buttonLogin_Click(object sender, EventArgs e)
    {
         SQLiteConnection conn = new SQLiteConnection("data source = zivali_v2.sqlite");
         conn.Open();
         SQLiteCommand com = new SQLiteCommand(conn);

         com.CommandText = "SELECT * FROM login;";

         SQLiteDataReader reader = com.ExecuteReader();

             string username = reader["username"].ToString();
             string password = reader["password"].ToString();

         bool loginValid = false;
         while (reader.Read())
         {
             if (username == textBoxUserName.Text && password == textBoxPassword.Text)
             {
                 loginValid = true;
                 break;

             }
         }

         if (loginValid)
         {
             MessageBox.Show("OK");
         }
         else
         {
             MessageBox.Show("Wrong username or password");
         }
         conn.Close();

    }

1 个答案:

答案 0 :(得分:0)

读者对象代表查询的结果,其形状类似于表格,即它具有列和行。

reader["username"]之类的表达式读取指定列和当前行中的值。但在第一次Read()调用之前,没有当前行。这是错误消息告诉您的内容。

您不得将reader["username"]电话移出循环;你必须在每次循环迭代中调用以从每一行获取一个新值:

while (reader.Read()) {
    username = reader["username"] ...
}

(最好让数据库使用比较,并使用use parameters。)