我尝试将数据插入图片所示表中的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列中。该表如附图所示。
答案 0 :(得分:0)
他的ID应该插入ansatID列中,用于标记行 DataGridView
这是错误的方式。您尝试更新列。你的主键是什么?
UPDATE dbo.Vagter set [ansatID] = @ansatID WHERE MyPK = @myPk;
答案 1 :(得分:0)
问题是您正在使用INSERT
。 INSERT
语句插入完整的行数据。在您的情况下,由于您只为一个列指定了一个值,因此SQL Server会尝试将NULL
插入所有未命名的列中,这就是抛出您所看到的错误的原因。您的INSERT
语句格式正确(很好!),但这并不是您真正想要的语句。
您正在寻找UPDATE
语句。看起来像这样:
...
AddNumberCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE <Primary Key Field(s) Here> = <Appropriate Value(s)>";
...