C# 第一次使用 update/inner 连接查询,收到语法错误

C# First time using an update/inner join query, receiving a syntax error

我有两个表,ACTB 和 ACXL,我的程序中都是 Access 表。出于我的目的,我希望在查询结束时清除 ACXL 的内容。

总结:

在程序中,用户访问一个打开的文件对话框并选择一个Excel 文件。所述文件被插入到 ACXL 中。 ACXL 通过 ID 唯一字段与 ACTB 匹配,并通过添加它们的值来更新记录。到目前为止,这是我的代码:

                    string sqls = @"INSERT INTO ACXL SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" + openFileDialog.FileName + "].[" + txtSheetName.Text + "$];";
                    OleDbCommand cmd = new OleDbCommand();
                    cmd.Connection = conn;
                    cmd.CommandText = sqls;
                    cmd.ExecuteNonQuery();
                    string updater = @"UPDATE ACTB inner join ACXL on ACTB.ID = ACXL.ID " +
                                     @"SET ACTB.GrossIncome + ACXL.GrossIncome " +
                                     @"ACTB.LessTNT + ACXL.LessTNT " +
                                     @"ACTB.TaxableIncomeCE + ACXL.TaxableIncomeCE " +
                                     @"ACTB.TaxableIncomePE + ACXL.TaxableIncomePE " +
                                     @"ACTB.GrossTaxableIncome + ACXL.GrossTaxableIncome " +
                                     @"ACTB.LessTE + ACXL.LessTE " +
                                     @"ACTB.LessPPH + ACXL.LessPPH " +
                                     @"ACTB.NetTax + ACXL.NetTax " +
                                     @"ACTB.TaxDue + ACXL.TaxDue " +
                                     @"ACTB.HeldTaxCE + ACXL.HeldTaxCE " +
                                     @"ACTB.HeldTaxPE + ACXL.HeldTaxPE " +
                                     @"ACTB.TotalTax + ACXL.TotalTax";
                    cmd.CommandText = updater;
                    cmd.ExecuteNonQuery();
                    string deleter = @"DELETE from ACXL";
                    cmd.CommandText = deleter;
                    cmd.ExecuteNonQuery();

在 UPDATE 命令上收到一个相当模糊的语法错误。看到这里有什么问题吗?这是实现我的目标的正确方法吗?这就是您将两个表的值相加的方式吗?

编辑:

问题已解决,这是我们得出的结论:

                    string updater = 
                        @"UPDATE ACTB " + @"INNER JOIN ACXL on ACTB.ID = ACXL.ID "+
                        @"SET ACTB.GrossIncome = ACTB.GrossIncome + ACXL.GrossIncome, " +
                        @"ACTB.LessTNT = ACTB.LessTNT + ACXL.LessTNT, " +
                        @"ACTB.TaxableIncomeCE = ACTB.TaxableIncomeCE + ACXL.TaxableIncomeCE, " +
                        @"ACTB.TaxableIncomePE = ACTB.TaxableIncomePE + ACXL.TaxableIncomePE, " +
                        @"ACTB.GrossTaxableIncome = ACTB.GrossTaxableIncome + ACXL.GrossTaxableIncome, " +
                        @"ACTB.LessTE = ACTB.LessTE + ACXL.LessTE, " +
                        @"ACTB.LessPPH = ACTB.LessPPH + ACXL.LessPPH, " +
                        @"ACTB.NetTax = ACTB.NetTax + ACXL.NetTax, " +
                        @"ACTB.TaxDue = ACTB.TaxDue + ACXL.TaxDue, " +
                        @"ACTB.HeldTaxCE = ACTB.HeldTaxCE + ACXL.HeldTaxCE, " +
                        @"ACTB.HeldTaxPE = ACTB.HeldTaxPE + ACXL.HeldTaxPE, " +
                        @"ACTB.TotalTax = ACTB.TotalTax + ACXL.TotalTax ";

update .. set 的语法确实不对。您缺少设置列的所有“=”符号。

SQL更新最常用的语法是这个(示例)

update mytable set column1 = value, column1 = value2 where id = someid

所以你的 SQL 应该像这样修复:

 string updater = @"UPDATE ACTB " +
                  @"INNER JOIN ACXL on ACTB.ID = ACXL.ID ";
                  @"SET ACTB.GrossIncome = ACTB.GrossIncome + ACXL.GrossIncome, " +
                  @"ACTB.LessTNT = ACTB.LessTNT + ACXL.LessTNT, " +
                  @"ACTB.TaxableIncomeCE = ACTB.TaxableIncomeCE + ACXL.TaxableIncomeCE, " +
                  @"ACTB.TaxableIncomePE = ACTB.TaxableIncomePE + ACXL.TaxableIncomePE, " +
                  @"ACTB.GrossTaxableIncome = ACTB.GrossTaxableIncome + ACXL.GrossTaxableIncome, " +
                  @"ACTB.LessTE = ACTB.LessTE + ACXL.LessTE, " +
                  @"ACTB.LessPPH = ACTB.LessPPH + ACXL.LessPPH, " +
                  @"ACTB.NetTax = ACTB.NetTax + ACXL.NetTax, " +
                  @"ACTB.TaxDue = ACTB.TaxDue + ACXL.TaxDue, " +
                  @"ACTB.HeldTaxCE = ACTB.HeldTaxCE + ACXL.HeldTaxCE, " +
                  @"ACTB.HeldTaxPE = ACTB.HeldTaxPE + ACXL.HeldTaxPE, " +
                  @"ACTB.TotalTax = ACTB.TotalTax + ACXL.TotalTax ";

在您的 UPDATE 查询中使用 WHERE 子句。这将解决您的语法错误问题。