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_id
和fk_image_id
的组合是否已经存在。如果是,它应该是DELETE FROM
而不是INSERT INTO
。
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"];