2017-05-28 23 views
0

ログインフォームにこのエラーが表示されます。私は何が間違っているのか分からないので、私はそれを修正することについて確信しています。InvalidOperationException:現在の行エラーがありません

例外InvalidOperationException:なし現在の行

Iアプリを起動すると、それがクラッシュ。

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(); 

    } 
+0

ねえ、あなたの接続文字列はどうですか? 'SQLiteConnection conn =新しいSQLiteConnection("データソース= zivali_v2.sqlite ");' –

+0

あなたはどういう意味ですか?私の接続は問題だと思いますか? – krneki

+0

conn.open()関数でエラーが発生していないのは奇妙です。どのDBに接続しようとしていますか? –

答えて

0

リーダーオブジェクト、すなわち、それは列と行を有するテーブル状に形成されているクエリの結果を表します。

reader["username"]のような式は、指定された列の値と現在の行のの値を読み取ります。しかし、最初のRead()コールの前には、現在の行はありません。これは、エラーメッセージがあなたに伝えるものです。

reader["username"]コールをループから移動しないでください。あなたはそれぞれの行から新しい値を取得するには、各ループ反復で呼び出しを行う必要があります。

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

(そして、データベースが比較を使用できるように、より良いアイデアかも、とuse parametersになります。)

関連する問題