2

このコードは機能していますが、代わりにパラメーターを使用する必要があることはわかっています。

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 のパラメータとして...

4

1 に答える 1

1

Access のデータベース エンジンは、 のパラメータを受け入れませんSELECT TOP。SQL ステートメントで値を静的に指定する必要があります。

フォーム コントロールに基づいて返されるレコード数を制限するも参照してください。

于 2013-08-27T19:20:32.410 に答える