我在登录表单上收到此错误。我不确定修复它因为我不知道什么是错的。
InvalidOperationException:没有当前行
当我启动应用程序时,它会崩溃。
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();
}
答案 0 :(得分:0)
读者对象代表查询的结果,其形状类似于表格,即它具有列和行。
reader["username"]
之类的表达式读取指定列和当前行中的值。但在第一次Read()
调用之前,没有当前行。这是错误消息告诉您的内容。
您不得将reader["username"]
电话移出循环;你必须在每次循环迭代中调用以从每一行获取一个新值:
while (reader.Read()) {
username = reader["username"] ...
}
(最好让数据库使用比较,并使用use parameters。)