System.Data.SQLite参数化多个值的查询?

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)


Sky*_*ers 7

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)

  • ps我提到**总是**附带条件和循环?;-) (6认同)
  • 是的,我意识到执行是在循环之外 - 我(错误地)假设我正在构建命令的替换列表,当时我实际上只是重复覆盖一个替换. (3认同)