Этот тип вставки уязвим для инъекций, и, как вы уже обнаружили, трудно добавить значения, такие как десятичное число, 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 в chrome) и устанавливает его на:
"2019, 'a', 1, 'Something'); вставлять в ARESTRICTEDTABLE (somefield) значения ('somecolumn'); обновлять AnotherTable set SomeField = 'somevalue');; вставлять в пользователей (год, имя, рейтинг) , тип), (2019, "
тогда ваш командный текст будет:
"insert into users (year,name,rate,type) (2019,'a',1,'Something');insert into ARESTRICTEDTABLE(somefield) values('somecolumn'); update AnotherTable set SomeField = 'somevalue');, insert into users(year,name,rate,type),(2019," ,'" + name.Text + "','" + Convert.ToDecimal(rate.Text, CultureInfo.CurrentCulture) + ",'" + "WORKERS" + "')"