0

私は壁に頭をぶつけていて、「UPDATEステートメントの構文エラー」という漠然としたエラーが発生し続けています。私の更新ステートメントの何が問題なのか、誰か教えてもらえますか?

try 
{
    OleDbConnection ECon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\zoofari\zoofari\zoofari\bin\Debug\MainData.accdb");
    OleDbDataAdapter EdAdapt = new OleDbDataAdapter();
    EdAdapt.UpdateCommand = new OleDbCommand("UPDATE tbl_Results SET @Q1-Easy WHERE Username = '" +txtUname.Text+ "'", ECon);
    EdAdapt.UpdateCommand.Parameters.Add("@Q1-Easy", OleDbType.Boolean).Value = true;

    ECon.Open();
    EdAdapt.UpdateCommand.ExecuteNonQuery();
    ECon.Close();
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}
4

2 に答える 2

2

更新するフィールド名はどこですか? 更新コマンドに必要な構文は次のとおりです。

UPDATE <tablename> SET <Field> = <value> WHERE <keyfield> = <value>

代わりに、クエリには更新するフィールドがありません

 EdAdapt.UpdateCommand = new OleDbCommand("UPDATE tbl_Results" + 
                        " SET FIELDNAME= @Q1-Easy WHERE Username = '" +txtUname.Text+ "'", ECon);
                              ^^^^^^^^^^        

また、SQL コマンドを作成するために文字列連結を使用しないでください。
常にパラメーター化されたクエリを使用します。(このクエリには既にパラメーターがあります。別のパラメーターを使用してみませんか?)

フィールド名に関する以下のコメントを見ると、コードはこのように変更できます

string sqlText = "UPDATE tbl_Results SET [Q1-Easy] = ? WHERE Username = ?";
using(OleDbConnection ECon = new OleDbConnection(.....))
using(OleDbCommand cmd = new OleDbCommand(sqlText, ECon))
{
   ECon.Open();
   cmd.Parameters.Add("@Q1Value", OleDbType.Boolean).Value = true;
   cmd.Parameters.Add("@uname", OleDbType.VarChar).Value = txtUname.Text;
   cmd.ExecuteNonQuery();
}

-using ステートメントを追加して、完了時に接続が閉じられて破棄されることを確認し、フィールド名の有効な文字として受け入れられるかどうかわからないため、フィールド名を角括弧で囲みました。

また、OleDb では、パラメーターのプレースホルダーは単純な ? ただし、プレースホルダーがテキストに表示される順序に従ってコレクションに追加することが非常に重要です。OleDb は、パラメーター プレースホルダーを名前で認識しません。

于 2013-04-04T20:28:15.520 に答える
0

@Q1-Easy がフィールド名なのか値なのかはわかりませんが、フィールドを何かに設定する必要があります。

UPDATE table SET field = value WHERE field = value;

最初の「フィールド = 値」の部分が間違っています。

于 2013-04-04T20:28:07.333 に答える