2013-04-26 7 views

ответ

3

Слово PASSWORD является зарезервированным ключевым словом. Чтобы использовать его, вы должны заключить строку в квадратных скобках

OleDbCommand cmd = new OleDbCommand("Insert into Info (username, [password]) Values ('" + username + "', '" + password + "')", conn); 

И пожалуйста, пожалуйста, не использовать конкатенацию для построения SQL заявления. Это очень плохая практика, которая приводит к другим синтаксическим ошибкам (имя пользователя или пароль с одинарными кавычками) или худшее для SQL-инъекций. Возьмите look here к тому, что может произойти, если у вас есть умный и злоумышленник

OleDbCommand cmd = new OleDbCommand("Insert into Info (username, [password]) Values (?,?)", conn); 
cmd.Parameters.AddWithValue("@p1", username); 
cmd.Parameters.AddWithValue("@p2", password); 
cmd.ExecuteNonQuery(); 
+0

Могу ли я также написать команду выбора, например, oledbCommand cmd = new oledbcommand («Выбрать * из таблицы, где id =? И пароль =?») –

+0

Да, конечно, концепция такая же. Параметры должны всегда использоваться для передачи пользовательского текста ввода. Однако вы не можете использовать параметр для выражения имени таблицы или имени столбца. – Steve

1

Возможно, в переменных имени пользователя или пароля есть недопустимый символ (например, одинарная кавычка). Убедитесь, что они дезинфицированы.

+0

Это хороший момент, но лучший способ справиться с этой возможностью, чтобы использовать параметрический запрос, как предложил Стив. – HansUp

2

Вам необходимо снять кронштейн password. Это reserved word.

OleDbCommand cmd = 
    new OleDbCommand("Insert into Info (username, [password]) Values ('" + username + "', '" + password + "')", conn); 
+0

@HansUp - думал, что это имя пользователя, но пользователь является зарезервированным словом. Набирается слишком быстро. :) –

+0

Да, 'имя пользователя' * выглядит * подозрительно. :-) А скобки не пострадали бы ... так что включение их не было проблемой. Вы заработали +1 на основе '[password]'. – HansUp

+0

@HansUp спасибо! Да, квадратные скобки не болят (по крайней мере, я не думаю, что они это делают). –

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