C#第一次使用更新/内部联接查询时,收到语法错误

C#第一次使用更新/内部联接查询时,收到语法错误,c#,sql,ms-access,oledb,C#,Sql,Ms Access,Oledb,我有两个表,ACTB和ACXL,在我的程序中都有访问表。出于我的目的,我希望在查询结束时清除ACXL的内容 总结: 在程序中,用户访问openfiledialog并选择Excel文件。所述文件被插入到ACXL中。ACXL通过ID唯一字段与ACTB匹配,并通过添加记录值来更新记录。以下是我目前的代码: string sqls = @"INSERT INTO ACXL SELECT * FROM [Excel 12.0;HDR=YES;DATABASE=" +

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

总结:

在程序中,用户访问openfiledialog并选择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 ";

更新的语法。。set
真的关闭了。您缺少设置列的所有“=”符号

SQL更新最常用的语法如下(示例)

updatemytable set column1=value,column1=value2其中id=someid
etc

因此,您的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 ";

更新的语法。。set
真的关闭了。您缺少设置列的所有“=”符号

SQL更新最常用的语法如下(示例)

updatemytable set column1=value,column1=value2其中id=someid
etc

因此,您的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
子句。这将解决语法错误问题。

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

为什么在每行上使用@可能重复?你可以把一个放在前面,然后把所有的东西放在一组引号之间。见@jeffcarey临时措施,我不希望加号变红,因为我可能会忽略它。在我完成操作后,我将把它变成一个单独的语句。为什么在每一行上使用@可能是重复的?你可以把一个放在前面,然后把所有的东西放在一组引号之间。见@jeffcarey临时措施,我不希望加号变红,因为我可能会忽略它。在我处理完它之后,我会把它变成一个单独的语句。你是说逗号的位置?我会在update语句后面写一个集合,然后再写一个内部连接,看看会发生什么。我已经编辑了OP,并根据您的建议进行了更新。我应该把Where子句放在哪里?在我看来,它是由join-on value1=value2语句处理的。内部join很好,但您并没有告诉SQL您正在设置哪个列。SET要求所有列后面都跟一个相等的
=
运算符。在您的情况下,到处都有
+
符号。使用您的代码更新程序。起初,它不起作用,说内部join语句有语法错误。在更新之后,我把它放回了顶部,就在布景之前,就像以前一样,它工作了!不过有一个问题,它现在在DELETE命令上抛出了一个异常?没关系!删除命令错误在我这边,意外地从中删除了,它停止了工作。代码有效,我将在标记最终答案之前用我的最终语句更新OP。你是说逗号位置?我会在update语句后面写一个集合,然后再写一个内部连接,看看会发生什么。我已经编辑了OP,并根据您的建议进行了更新。我应该把Where子句放在哪里?在我看来,它是由join-on value1=value2语句处理的。内部join很好,但您并没有告诉SQL您正在设置哪个列。SET要求所有列后面都跟一个相等的
=
运算符。在您的情况下,到处都有
+
符号。使用您的代码更新程序。起初,它不起作用,说内部join语句有语法错误。在更新之后,我把它放回了顶部,就在布景之前,就像以前一样,它工作了!不过有一个问题,它现在在DELETE命令上抛出了一个异常?没关系!删除命令错误在我这边,意外地从中删除了,它停止了工作。代码有效,我将在标记最终答案之前用我的最终声明更新OP。