2015-05-06 1 views
0

Я пытаюсь отправить нового пользователя в мою программу C# в базу данных (в этом случае MSAccess). Я создаю строку следующим образом ...OLEDB SQL Синтаксис Ошибка, я не вижу его

String StrCmd = String.Format("INSERT INTO tbl_Users (Username, Password, IsAdmin) VALUES ('{0}', '{1}', {2});", Username, passwordHash, AdminPower); 

Это создает строку SQL, например ...

INSERT INTO tbl_Users (Username, Password, IsAdmin) 
VALUES ('TestUser', '1013638657', False); 

Это прекрасно работает, если я вставить его в Query в MSAccess, но в код Я продолжаю получать ошибку Syntax error in INSERT INTO statement..

Может ли кто-нибудь увидеть что-то очевидное, что мне не хватает?

Дополнительная информация:

Username и passwordHash являются струнные AdminPower булева.

и Password - это текстовые поля, IsAdmin - это поле «Да/Нет».

блок кода интереса ...

OleDbConnection MyConn = new OleDbConnection(Program.ConnStr); 
MyConn.Open(); 
String StrCmd = String.Format("INSERT INTO tbl_Users (Username, Password, IsAdmin) VALUES ('{0}', '{1}', {2});", Username, passwordHash, AdminPower); 
OleDbCommand Cmd = new OleDbCommand(StrCmd, MyConn); 
Cmd.ExecuteNonQuery(); 
MyConn.Close(); 
+0

String.Format() является ** не ** приемлемым способом подстановки значений в sql-запрос. Он по-прежнему сумасшедший - уязвим для атак с SQL-инъекциями. –

+0

Спасибо, я уже это рассматривал, но кроме этого, я чищу строки перед тем, как передать их в SQL, откровенно говоря, если админы программы, которые будут сидеть на своих ноутбуках, решили проникнуть в базу данных, Для этого нужно атаковать инъекцией sql, они могут просто открыть файл базы данных, который находится в том же каталоге. ;) –

+0

Это не повод, чтобы не делать это правильно ... чистые строки неверны. Их карантин. Всегда используйте параметризованные запросы. –

ответ

0

попробовать это '{2}':

String StrCmd = String.Format("INSERT INTO tbl_Users (Username, Password, IsAdmin) VALUES ('{0}', '{1}', '{2}');", Username, passwordHash, AdminPower); 
+0

Уже сделано, не имеет значения. :(По-прежнему получаю ту же ошибку –

+0

@StephenHammond, вы можете попробовать следующее: 'String StrCmd = String.Format (" INSERT INTO tbl_Users (Username, Password, IsAdmin) VALUES ('{0}', '{1}', { 2}); ", Username, passwordHash, 0);' –

+0

Спасибо за помощь. Решил это .. * бормочет о глупом SQL, имеющем разные зарезервированные слова на разных платформах ... mutter * –

0

Facepalms я заметил список зарезервированных слов, которые я проверял, был для SQL-сервер. Я нашел один для MSAccess и «PASSWORD» является зарезервированным словом в Access ... Я изменил его на UserPassword, и он работает ...

grrr.

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