Я пытаюсь отправить нового пользователя в мою программу 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();
String.Format() является ** не ** приемлемым способом подстановки значений в sql-запрос. Он по-прежнему сумасшедший - уязвим для атак с SQL-инъекциями. –
Спасибо, я уже это рассматривал, но кроме этого, я чищу строки перед тем, как передать их в SQL, откровенно говоря, если админы программы, которые будут сидеть на своих ноутбуках, решили проникнуть в базу данных, Для этого нужно атаковать инъекцией sql, они могут просто открыть файл базы данных, который находится в том же каталоге. ;) –
Это не повод, чтобы не делать это правильно ... чистые строки неверны. Их карантин. Всегда используйте параметризованные запросы. –