2015-05-02 4 views
0

Я пишу приложение, которое хранит информацию о пользователе. В настоящее время пользователь должен обновлять свое имя, высоту, вес и день рождения.Ошибка синтаксиса в инструкции 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.

Может кто-нибудь наставит меня, где мой синтаксис не так? Спасибо!

+0

Мне кажется, вам просто нужен 'SET', за которым следует все имя поля, разделенное запятой, на присваивание значений. –

+0

вы посмотрели, как использовать инструкцию 'SET' .. вы могли бы сэкономить массу времени, просто выполнив простой оператор msdn Update Set'. Вам нужен только один оператор' SET', разделяющий остальные значения которые следуют с помощью ',' – MethodMan

+0

Я только что понял о веществе 'SET'. Кроме того, по-видимому, «Имя» является зарезервированным словом, поэтому я также сделал «[Name]». Код работает отлично! Спасибо. – kkmonlee

ответ

2

Синтаксис UPDATE является

UPDATE <tablename> SET field1=Value1, field2=Value2 WHERE primarykeyname=Value3 

НАБОРА ключевое слово предшествует только первый столбец для обновления, и у вас есть еще одна проблема с колонки NAME. В Access это зарезервированное ключевое слово. Используйте скобки вокруг этого имени столбца (или лучше изменить его на что-то не так хлопотно)

Итак:

string query = @"UPDATE TPersons SET [Name][email protected], 
       [email protected], [email protected], [email protected] 
       WHERE FirstName= @username"; 

Не тесно связанные с текущей проблемы, но вы должны также посмотреть на эту статью Can we stop using AddWithValue already? DbCommand. AddWithValue - это ярлык с многочисленными недостатками. Лучше избегайте этого.

+0

Пропустил проблему с помощью столбца «Имя». +1 –

+0

Да - я понял вопрос '[Name], когда я опубликовал свой вопрос. Большое спасибо за вашу помощь! – kkmonlee

Смежные вопросы