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
子句。这将解决您的语法错误问题。
我有两个表,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
子句。这将解决您的语法错误问题。