INSERT语句尝试将数据插入到列中,而代码中未给出

时间:2019-05-02 18:18:46

标签: c# sql-server winforms insert

我尝试将数据插入图片所示表中的ansatID列。用户必须在DataGridView中标记一行,将其ID插入左侧的textBox1中,然后按下按钮“Tilføjansat til vagten”,并将其ID插入到ansatID列中,以用于DataGridView中的标记行。但是我收到错误消息:“无法将值NULL插入表'Vagtplan.dbo.Vagter'的列'Dato'中;列不允许为空。 INSERT失败。该语句已终止。”我想知道为什么该语句尝试将数据插入“ 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);
        }
    }

列ansatID是表中的外键,而列ansatID可为空。 预期结果是应将ansatID插入到DataGridView中标记行的ansatID列中。该表如附图所示。

Picture

2 个答案:

答案 0 :(得分:0)

  

他的ID应该插入ansatID列中,用于标记行   DataGridView

这是错误的方式。您尝试更新列。你的主键是什么?

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

答案 1 :(得分:0)

问题是您正在使用INSERTINSERT语句插入完整的数据。在您的情况下,由于您只为一个列指定了一个值,因此SQL Server会尝试将NULL插入所有未命名的列中,这就是抛出您所看到的错误的原因。您的INSERT语句格式正确(很好!),但这并不是您真正想要的语句。

您正在寻找UPDATE语句。看起来像这样:

...
AddNumberCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE <Primary Key Field(s) Here> = <Appropriate Value(s)>";
...