Я пишу приложение, которое хранит информацию о пользователе. В настоящее время пользователь должен обновить свое имя, рост, вес и день рождения.
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 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.
Может ли кто-нибудь указать мне, где мой синтаксис неверен? Благодарю вас!
SET
, за которым следует все имя поля, разделенное запятыми, для присвоения значений. - person Asad Saeeduddin   schedule 03.05.2015SET
.. вы могли бы сэкономить массу времени, просто выполнив простой оператор msdn Update Set`.. вам нужен только один операторSET
, разделяющий остальные значения, следующие за,
- person MethodMan   schedule 03.05.2015SET
заявлении. Кроме того, по-видимому, имя является зарезервированным словом, поэтому я также сделал[Name]
. Теперь код работает отлично! Спасибо. - person kkmonlee   schedule 03.05.2015