Rez*_*zie 13 c# parameters system.data.sqlite
我试图使用参数化查询运行批量删除.目前,我有以下代码:
pendingDeletions = new SQLiteCommand(@"DELETE FROM [centres] WHERE [name] = $name", conn);
foreach (string name in selected)
pendingDeletions.Parameters.AddWithValue("$name", name);
pendingDeletions.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
但是,参数的值似乎每次都被覆盖,我最终只删除了最后一个中心.使用值列表执行参数化查询的正确方法是什么?
Rob*_*vey 13
foreach (string name in selected)
{
pendingDeletions.Parameters.AddWithValue("$name", name); <--
pendingDeletions.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
Rezzie,您当前的代码相当于:
pendingDeletions = new SQLiteCommand(@"DELETE FROM [centres] WHERE [name] = $name", conn);
foreach (string name in selected)
{
pendingDeletions.Parameters.AddWithValue("$name", centre.Name);
}
pendingDeletions.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)
这意味着您只执行一次查询,并且"可选"枚举中的最后一个值.
这是首要原因,我始终始终始终使用上条件语句块分隔符,总是循环.
因此,如果您将参数赋值和查询执行包含在循环中,那么您应该很高兴.
pendingDeletions = new SQLiteCommand(@"DELETE FROM [centres] WHERE [name] = $name", conn);
foreach (string name in selected)
{
pendingDeletions.Parameters.AddWithValue("$name", centre.Name);
pendingDeletions.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)