ASP.net c# SQL.如果表中存在记录组合,则删除该记录

本文关键字:记录 组合 删除 存在 net SQL 如果 ASP | 更新日期: 2023-09-27 18:15:33

我在图像详细页面上有一个按钮,允许用户将所述图像添加到当前工作的"收藏夹"中,我只是选择当前的querystring ID作为图像id, session["bruger_id"]作为用户Id,并将其插入到名为"favoritter"的表中

我怎么做的:

protected void Button_favorit_Click(object sender, EventArgs e)
{
    if (Session["bruger_id"] != null)
    {

        SqlConnection conn = new SqlConnection();
        conn.ConnectionString =
            ConfigurationManager.ConnectionStrings["DatabaseConnectionString1"].ToString();
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        int nID = int.Parse(Request.QueryString["ID"].ToString());
        cmd.CommandText =
            "INSERT INTO Favoritter"
            + "(FK_bruger_id, FK_billede_id) VALUES (@fk_bruger_id, @FK_billede_id)";
        cmd.Parameters.Add("@FK_billede_id", SqlDbType.Int).Value = nID;
        cmd.Parameters.Add("@FK_bruger_id", SqlDbType.Int).Value = Session["bruger_id"];

        conn.Open();
        cmd.ExecuteNonQuery();

        conn.Close();
        Label_favorit.Text = "Billedet blev tilføjet til Favoritter.";
    }
    else
    {
        Label_favorit.Text = "Logind for at tilføje som favorit";
    }
}

所以我的问题是:如果用户已经将图像添加到收藏夹中,他目前可以一次又一次地这样做,并且多次将同一图像添加为收藏夹,这是不好的。所以如果fk_user_id已经收藏了FK_image_id

,我希望按钮显示"从收藏中删除"

但我不知道如何检查fk_user_idfk_image_id的组合是否已经存在。如果是,它应该是DELETE FROM而不是INSERT INTO

ASP.net c# SQL.如果表中存在记录组合,则删除该记录

cmd.CommandText = "SELECT Id FROM Favoritter WHERE (FK_user_id = @fk_user_id and FK_image_id = @fk_image_id)";
...
var reader = cmd.ExecuteReader();

检查返回的数据

对userid和imageid的组合执行select查询。如果返回任何内容,则删除它(使用返回的记录id-如果不存在组合,则将为空)并输入新记录。

我认为从逻辑上删除记录也可能有帮助,但这将需要改变结构…

您可以在一个查询中执行此任务。命令文本看起来像这样:

cmd.CommandText =
          "IF NOT EXISTS (SELECT * FROM Favoritter"
        + "WHERE FK_bruger_id = @fk_bruger_id AND FK_billede_id = @FK_billede_id)"
        + "BEGIN"
        + "INSERT INTO Favoritter"
        + "(FK_bruger_id, FK_billede_id) VALUES (@fk_bruger_id, @FK_billede_id)";
        + "END"
    cmd.Parameters.Add("@FK_billede_id", SqlDbType.Int).Value = nID;
    cmd.Parameters.Add("@FK_bruger_id", SqlDbType.Int).Value = Session["bruger_id"];