Shaddow>dark Ответов: 1

Невозможно вставить значение NULL в столбец 'emp_num', таблицу 'comp.task.dbo.employee'; столбец не допускает значений null. Вставить не удается. Заявление было прекращено.


Private Sub dept_num_TextChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dept_num.TextChanged
        Dim con As SqlConnection = New SqlConnection("Data Source=S-MHAMEED\SQL2008RTWO;Initial Catalog=comp.task;User ID=..;Password=...")
        Using (con)

            Dim dt As New DataTable
            Dim sqlCom As New SqlCommand()
            Dim sqlDA As New SqlDataAdapter()

            sqlCom.Connection = con
            sqlCom.CommandText = "insert_emp"
            sqlCom.CommandType = CommandType.StoredProcedure
            sqlCom.Parameters.AddWithValue("DEBT_NUM", Val(dept_num.Text))
            sqlDA = New SqlDataAdapter(sqlCom)
            sqlDA.Fill(dt)

            If dt.Rows.Count Then
                dept_name.Text = dt.Rows(0).Item("debt_name")
                emp_num.Text = dt.Rows(0).Item("debt_emp")
            End If
        End Using
    End Sub


Что я уже пробовал:

Cannot insert the value NULL into column 'emp_num', table 'comp.task.dbo.Employee'; column does not allow nulls. INSERT fails. The statement has been terminated.

F-ES Sitecore

Сообщение об ошибке не требует пояснений, вы пытаетесь ввести NULL в поле emp_num таблицы Employee, вероятно, внутри вашего insert_emp сохраненного proc. Мы не знаем ваших входных данных или сохраненного текста proc, поэтому никаких конкретных советов мы дать не можем. Посмотрите на сохраненный proc для того, где он вставляет emp_num, посмотрите, что он вставляет, и проследите все оттуда.

Shaddow>dark

Изменить процедуру [dbo].[insert_emp]
@EMP_NUM numeric(18) = null,
@DEBT_NUM числовой(18) ,
@EMP_NAME varchar(150) =null,
@EMP_P_DATE smalldatetime =null,
@EMP_WORK_DATE smalldatetime =null,
@EMP_SAL NUMERIC(18) =null,
@EMP_DESC VARCHAR(250) =null,
@DEBT_NAME VARCHAR(150) =null
АС
НАЧАТЬ
Если не существует(выберите 1 из Employee WHERE EMP_NUM = @EMP_NUM )
НАЧАТЬ
ВСТАВИТЬ В DBO.EMPLOYEE ( DEPT_NUM ,EMP_NAME ,EMP_P_DATE ,EMP_WORK_DATE ,EMP_SAL ,EMP_DESC,DEBT_NAME )
ЗНАЧЕНИЯ (@DEBT_NUM,@EMP_NAME,@EMP_P_DATE,@EMP_WORK_DATE,@EMP_SAL,@EMP_DESC,@DEBT_NAME )
КОНЕЦ
ЕЩЕ
НАЧАТЬ
Обновление dbo.Employee
Установите emp_num =@EMP_NUM ,dept_num =@DEBT_NUM ,emp_name =@EMP_NAME ,emp_p_date =@EMP_P_DATE ,emp_work_date =@EMP_WORK_DATE ,emp_sal =@EMP_SAL ,emp_desc =@EMP_DESC ,debt_name =@DEBT_NAME
Где emp_num =@EMP_NUM

КОНЕЦ

F-ES Sitecore

Вы проходите только debt_num в вашем СП, так что все эти поля имеют значение null. Мы не знаем вашей бизнес-логики, поэтому мы не знаем, что вы хотите сделать, когда у вас есть только одно поле, только вы можете ответить на этот вопрос. Может быть, вы предполагаете, что emp_num будет полем идентификации? Если это уникальный идентификатор таблицы, и вы делаете его идентификатором, вам не нужно давать ему значение, он будет генерировать свой собственный в последовательности.

Ziee-M

Вам просто нужно заполнить все остальные параметры вашей хранимой процедуры. В вашем случае вы добавили только поле DEBT_NUM (emp_num-одно из них).
У вас будет что-то вроде этого :
sqlCom.параметры.AddWithValue("DEBT_NUM", Val(dept_num.Text))
sqlCom.параметры.AddWithValue("someOtherField", Val(поле.Текст))
...
sqlCom.параметры.AddWithValue("emp_num", Val(empNum.Text))
Надеюсь, это поможет.

1 Ответов

Рейтинг:
10

OriginalGriff

Сообщение об ошибке довольно явное:

Cannot insert the value NULL into column 'emp_num', table 'comp.task.dbo.Employee'; column does not allow nulls.

То emp_num колонна из Employee таблица определяется следующим образом NOT NULL, но ваша операция вставки не предоставляет значения.

Либо укажите значение (рекомендуется), либо измените определение таблицы.


Shaddow>dark

на ваш взгляд, что лучше всего сделать ???

OriginalGriff

Понятия не имею! Я не могу сказать, как выглядит ваш SP, ваше определение таблицы или даже что такое "emp_num" - гораздо меньше, откуда вы его получаете...

Shaddow>dark

Изменить процедуру [dbo].[insert_emp]
@EMP_NUM numeric(18) = null,
@DEBT_NUM числовой(18) ,
@EMP_NAME varchar(150) =null,
@EMP_P_DATE smalldatetime =null,
@EMP_WORK_DATE smalldatetime =null,
@EMP_SAL NUMERIC(18) =null,
@EMP_DESC VARCHAR(250) =null,
@DEBT_NAME VARCHAR(150) =null
АС
НАЧАТЬ
Если не существует(выберите 1 из Employee WHERE EMP_NUM = @EMP_NUM )
НАЧАТЬ
ВСТАВИТЬ В DBO.EMPLOYEE ( DEPT_NUM ,EMP_NAME ,EMP_P_DATE ,EMP_WORK_DATE ,EMP_SAL ,EMP_DESC,DEBT_NAME )
ЗНАЧЕНИЯ (@DEBT_NUM,@EMP_NAME,@EMP_P_DATE,@EMP_WORK_DATE,@EMP_SAL,@EMP_DESC,@DEBT_NAME )
КОНЕЦ
ЕЩЕ
НАЧАТЬ
Обновление dbo.Employee
Установите emp_num =@EMP_NUM ,dept_num =@DEBT_NUM ,emp_name =@EMP_NAME ,emp_p_date =@EMP_P_DATE ,emp_work_date =@EMP_WORK_DATE ,emp_sal =@EMP_SAL ,emp_desc =@EMP_DESC ,debt_name =@DEBT_NAME
Где emp_num =@EMP_NUM

КОНЕЦ

OriginalGriff

Поэтому, если вы не передадите значение SP - а вы этого не сделаете - оно будет равно нулю.
И столбец не может содержать нулевые значения.

Видите, что вы здесь натворили?