У меня есть две таблицы, ACTB и ACXL, обе таблицы доступа в моей программе. В моих целях я хочу очистить содержимое ACXL в конце моего запроса.C# Первый раз, используя запрос update/internal join, получив синтаксическую ошибку
Резюме:
В программе, пользователь получает доступ к OpenFileDialog и выбирает файл Excel. указанный файл вставляется в ACXL. ACXL сопоставляется с ACTB по уникальному полю ID и обновляет записи, добавляя их значения. Вот мой код:
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. Здесь что-нибудь не так? Является ли это правильным способом достижения моей цели? Это как вы добавляете значения двух таблиц?
EDIT:
Проблема решена, вот что мы придумали:
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 ";
Возможный дубликат [Синтаксис запроса SQL-запроса с внутренним соединением] (http://stackoverflow.com/questions/3867164/sql-update-query-syntax-with-inner-join) –
Зачем использовать @ в каждой строке? Вы можете поставить один вперед, а затем поместить все между одним набором кавычек. См. Http://stackoverflow.com/questions/1100260/multiline-string-literal-in-c-sharp –
@jeffcarey Временная мера, я не хочу, чтобы плюс становился красным, поскольку я мог пренебрегать этим. Я сделаю это одним из заявлений, после того как я закончу манипулировать им. – Aroueterra