Не указано значение для одного или нескольких обязательных параметров dr=ExecuteReader()

private void PopuniListu(){
    listBox1.Items.Clear();

    conn = new OleDbConnection(connString);
    conn.Open();

    cmd.Connection = conn;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "SELECT Imeiprezimeautora FROM Tabela1";

    dr = cmd.ExecuteReader();

    while (dr.Read())
    {
        listBox1.Items.Add(dr.GetValue(0));
    }

    dr.Close();
    conn.Close();
 }

Вот ошибка:

Не указано значение для одного или нескольких обязательных параметров.

др = cmd.ExecuteReader()


person user3083925    schedule 09.12.2013    source источник
comment
В таблице Tabela1 нет поля с именем Imeiprezimeautora   -  person Steve    schedule 09.12.2013
comment
Поле Imeiprezimeautora составляет 100% в таблице Tabela1...   -  person user3083925    schedule 09.12.2013


Ответы (1)


При использовании поставщика OleDb (в частности, с MS-Access, но я не могу исключить то же самое для других поставщиков) механизм синтаксического анализа проверяет, присутствует ли каждая часть списка столбцов в предложении SELECT в запрашиваемой таблице. Если по какой-либо причине (обычно из-за опечатки в имени столбца) механизм не может найти соответствующий столбец, он рассматривает это имя как параметр и ожидает, что параметр предоставлен в коллекции OleDbCommand.Parameters.
Если параметры отсутствуют, то вылетает вышеуказанная ошибка.

Другая возможность заключается в том, что вы не инициализируете переменную cmd в приведенном выше коде.
Это означает, что вы используете глобальную переменную для OleDbCommand.
Переменная, которая могла использоваться для другого запроса и ее коллекция параметров не пуста.

Попробуйте добавить эту строку перед выполнением запроса

cmd.Parameters.Clear();
cmd.CommandText = "SELECT Imeiprezimeautora FROM Tabela1";

Однако, если это проблема, то я настоятельно рекомендую вам переосмыслить этот подход и избегать глобальных переменных для такого рода работы.
При локальном определении и инициализации OleDbCommand нет измеримого снижения производительности.

person Steve    schedule 09.12.2013