动态删除代码擦除整个表

时间:2016-05-29 14:30:09

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

我的代码中的删除语句存在一个主要问题。

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

这是非常基本的:

FYI: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);输出相同, 我的表格中的每个实体都被删除

幸运的是,我只有测试数据。

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

问候 迭

1 个答案:

答案 0 :(得分:4)

您可以使用

在日常工作中定义命令
string strSQL = "DELETE FROM Teile WHERE tID ";
MySqlConnection conn = GetConnection();
MySqlCommand cmd = new MySqlCommand(strSQL, conn);

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

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