Ответ 1
Короткий ответ: построение запросов путем конкатенации строк обычно позволяет SQL-инъекцию.
Представьте, что кто-то пытается создать пользователя с именем "Bob, Joe, 12345); DROP TABLE workers; --
". В итоге вы создаете запрос "Insert INTO workers Values(Bob, Joe, 12345); DROP TABLE workers; --name, 34345236);
" Bye-bye database. SQL-инъекция также может привести к запросам, возвращающим данные, которых они не должны, например, таблицам паролей. Каждый раз, когда у вас есть SQL-инъекция, просто предположите, что вы разрешаете произвольным третьим сторонам выпустить произвольные команды в вашу базу данных.
Подход AddWithValue()
называется "параметризованными запросами". Это приводит к генерированию очень похожих команд, но AddWithValue() заботится о любых странных вещах, таких как пробелы и кавычки, в значениях параметров, которые могут привести к тому, что ваша команда будет означать нечто иное, чем то, что вы хотите. Конечно, вы могли бы сделать это, ускользая вручную, но это может быть сложно сделать правильно. Это намного проще и безопаснее, чтобы библиотека обрабатывала его для вас.