0
    void updateTaxPayer()
    {
        DataRow[] ssnRow = dbSet.Tables["TrackingSheet"].Select("SSN = '" + ssn + "'");
        ssnRow[0]["HAS SPOUSE"] = checkboxToString(chkSpouse.CheckState);
        ssnRow[0]["SPOUSE SSN"] = txtSpouseSSN.Text;
        ssnRow[0]["TNAME"] = txtName.Text;
        ssnRow[0]["ADDRESS"] = txtStreetAddress.Text;
        ssnRow[0]["CITY"] = txtCity.Text;
        ssnRow[0]["STATE"] = cbxState.SelectedIndex.ToString();
        ssnRow[0]["ZIP"] = txtZip.Text;
        ssnRow[0]["HAS NEW ADDRESS"] = checkboxToString(chkNewAddress.CheckState);
        ssnRow[0]["NEW ADDRESS"] = txtNewAddress.Text;
        ssnRow[0]["NEW CITY"] = txtNewCity.Text;
        ssnRow[0]["NEW STATE"] = cbxNewState.SelectedIndex.ToString();
        ssnRow[0]["NEW ZIP"] = txtNewZip.Text;
        ssnRow[0]["DATE FILED"] = txtDate.Text;
        ssnRow[0]["SSN"] = txtSSN.Text;
        dbAdapt.InsertCommand = cmdBuilder.GetInsertCommand(true);
        dbAdapt.UpdateCommand = cmdBuilder.GetUpdateCommand(true);
        dbAdapt.DeleteCommand = cmdBuilder.GetDeleteCommand(true);
        dbAdapt.Update(dbSet,"TrackingSheet");

    }

上記はデータベースを更新する必要があるコードですが、何らかの理由で更新しようとすると、更新コマンドの構文エラーが発生します。私は周りを検索しましたが、どうすればよいかわかりません。

dbAdapt.Update(dbSet, "TrackingSheet"); も試しました。それもうまくいきませんでした。

正確なエラーは次のとおりです。

System.Data.OleDb.OleDbException (0x80040E14): Syntax error in UPDATE statement.
   at System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
   at System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount)
   at System.Data.Common.DbDataAdapter.Update(DataRow[] dataRows, DataTableMapping tableMapping)
   at System.Data.Common.DbDataAdapter.UpdateFromDataTable(DataTable dataTable, DataTableMapping tableMapping)
   at System.Data.Common.DbDataAdapter.Update(DataSet dataSet, String srcTable)
   at trackingform.frmTrackingSheet.updateTaxPayer() in c:\Users\Anthony\Documents\Visual Studio 2012\Projects\trackingform\trackingform\frmTrackingSheet.cs:line 595
   at trackingform.frmTrackingSheet.btnSave_Click(Object sender, EventArgs e) in c:\Users\Anthony\Documents\Visual Studio 2012\Projects\trackingform\trackingform\frmTrackingSheet.cs:line 506

行 595: dbAdapt.Update(dbSet,"TrackingSheet"); 行 506: updateTaxPayer();

その他の宣言:

dbAdapt = new OleDbDataAdapter();
cmdBuilder = new OleDbCommandBuilder(dbAdapt);
dbAdapt.SelectCommand = dbCmd;
dbSet = new DataSet("TrackingSheet");
dbAdapt.Fill(dbSet, "TrackingSheet");

誰にもアイデアはありますか?ありがとう

4

1 に答える 1

0

確かなことは言えませんが、列に名前を付ける方法に関係していると思われます-スペースを含む列名を使用し、「DATE」などの列名の一部の間にパーサーのあいまいさを作成しますおよび予約語または関数名 (「DATE」関数など)。ステートメントを手作業でコーディングする場合は、そのような列名を引用符で囲んで、SQL パーサーが適切に理解できるようにしますが、コマンド ビルダーはそれを行わないため、無効な SQL が生成される可能性があります。

一般的な慣例として、列名にスペースを使用したり、「予約語」を使用したりしないようにしています。

于 2013-06-17T20:55:47.143 に答える