如何使用N的参数从C#更新MS Access中的前N行

本文关键字:Access MS 何使用 参数 更新 | 更新日期: 2023-09-27 18:29:18

我有这个代码,但我知道我应该使用参数。

foreach (ListViewItem item in lstViewFuentes.CheckedItems)
{
    cmdUpdate.CommandText = "UPDATE (SELECT TOP " + int.Parse(item.SubItems[2].Text) + " seleccionada " +
                            "FROM PreguntasRespuestas " +
                            "WHERE nombreFuente = ?) AS pyr " +
                            "SET pyr.seleccionada='S'";         
     cmdUpdate.Parameters.Add("@nombreFuente", OleDbType.VarChar).Value = item.SubItems[0].Text ;
     cmdUpdate.ExecuteNonQuery();
     cmdUpdate.Parameters.Clear();
}

如果你同意我的观点,下一块代码应该是这样的,但这给了我一个错误

cmdUpdate.CommandText = "UPDATE (SELECT TOP ? seleccionada " +
                        "FROM PreguntasRespuestas " +
                        "WHERE nombreFuente = ?) AS pyr " +
                        "SET pyr.seleccionada='S'";
foreach (ListViewItem item in lstViewFuentes.CheckedItems)
{
     cmdUpdate.Parameters.Add("@numPreguntas", OleDbType.Integer).Value = int.Parse(item.SubItems[2].Text);
     cmdUpdate.Parameters.Add("@nombreFuente", OleDbType.VarChar).Value = item.SubItems[0].Text ;
     cmdUpdate.ExecuteNonQuery();
     cmdUpdate.Parameters.Clear();
}

当我使用上面的块时,我收到一个错误,说SELECT指令包含一个保留字,错过了一个参数或拼写错误,所以……我不明白为什么不需要?作为SELECT TOP中N的参数。。。

如何使用N的参数从C#更新MS Access中的前N行

Access数据库引擎将不接受SELECT TOP的参数。您必须在SQL语句中静态地提供该值。

另请参阅限制基于表单控件返回的记录数。