2013-07-12 1 views
1

Вот мой запрос:Что случилось с моим запросом обновления MS Access?

string Select = "Update DC set Password = '" + txtPass.Text + "' WHERE ID ="+Convert.ToInt32(cbxDocs.SelectedIndex + 1); 
con = new OleDbConnection(); 
this.readconfile = new ReadConfigFile(); 
con.ConnectionString = this.readconfile.ConfigString(ConfigFiles.ProjectConfigFile); 
con.Open(); 
cmd = new OleDbCommand(Select, con); 
cmd.Connection = con; 
cmd.ExecuteNonQuery(); 
con.Close(); 

Я не знаю, что это неправильно, но это дает мне сообщение об ошибке, что «ошибка синтаксиса в UPDATE ЗАЯВЛЕНИЕ». У меня есть два поля в таблице «DC» ID и пароль, больше ничего.

+0

Использование заполнителей. Они очищают запрос и избегают тонких ошибок, которые могут быть вызваны - например, пароль, содержащий '' '. Кроме того, убедитесь, что «пароль» или «id» не являются зарезервированными словами. – user2246674

+0

спасибо, что помогли –

ответ

4

PASSWORDis reserve word заключить его в квадратные скобки, как [Password], так что ваш запрос должен начинаться как:

"Update DC set [Password].... 

Рассмотрите возможность использования параметризованного запроса, это избавит вас от Sql Injection

+0

спасибо, что помогло –

0

Я думаю, что у дона» t нужно «on ur query», а пароль зарезервирован почти для каждого ddb. И вы можете использовать параметры, чтобы избежать concat с + Ex.

string pass = TxtPass.Text; 
int s = cbxDocs.SelectedIndex+1; 
string Select = "Update DC set Password = @a WHERE ID = @o"; 
OleDbCommand cmd = new OleDbCommand(Select, conn); 
cmd.Paramaters.AddWithValue("@a", pass); 
cmd.Parameters.AddWithValue("@o", s); 
//everything else.... 
+0

спасибо за вашу помощь, это что-то новое для меня. Я буду иметь в виду. –

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