Разницу можно проиллюстрировать следующим образом:
std::cout << std::endl;
эквивалентно
std::cout << '\n' << std::flush;
Итак,
std::endl
Если вы хотите принудительно вывести поток на выход. \n
, если вас беспокоит производительность (что, вероятно, не так, если вы используете оператор <<
). Я использую \n
для большинства строк. Затем используйте std::endl
в конце абзаца (но это просто привычка и обычно не требуется).
В отличие от других утверждений символ \n
отображается на правильный конец строки последовательность, только если поток переходит к файлу (std::cin
и std::cout
являются специальными, но все же файлами (или файловыми)).
Этот тип вставки уязвим для инъекций, и, как вы уже обнаружили, трудно добавлять такие значения, как десятичное число, DateTime, ... для добавления столбцов, используйте Parameters.Add
SqlCommand cmd = new SqlCommand("INSERT INTO USERS(YEAR,NAME,RATE,TYPE) VALUES (@year, @name,@rate,@type)", connection);
cmd.Parameters.Add("@year", SqlDbType.Int).Value = int.Parse(yearcombo.Text);
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = name.Text;
cmd.Parameters.Add("@rate", SqlDbType.Decimal).Value = Convert.ToDecimal(rate.Text, CultureInfo.CurrentCulture);
cmd.Parameters.Add("@type", SqlDbType.VarChar).Value = "WORKERS";
. Представьте, что кто-то изменяет значение yearcombo (например, просто используя inspect element в chrome) и устанавливает его на:
"2019, 'a', 1, 'Something'); вставьте в значения ARESTRICTEDTABLE (somefield) 'somecolumn'); обновить AnotherTable set SomeField = 'somevalue') ;, вставить в пользователей (год, имя, рейтинг, тип), (2019, "
, тогда текст вашей команды будет:
[ 111]Вы должны использовать SqlParameter с запросом, содержащим параметры: Это должно быть так:
SqlCommand cmd = new SqlCommand("INSERT INTO USERS(YEAR,NAME,RATE,TYPE) VALUES (@YEAR, @NAME, @RATE, @TYPE)", connection);
cmd.Parameters.Add(new SqlParameter("@YEAR", yearcombo.Text));
cmd.Parameters.Add(new SqlParameter("@NAME", name.Text));
cmd.Parameters.Add(new SqlParameter("@RATE", Convert.ToDecimal(rate.Text, CultureInfo.CurrentCulture)));
cmd.Parameters.Add(new SqlParameter("@TYPE", "WORKERS"));
Я не проверял его, но он преобразовал ваш параметр в правильное десятичное число для Ваш запрос. Также лучше использовать SqlParameter для проблем безопасности (предотвращая SQL-инъекцию )