Оператор INSERT пытается вставить данные в столбец, который не указан в коде - PullRequest
1 голос
/ 02 мая 2019

Я пытаюсь вставить данные в столбец ansatID в таблице, показанной на картинке.Пользователь должен отметить строку в DataGridView, вставить свой идентификатор в textBox1 слева, затем нажать кнопку «Tilføj ansat til vagten», и его идентификатор должен быть вставлен в столбец ansatID для отмеченной строки в DataGridView.Но я получаю сообщение об ошибке: '' Невозможно вставить значение NULL в столбец 'Dato', таблица 'Vagtplan.dbo.Vagter';столбец не допускает пустых значений.Вставить не удается.Оператор был прерван. '' Меня интересует, почему оператор пытается вставить данные в столбец 'Dato' ??Я пробовал следующий код:

 private void button5_Click(object sender, EventArgs e)
    {

        try
        {
            String ConnectionString = @"Data Source=.\SQLEXPRESS01;Initial Catalog=Vagtplan;Integrated Security=True";
            SqlConnection myconnection = new SqlConnection(ConnectionString);
            myconnection.Open();

            SqlCommand AddNumberCommand = myconnection.CreateCommand();
            AddNumberCommand.CommandText = "INSERT INTO dbo.Vagter ([ansatID]) VALUES (@ansatID)";

            AddNumberCommand.Parameters.Add("@ansatID", SqlDbType.Int).Value = textBox1.Text;

            AddNumberCommand.ExecuteNonQuery();

            myconnection.Close();
            MessageBox.Show("Du har valgt vagten.");
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

Columd ansatID является внешним ключом в таблице, а столбец ansatID имеет значение NULL.Ожидаемый результат заключается в том, что ansatID должен быть вставлен в столбец ansatID для отмеченной строки в DataGridView.Таблица показана на прилагаемой картинке.

Picture

Ответы [ 2 ]

0 голосов
/ 02 мая 2019

Проблема в том, что вы используете INSERT. Оператор INSERT вставляет полную строку данных. В вашем случае, так как вы указываете значение только для одного столбца, SQL Server попытается вставить NULL во все столбцы, которые вы не назвали, и именно это выдает ошибку, которую вы видите. Ваше INSERT утверждение хорошо отформатировано (красиво сделано!), Но это не совсем то, что вы хотите.

Вы ищете UPDATE заявление. Это будет выглядеть примерно так:

...
AddNumberCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE <Primary Key Field(s) Here> = <Appropriate Value(s)>";
...
0 голосов
/ 02 мая 2019

его идентификатор должен быть вставлен в столбец ansatID для помеченной строки в DataGridView

Это неправильный путь. Вы пытаетесь обновить колонку. Каков ваш первичный ключ?

UPDATE dbo.Vagter set [ansatID] = @ansatID WHERE MyPK = @myPk;
...