0

C#を使用してデータベースを更新しようとしていますが、「UPDATEステートメントの構文エラー」というエラーが表示されます。私はこのエラーの他の例を探して、たくさん見つけましたが、それぞれが異なります。多くのことがこのエラーを引き起こす可能性があり、私はこれに指を置くことができません。

query = String.Format(@"UPDATE PAYMENT 
                    SET MONTANT={0}, TYPE='4-Comptant',note='PPA',flag='O', date='{2:yyyyMMdd}'       
                    WHERE num_payment={1}", -payment, id, dt);
                    daUpdate.UpdateCommand.CommandText = query;
                    daUpdate.UpdateCommand.ExecuteNonQuery();  //update the table in the database

デバッグモードでは、次のようになります。文字列は次のようになります。

支払いの更新
                                                SET MONTANT = -390、TYPE = '4-Comptant'、note ='PPA'、flag ='O'、date = '20120601'
                                                WHERE num_payment = 8

データベースでは、num_paymentは長整数で主キーです。MONTANTはダブルで、他はすべてテキストです。

編集:人々のアドバイスに従って、私は物事を少し変更しましたが、それでも同じエラーが発生します。現在の状態は次のとおりです。

                    OleDbCommand cmd = _con.CreateCommand();
                    cmd.CommandText = @"UPDATE PAYMENT 
                    SET MONTANT=@montant, [TYPE]='4-Comptant',note='PPA',flag='O', [date]=@theDate 
                    WHERE num_payment=@numPayment";

                    cmd.Parameters.AddWithValue("@montant", -payment);
                    cmd.Parameters.AddWithValue("@theDate", String.Format("{0:yyyyMMdd}", dt));
                    cmd.Parameters.AddWithValue("@numPayment", id);
                    cmd.ExecuteNonQuery();

デバッグ出力は以前と同じように見えますが、実際の値の代わりに「@something」が表示される点が異なります。

4

2 に答える 2

1

[TYPE] と [DATE] を角括弧で囲みます。これらは SQL キーワードです。

query = String.Format(@"UPDATE PAYMENT  
                SET MONTANT={0}, [TYPE]='4-Comptant',note='PPA',flag='O', [date]='{2:yyyyMMdd}'        
                WHERE num_payment={1}", -payment, id, dt); 
                daUpdate.UpdateCommand.CommandText = query; 
                daUpdate.UpdateCommand.ExecuteNonQuery();  //update the table in the 
于 2012-06-01T17:19:27.097 に答える
1

フィールド 'note' と 'flag' は [] で囲む必要がありました。これらを追加したところ、クエリでそのエラーが発生しなくなりました。

于 2012-06-02T18:06:19.393 に答える