C# 使用更新查询更新外键

C# 使用更新查询更新外键,c#,mysql,visual-studio,C#,Mysql,Visual Studio,我试图更新一个列,它是一个外键,我试图将它设置为“NULL”值,但错误显示“错误1452:无法添加或更新子行:外键约束失败。” 您需要首先更新实际表中此键的值(即使用此键引用的表)您需要首先更新实际表中此键的值(即使用此键引用的表)您知道DBNull.value.ToString()的结果吗? 这是一个空字符串。这意味着,如果这两个表之间存在关系,则您正试图基于空字符串将更新的记录与第二个表上的记录关联起来。 当然,如果相关表没有主键设置为空字符串的记录,则更新将失败 如果要将该字段设置为NUL

我试图更新一个列,它是一个外键,我试图将它设置为“NULL”值,但错误显示“错误1452:无法添加或更新子行:外键约束失败。”


您需要首先更新实际表中此键的值(即使用此键引用的表)

您需要首先更新实际表中此键的值(即使用此键引用的表)

您知道DBNull.value.ToString()的结果吗?
这是一个空字符串。这意味着,如果这两个表之间存在关系,则您正试图基于空字符串将更新的记录与第二个表上的记录关联起来。
当然,如果相关表没有主键设置为空字符串的记录,则更新将失败

如果要将该字段设置为NULL,则显式写入(无引号)

当然,只有当您允许在PersonalInfoID列中存储NULL时,这才有效

另外,我还将您的代码更改为使用参数化查询。这是构建sql命令文本的唯一正确方法。

不要连接字符串。这是一个非常大的错误(搜索)

您知道DBNull.Value.ToString()的结果是什么吗?
这是一个空字符串。这意味着,如果这两个表之间存在关系,则您正试图基于空字符串将更新的记录与第二个表上的记录关联起来。
当然,如果相关表没有主键设置为空字符串的记录,则更新将失败

如果要将该字段设置为NULL,则显式写入(无引号)

当然,只有当您允许在PersonalInfoID列中存储NULL时,这才有效

另外,我还将您的代码更改为使用参数化查询。这是构建sql命令文本的唯一正确方法。

不要连接字符串。这是一个非常大的错误(搜索)

警告:不要在查询中插入原始字符串。始终保留任何和所有用户数据,否则您将创建糟糕的数据。警告:不要将原始字符串插入查询中。总是使用任何和所有用户数据,否则您将创建糟糕的数据。您的意思是,我必须将主键更新到引用它的位置?是的,您需要更新引用表的主键,因为您给外键的任何值都将被检查,而该值存在于引用表的主键中?您的意思是,我必须将主键更新到引用它的位置?是的,您需要更新引用表的主键,因为您给外键的任何值都将被检查,即存在于引用表的主键中?这实际上很有帮助,非常感谢,感谢您上的小课。注意:)这真的很有帮助,非常感谢你,感谢你的小课。注:)
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);
}
MySqlCommand cmd = new MySqlCommand(
            @"UPDATE tblcdsummary 
                set PersonalInfoID = NULL 
                WHERE CDID = @id", con);
cmd.Parameters.Add("@id", MySqlDbType.VarChar).Value = looplabel2.Text;