обновление набора данных завершается ошибкой при вставке новой строки

Я вставляю новую строку в набор данных dsStaff1 с помощью метода DataAdapter1.Update(). Я получаю следующую ошибку:

Невозможно вставить значение NULL в столбец «Включено» таблицы «dbo.tblStaff»; столбец не допускает пустых значений. ВСТАВИТЬ не удается. Заявление было прекращено.

У меня есть логическое поле «Включено» в tblStaff, которое, я полагаю, является ключевым словом в SQL Server. По умолчанию установлено значение «Истина». Я не могу изменить имя поля. Есть ли обходной путь? ИЛИ я что-то не так делаю? PS: я генерирую команды вставки, обновления с помощью построителя sqlcommand.


person hrishi    schedule 31.01.2011    source источник


Ответы (3)


Если у вас есть значение по умолчанию, ваш построитель команд SQL должен отправлять NULL (DBNull.Value), чтобы переопределить значение по умолчанию. Значение по умолчанию будет применяться только в том случае, если:

  • если вы не укажете значение для столбца в INSERT
  • или если вы используете ключевое слово ПО УМОЛЧАНИЮ

Одна из этих 2-х форм:

--Enabled is not mentioned, will use default
INSERT (col1, col1) VALUES (col1, col2) 

--Enabled will use DEFAULT
INSERT (col1, col1, Enabled) VALUES (col1, col2, DEFAULT) 
person gbn    schedule 31.01.2011
comment
Привет, спасибо за ответ. Итак, как решить проблему? Я не знаю, что находится в команде «Вставить», так как она генерируется автоматически. Нужно ли писать команду Insert явно, используя параметры Sqlcommand? Я вставил свой код внизу. Он не работает при обновлении - person hrishi; 01.02.2011

просто передайте фиксированное значение в набор данных в параметрах обновления

как

<asp:Parameter Name="col1" Type="boolean" DefaultValue="true"/>
person HAJJAJ    schedule 31.01.2011

Мой код:. Он не работает при обновлении.

        Dim dr As System.Data.DataRow

        dr = DsStaff1.Tables(0).NewRow()

        dr.BeginEdit()
        dr.Item("FirstName") = txtName.Text
        dr.Item("LastName") = txtSurname.Text

        dr.Item("StaffID") = txtStaffID.Text
        dr.Item("Enabled") = cbActive.Checked
        dr.EndEdit()
        DsStaff1.Tables(0).Rows.Add(dr)

        DataAdapter1.Update(DsStaff1)

Также я использую TableMappings в DataAdapter1.

        DataAdapter1.TableMappings.Add("Table", DsStaff1.Tables("tblStaff").ToString)

P.S. Обновление и удаление существующей строки работает нормально. Просто вставка новой строки не работает.

person hrishi    schedule 01.02.2011