【问题标题】:Dynamic delete code erases whole table动态删除代码擦除整个表
【发布时间】:2016-09-27 10:08:51
【问题描述】:

我的代码中的删除语句有一个大问题。

运行C#、MySql for Visual Studio 和 .NET 连接器。

真的很基础:

仅供参考:Teile = 德语部分

我有一个List<Teile>,其中项目有一个 ID、一个描述和一个计数。 这个列表是给我的删除函数的(我知道,没有参数):

public static void Delete(List<TeilShort> Teileliste)
{
    string strSQL = "DELETE FROM Teile WHERE tID ";
    MySqlConnection conn = GetConnection();
    MySqlCommand cmd = new MySqlCommand(strSQL, conn);
    if (Teileliste.Count > 1)
    {
        strSQL += "IN (";
        foreach (var item in Teileliste)
        {
            strSQL += item.ID + ", ";
        }
        strSQL = strSQL.Substring(0, strSQL.Length - 2) + ")";
    }
    else
    {
        strSQL += "= " + Teileliste[0].ID;
    }

    Debug.WriteLine(strSQL);

    try
    {
        conn.Open();
        cmd.ExecuteNonQuery();
    }
    catch (MySqlException) { throw; }
    finally { conn.Close(); }
}

tID 是我的表 Teile 的 主键

当我评论整个 if 语句并将 = 14 添加到 strSQL 时,它工作得非常好并且只删除 ID 为 14 的条目。

如果我的 Teileliste 中只有一项并且代码自行编写(Debug.WriteLine(strSQL); 输出相同, 我表中的每个实体都会被删除

还好我里面只有测试数据。

谁能告诉我问题出在哪里?

问候 迭戈

【问题讨论】:

  • 确保Teileliste 中没有每个ID,使用某种视图可能会过滤掉一些/大部分。该循环可以替换为string.Join(",", Teileliste)
  • 我确信Teileliste只有一个ID,因为Debug.WriteLine显示的是=ID而不是IN ()语句。我如何从Teileliste 中获取 ID,因为其中有 ID, Description and Partcount 项目?
  • 请将您在Debug.Print 中获得的 SQL 命令发布为只有一个 ID 和多个 ID。
  • @Shnugo 只需删除一项即可:DELETE FROM Teile WHERE tID = 18 不止一项:DELETE FROM Teile WHERE tID IN (18, 17) 当我将其复制到我的 PhpMyAdmin 中时,它工作得非常好。
  • 对不起,我以为是List&lt;string&gt;:string.Join(",", Teileliste.Select( s=&gt; s.Id.ToString().ToArray()));

标签: c# mysql sql sql-delete dynamic-sql


【解决方案1】:

你在你的例程之上定义你的命令

string strSQL = "DELETE FROM Teile WHERE tID ";
MySqlConnection conn = GetConnection();
MySqlCommand cmd = new MySqlCommand(strSQL, conn);

在此之后,您构建了命令字符串,但从未将这个新命令设置到命令对象中。所以你的 int-ID 被解释为布尔值。 0 以外的所有内容都是 true。这就是你删除所有内容的原因......

尝试在命令生成后移动new MySqlCommand......

【讨论】:

  • 谢谢,那是我的问题!现在我觉得自己很愚蠢:D
  • @Diego 没关系,到处都是绿色灌木!快乐编码! Grüße aus Wien!
猜你喜欢
  • 2016-05-12
  • 1970-01-01
  • 2022-10-05
  • 2013-10-28
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多