【发布时间】: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<string>:string.Join(",", Teileliste.Select( s=> s.Id.ToString().ToArray()));
标签: c# mysql sql sql-delete dynamic-sql