Я пишу приложение, которое хранит информацию о пользователе. В настоящее время пользователь должен обновлять свое имя, высоту, вес и день рождения.Ошибка синтаксиса в инструкции 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
имени пользователя из другой формы и с помощью этого также 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 [email protected], SET [email protected], SET [email protected], SET [email protected] " + " 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
является:
Index #0 NativeError: -526847407 Source: Microsoft Access Database Engine SQLState: 3000 Description (message): Syntax error in UPDATE statement.
Может кто-нибудь наставит меня, где мой синтаксис не так? Спасибо!
Мне кажется, вам просто нужен 'SET', за которым следует все имя поля, разделенное запятой, на присваивание значений. –
вы посмотрели, как использовать инструкцию 'SET' .. вы могли бы сэкономить массу времени, просто выполнив простой оператор msdn Update Set'. Вам нужен только один оператор' SET', разделяющий остальные значения которые следуют с помощью ',' – MethodMan
Я только что понял о веществе 'SET'. Кроме того, по-видимому, «Имя» является зарезервированным словом, поэтому я также сделал «[Name]». Код работает отлично! Спасибо. – kkmonlee