Невозможно применить индексирование с [] к выражению типа '' с OleDbDataReader

Я получаю следующую ошибку в моем приложении C# Windows Form:

Невозможно применить индексирование с [] к выражению типа «ChequeRegistry.oledbDataReader»

Ошибка в строке с условием if при использовании считывателя данных dr.

Как правильно получить доступ к первому столбцу в строке?

while (dr.Read())
{
    if (dr[0].ToString() == txtPassword.Text)
    {
        Main mainform = new Main();
        mainform.Show();
        this.Hide();
    }
    else
    { 
        // ...
    }
}

person Yazmin Nizamdeen    schedule 24.05.2015    source источник
comment
не имеет отношения, но тот факт, что вы сравниваете пароль в открытом виде (и, следовательно, передаете его в открытом виде по сети), означает, что вы делаете это неправильно!   -  person Mitch Wheat    schedule 24.05.2015
comment
Ну, он говорит, что вы не можете сделать это: dr[0] Так что вам, вероятно, нужно просто использовать dr или, может быть, dr.something   -  person Andrew    schedule 24.05.2015
comment
Нет. DataReader указывает только на текущую запись в базе данных, это перечислитель. Вместо этого используйте DataAdapter.   -  person jdweng    schedule 24.05.2015
comment
Внутри цикла чтения данных нельзя указать индекс, но вы можете использовать что-то вроде dr.password.ToString() == txtPassword.Text), если столбец, выбранный в операторе Select, равен password   -  person Sachu    schedule 24.05.2015
comment
Изменил вопрос, чтобы четко выразить намерение. Очищен начальный текст для улучшения читабельности. Добавлен тег для WinForms.   -  person Philip Pittle    schedule 27.05.2015


Ответы (1)


Похоже, вы используете пользовательский OleDbDataReader, который не поддерживает Элемент ([]).

Попробуйте использовать для Вместо этого используйте метод GetString:

if (dr.GetString(0) == txtPassword.Text)
person Philip Pittle    schedule 26.05.2015