gpt4 book ai didi

c# - 仅当满足某些条件时才从 MySQL 数据库中删除行

转载 作者:行者123 更新时间:2023-11-29 07:46:04 24 4
gpt4 key购买 nike

我目前正在为大学开发一个简单的 Windows 窗体错误报告程序,但遇到了麻烦。我正在尝试创建一个查询,其中用户只能在以下情况下删除错误:

  • 错误名称存在
  • 登录的用户与报告错误的用户相符。

目前,无论使用哪种用户登录,查询始终返回“错误的用户登录!”并且不会删除错误。

我在 C# 和 MySQL 方面都是新手,所以我确信我的代码不是编写它的最佳方式。如果难以阅读,我深表歉意。

编辑

这是我基于以下答案的当前代码,但仍然不起作用。我目前在结果中找不到指定的列:bug_subscribed_by

 connection = new MySqlConnection(connectionString);
string check = "SELECT COUNT(*) FROM bugs WHERE bug_name ='" + this.txt_bug_name.Text + "'AND bug_submitted_by='" + this.lbl_user.Text + "';";
MySqlCommand cmd = new MySqlCommand(check, connection);
MySqlDataReader reader;
connection.Open();
reader = cmd.ExecuteReader();
if (reader.Read())
{

if (reader.GetString("bug_submitted_by").Equals(this.lbl_user.Text))
{
reader.Close();
cmd.Dispose();
string query = "DELETE from bugs WHERE bug_name='" + this.txt_bug_name.Text + "';";
MySqlCommand cmd2 = new MySqlCommand(query, connection);
MySqlDataReader reader2;
reader2 = cmd2.ExecuteReader();
lbl_message.Text = "Bug Deleted!";
reader2.Close();
cmd2.Dispose();
connection.Close();
load_table();
Combo_selection();
reset(this);

}
else
{
lbl_message.Text = "Incorrect user!";
reader.Close();
cmd.Dispose();
connection.Close();
cb_names.SelectedIndex = -1;
}
}
else
{
lbl_message.Text = "Bug Doesn't Exist!";
}

最佳答案

首先作为旁注,我建议您研究一下 C# 中的参数化查询。我将在回答中使用这种语法,但我相信您很容易理解。鉴于您正在尝试执行多项操作(检查错误是否存在,检查错误是否由该用户编写,如果满足条件则删除该错误),我建议您将其分解成碎片并将它们全部重新组合在一起。

首先,我们可以编写一个查询来查看是否存在错误。我们可以聪明地选择错误名称以及提交者:

using(var conn = new MySqlConnection(ConnectionString)
{
conn.Open();
using(var cmd = new MySqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = "SELECT bug_name, bug_submitted_by FROM bugs WHERE bug_name = @name";
cmd.Parameters.AddWithValue("@name", this.txt_bug_name.Text);
using(var reader = cmd.ExecuteReader())
{
if(reader.Read())
{
// Will fill in next
}
}
}
}

旁注:如果您不熟悉使用,请参阅此 question以获得一些见解。这样您就不必担心如何处置对象,一旦您离开 using block 的范围,它们就会被处置。

因此,上面的查询从表中提取 bug 名称与输入匹配的行。内部 if 语句用于确保返回一行。如果是,请检查用户名并做出相应 react 。如果没有,请做出如下相应 react :

using(var conn = new MySqlConnection(ConnectionString)
{
conn.Open();
using(var cmd = new MySqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = "SELECT bug_name, bug_submitted_by FROM bugs WHERE bug_name = @name";
cmd.Parameters.AddWithValue("@name", this.txt_bug_name.Text);
using(var reader = cmd.ExecuteReader())
{
if(reader.Read())
{
// We got a row
if(reader.GetString("bug_submitted_by").Equals(this.lbl_user.Text))
{
// If the username matches delete it
using(var cmd2 = new MySqlCommand())
{
cmd2.Connection = conn;
cmd2.CommandText = "DELETE FROM bugs WHERE bug_name = @name";
cmd2.Parameters.AddWithValue("@name", this.txt_bug_name.Text);
cmd2.ExecuteNonQuery();
lbl_message.Text = "Bug Deleted!";
}
}
else
{
// Username doesn't match
lbl_message.Text = "Incorrect user!";
}
}
else
{
// We didn't get a row
lbl_message = "Bug Doesn't Exist!";
}
}
}
}

此查询做的是防止特定错误名称出现两次的情况。如果您的数据库限制了这一点,那么您就可以了。如果没有,您需要实现一些检查以确保您只返回一行。

关于c# - 仅当满足某些条件时才从 MySQL 数据库中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27768675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com