Я работаю над приложением для управления счетами, которое извлекает информацию из базы данных Access (современный формат .accdb) и обеспечивает корректную работу данных, но когда я пытаюсь ее обновить (следуя некоторым учебным пособиям или я должен сказать, ответы, ничего не работает .. Что не так с этим кодом, он ... должен работатьОбновление строки таблицы с OleDB с C#
public int UpdateDBBill(Bill bill)
{
using (var connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\BC.accdb"))
using (var command = connection.CreateCommand())
{
connection.Open();
command.CommandType = CommandType.Text;
command.CommandText = "UPDATE Bills SET Payer = @Payer, Category = @Category, Recipient = @Recipient, Currency = @Currency, Amount = @Amount, IBANOfRecipient = @IBANOfRecipient, Model = @Model, ReferenceNumber = @ReferenceNumber, Description = @Description, DueDate = @DueDate, ForMonth = @ForMonth, Paid = @Paid, DatePaid = @DatePaid WHERE Id = @Id";
command.Parameters.AddWithValue("@Payer", bill.Payer);
command.Parameters.AddWithValue("@Category", bill.Category);
command.Parameters.AddWithValue("@Recipient", bill.Recipient);
command.Parameters.AddWithValue("@Currency", bill.Currency);
command.Parameters.AddWithValue("@Amount", bill.amount);
command.Parameters.AddWithValue("@IBANOfRecipient", bill.IBANOfRecipient);
command.Parameters.AddWithValue("@Model", bill.Model);
command.Parameters.AddWithValue("@ReferenceNumber", bill.ReferenceNumber);
command.Parameters.AddWithValue("@Description", bill.Description);
command.Parameters.AddWithValue("@DueDate", bill.DueDate);
command.Parameters.AddWithValue("@ForMonth", bill.ForMonth);
command.Parameters.AddWithValue("@Paid", bill.Paid);
command.Parameters.AddWithValue("@DatePaid", bill.DatePaid);
command.Parameters.AddWithValue("@Id", bill.Id);
try
{
return command.ExecuteNonQuery();
}
catch
{
return -1;//for error
}
}
}
Ответ:.
public int UpdateDBBill(Bill bill)
{
using (var connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\BC.accdb"))
using (var command = connection.CreateCommand())
{
connection.Open();
command.CommandType = CommandType.Text;
command.CommandText = "UPDATE Bills SET Payer = @Payer, Category = @Category, Recipient = @Recipient, [Currency] = @Currency, Amount = @Amount, IBANOfRecipient = @IBANOfRecipient, [Model] = @Model, ReferenceNumber = @ReferenceNumber, DueDate = @DueDate, ForMonth = @ForMonth, Paid = @Paid, DatePaid = @DatePaid WHERE Id = @Id";
command.Parameters.Add("@Payer", OleDbType.VarChar).Value = bill.Payer;
command.Parameters.Add("@Category", OleDbType.VarChar).Value = bill.Category;
command.Parameters.Add("@Recipient", OleDbType.VarChar).Value = bill.Recipient;
command.Parameters.Add("@Currency", OleDbType.VarChar).Value = bill.Currency;
command.Parameters.Add("@Amount", OleDbType.VarChar).Value = bill.GetAmount();
command.Parameters.Add("@IBANOfRecipient", OleDbType.VarChar).Value = bill.IBANOfRecipient;
command.Parameters.Add("@Model", OleDbType.VarChar).Value = bill.Model;
command.Parameters.Add("@ReferenceNumber", OleDbType.VarChar).Value = bill.ReferenceNumber;
command.Parameters.Add("@DueDate", OleDbType.Date).Value = bill.DueDate.Date;
command.Parameters.Add("@ForMonth", OleDbType.Date).Value = bill.ForMonth.Date;
command.Parameters.Add("@Paid", OleDbType.Boolean).Value = bill.Paid;
command.Parameters.Add("@DatePaid", OleDbType.Date).Value = bill.DatePaid.Date;
command.Parameters.Add("@Id", OleDbType.Integer).Value = bill.Id;
try
{
int Rows = command.ExecuteNonQuery();
return Rows;
}
catch
{
return -1;//for error
}
}
}
Это правильный ответ. –
Я пробовал это раньше, и это не сработало. то я перешел к тому, как теперь работает мой код, который тоже не работает. После вашего ответа я попытался добавить Id до конца еще раз, но я все еще получаю синтаксис с ошибкой оператора SQL. – DethoRhyne
Тогда вам лучше показать весь текст команды и весь список параметров. Невозможно сказать, что такое синтаксическая ошибка из этого фрагмента. – Steve