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

Ошибка, которую я получаю, - это необработанное исключение типа «System.Data.OleDb.OleDbException», произошедшее в System.Data.dll.

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

но это когда все параметры представляют собой приведенный ниже код:

private OleDbDataReader dbReader;// Data Reader object
    string sConnection = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=ICTSchool.accdb";
    string sql;
    OleDbConnection dbConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=ICTSchool.accdb");
    OleDbCommand dbCommand;

public class ComboboxItem
    {
        public string Text { get; set; }
        public object Value { get; set; }

        public override string ToString()
        {
            return Text;
        }
    } 

private void bAdd_Click(object sender, EventArgs e)
    {
        {
            dbConn = new OleDbConnection(sConnection);

            dbConn.ConnectionString = sConnection;


            dbConn.Open();
            string code = (cBQualification.SelectedItem as ComboboxItem).Value.ToString();
            string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")";
            Console.WriteLine("Test 'sqlinsert' "+ sqlinsert);

            dbCommand = new OleDbCommand(sqlinsert, dbConn);

            dbCommand.ExecuteNonQuery();
        }
    }

person user3321800    schedule 20.05.2017    source источник
comment
А как выглядит ученический стол? И если в таблице есть только эти четыре ненулевых поля, вы уверены, что одно или несколько текстовых полей в вашем приложении не пусты? И, наконец, текстовые поля должны быть заключены в одинарные кавычки, чего вы не делаете.   -  person Allen King    schedule 20.05.2017


Ответы (3)


Вот часть статьи о том, как вставлять значения в MS Access. Чтобы добавить одну запись в таблицу, вы должны использовать список полей, чтобы определить, в какие поля помещать данные, а затем вы должны указать сами данные в списке значений. Чтобы определить список значений, используйте предложение VALUES.

Например, следующий оператор вставит значения «1», «Келли» и «Джилл» в поля CustomerID, Last Name и First Name соответственно.

ВСТАВИТЬ В tblCustomers (CustomerID, [Фамилия], [Имя]) ЗНАЧЕНИЯ (1, 'Келли', 'Джилл')

Вы можете опустить список полей, но только если вы предоставите все значения, которые может содержать запись.

ВСТАВЬТЕ В tblCustomers VALUES (1, Kelly, «Jill», «555-1040», «[email protected]»)

Источник MSDN Практическое руководство: вставка, обновление и удаление Записи из таблицы с помощью Access SQL

person Samvel Petrosov    schedule 20.05.2017

Проблема, которую я вижу, может быть связана с некорректным выражением SQL. Строковые значения (NVARCHAR, VARCHAR) должны быть заключены в одинарные кавычки, которые, я считаю, не так, как вы делаете сейчас со следующим утверждением

string sqlinsert = "INSERT INTO Student VALUES (" + tBStudentNum.Text + "," + tBStudentName.Text+","+ tBCellNo.Text+","+ code + ")";

Попробуйте изменить оператор SQL на

string sqlinsert = $"INSERT INTO Student VALUES ({tBStudentNum.Text}, '{tBStudentName.Text}', {tBCellNo.Text}, '{code}')";

В приведенном выше случае я сделал предположение, что tBStudentNum.Text и tBCellNo.Text являются числовыми значениями. Если нет, вы можете внести соответствующие изменения, чтобы поместить значения в одинарные кавычки.

Если вы используете более раннюю версию .net/C#, замените выражение $ на функцию string.format.

person Gururaj    schedule 20.05.2017

Ряд наблюдений:

  1. Вы не указали параметры в SQL, поэтому мы можем только предположить, что в таблице Student есть четыре поля.
  2. Вы не используете именованные параметры — обычно это плохая практика.
  3. Вы используете конкатенированные значения и SQL - это сделает вас уязвимыми для атаки SQL Injection
  4. Любое из текстовых полей может содержать запятую или другие символы форматирования SQL, приводящие к ошибкам SQL.
person PhillipH    schedule 20.05.2017