2015-04-26 6 views
1

Прежде всего, я знаю, что пароль является зарезервированным типом базы данных доступа. Но я прочитал сообщение, которое вы можете поместить [пароль], и оно будет работать. Но это не работает. Я пробовал много способов и все же, надеюсь, что кто-то поможет.Ошибка синтаксиса базы данных базы данных в обновлении в операторе

OleDbCommand cmd = new OleDbCommand(); 

try 
{ 
    String query = "update [Employe] set [UserName] ='" + txtNewUser.Text +"', [Password] ='"+ txtNewPass.Text + "', [Authorization] ='" + nudAuthorizationLvl.Value + "', where [Id] = '" + int.Parse(txtExistingId.Text); 
    cmd.CommandText = query; 
    cmd.Connection = conn; 
    conn.Open(); 

    cmd.ExecuteNonQuery(); 
    System.Windows.Forms.MessageBox.Show("Info Updated!!!"); 

    conn.Close(); 
} 
catch (Exception ex) 
{ 
    MessageBox.Show("Error" + ex); 
} 
finally 
{ 
    conn.Close(); 
} 
+3

Используйте [Параметры] (http://www.dotnetperls.com/sqlparameter), или вы можете стать жертвой атаки SQL Injection. Что не работает точно? Любое сообщение об исключении или ошибке? – yazanpro

+0

Как упоминалось выше, вы должны действительно изменить это, чтобы использовать параметры. Кроме того, я считаю, что у вас есть дополнительная запятая прямо перед предложением «где», которое может вызвать синтаксическую ошибку. –

ответ

1

Я считаю, что у вас есть лишняя запятая прямо перед пунктом where и дополнительная цитата перед ID.

Кроме того, всегда использовать параметры, чтобы избежать атаки Sql Injection:

conn.Open(); 
cmd.CommandText = "update [Employe] set [UserName] [email protected], [Password] [email protected], [Authorization] [email protected] where [Id] = @id"; 
cmd.Connection = conn; 
cmd.Parameters.AddRange(new OleDbParameter[] 
     { 
      new OleDbParameter("@userName", txtNewUser.Text), 
      new OleDbParameter("@password", txtNewPass.Text), 
      new OleDbParameter("@authorization", nudAuthorizationLvl.Value), 
      new OleDbParameter("@id", int.Parse(txtExistingId.Text)) 
     }); 
cmd.ExecuteNonQuery(); 
+0

не думал, что можно дать текст комманда через параметры. Спасибо, что человек действительно помогает вам просто сделать мою ночь. И спасибо за подсказку. Я попытаюсь изменить свой конструктор с параметрами. – NinjaUltra

+0

Рад помочь :) Да, всегда используйте параметры, иначе вы будете открыты для очень простых хаков –

1

Я думаю, что есть ошибка синтаксиса в запросе обновления. Учитывая, что ваше поле идентификатора имеет тип INT, перед фактическим значением не должно быть '. Таким образом, вы должны изменить свой запрос на следующее:

String query = "update [Employe] set [UserName] ='" + txtNewUser.Text +"', [Password] ='"+ txtNewPass.Text + "', [Authorization] ='" + nudAuthorizationLvl.Value + "', where [Id] = " + int.Parse(txtExistingId.Text); 

С этим, как говорится, вы действительно должны использовать parameterized query для передачи параметров.

+0

Спасибо большое, я это проверю. – NinjaUltra

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