Синтаксическая ошибка в выражении UPDATE OleDbException
Я пишу приложение, которое хранит информацию о пользователях. В настоящее время пользователь должен обновить свое имя, рост, вес и день рождения.
string height = TB_ClientHeight.Text;
string weight = TB_ClientWeight.Text;
string name = TB_ClientName.Text;
string bday = dateTimePicker1.Value.ToString("dd-MM-yyyy");
int heightint = Convert.ToInt32(height);
int weightint = Convert.ToInt32(weight);
Обновляется по телефону public static string
переменная username из другой формы и использующая ее как WHERE UserName = @username
,
usernamestringo = Login.usernameFromLogin;
Я следовал за другими ответами SO в этом контексте и исправил некоторые проблемы (например, предотвращение SQL-инъекций). Однако я все еще получаю синтаксическую ошибку при обновлении этих полей, как утверждают OleDbException
,
using (OleDbConnection myCon = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=O:\Repos\Database\Database.accdb;Persist Security Info=False"))
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.CommandType = CommandType.Text;
string query = "UPDATE TPersons SET Name=@Name, SET Height=@Height, SET Weight=@Weight, SET Bday=@Bday " + " WHERE FirstName= @username";
cmd.CommandText = query;
cmd.Parameters.AddWithValue("@Name", name.ToString());
cmd.Parameters.AddWithValue("@Height", heightint.ToString());
cmd.Parameters.AddWithValue("@Weight", weightint.ToString());
cmd.Parameters.AddWithValue("@Bday", bday.ToString());
cmd.Parameters.AddWithValue("@username", usernamestringo);
cmd.Connection = myCon;
myCon.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("Updated!", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
cmd.Parameters.Clear();
}
OleDbException
является:
Индекс #0 NativeError: -526847407 Источник: ядро СУБД Microsoft Access SQLState: 3000 Описание (сообщение): синтаксическая ошибка в выражении UPDATE.
Кто-нибудь может направить меня туда, где мой синтаксис неправильный? Спасибо!
1 ответ
Синтаксис ОБНОВЛЕНИЯ
UPDATE <tablename> SET field1=Value1, field2=Value2 WHERE primarykeyname=Value3
Ключевое слово SET предшествует только первому столбцу для обновления, и у вас есть другая проблема со столбцом NAME. В Access это зарезервированное ключевое слово. Используйте квадратные скобки вокруг названия этого столбца (или лучше замените его на что-то не столь хлопотное)
Так:
string query = @"UPDATE TPersons SET [Name]=@Name,
Height=@Height, Weight=@Weight, Bday=@Bday
WHERE FirstName= @username";
Не строго связано с вашей текущей проблемой, но вы также должны взглянуть на эту статью. Можем ли мы прекратить использовать AddWithValue уже? DbCommand.AddWithValue - это ярлык с многочисленными недостатками. Лучше избегать этого.