我正在尝试更新列,这是一个外键,我正在尝试将其设置为“NULL”值,但错误显示“错误1452:无法添加或更新子行:外键约束失败。“
try
{
con.Open();
MySqlCommand cmd = new MySqlCommand(
"UPDATE tblcdsummary
set PersonalInfoID = '" + DBNull.Value.ToString() +
"' WHERE CDID = '" + looplabel2.Text + "'", con);
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception x)
{
MessageBox.Show(x.Message);
}
答案 0 :(得分:2)
您需要首先在其实际表中更新此键的值(即使用此键引用的表)
答案 1 :(得分:2)
你知道DBNull.Value.ToString()的结果是什么吗?
这是一个空字符串。这意味着如果这两个表之间存在关系,那么您将尝试将更新的记录与基于空字符串的第二个表上的记录相关联。
当然,如果相关表没有将其主键设置为空字符串的记录,则更新将失败。
如果要将该字段设置为NULL,则明确写入(无引号)
MySqlCommand cmd = new MySqlCommand(
@"UPDATE tblcdsummary
set PersonalInfoID = NULL
WHERE CDID = @id", con);
cmd.Parameters.Add("@id", MySqlDbType.VarChar).Value = looplabel2.Text;
当然,仅当您允许将NULL存储在PersonalInfoID列
中时,此方法才有效PS。我还更改了您的代码以使用参数化查询。这是构建sql命令文本的唯一正确方法 不要连接字符串。这是一个非常大的错误(搜索Sql Injection)