Как вставить десятичное значение из текстового поля в базу данных с помощью C #

Разницу можно проиллюстрировать следующим образом:

std::cout << std::endl;

эквивалентно

std::cout << '\n' << std::flush;

Итак,

  • Используйте std::endl Если вы хотите принудительно вывести поток на выход.
  • Используйте \n, если вас беспокоит производительность (что, вероятно, не так, если вы используете оператор <<).

Я использую \n для большинства строк. Затем используйте std::endl в конце абзаца (но это просто привычка и обычно не требуется).

В отличие от других утверждений символ \n отображается на правильный конец строки последовательность, только если поток переходит к файлу (std::cin и std::cout являются специальными, но все же файлами (или файловыми)).

2
задан marc_s 20 March 2019 в 12:38
поделиться

2 ответа

Этот тип вставки уязвим для инъекций, и, как вы уже обнаружили, трудно добавлять такие значения, как десятичное число, 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]
0
ответ дан Ashkan Mobayen Khiabani 20 March 2019 в 12:38
поделиться

Вы должны использовать 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-инъекцию )

0
ответ дан S. Schenkel 20 March 2019 в 12:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: