OriginalGriff
Во - первых, никогда не делайте "анонимных вставок" - всегда перечисляйте столбцы, которые вы хотите вставить, в том порядке, в котором вы хотите их вставить:
INSERT INTO MyTable (MyColumn1, MyCOlumns2) VALUES (@ValueForColumn1, @ValueForColumn2)
Во-вторых, вы почти наверняка не должны вставлять значения идентификаторов, особенно если это идентификаторы строк: значения, которые однозначно идентифицируют строку, которая в противном случае может содержать идентичные данные. Никогда не используйте существующий максимум и не добавляйте его самостоятельно - это вызывает периодические проблемы, которые нужно исправить в общей сложности Пита.
В-третьих, вам нужно указать значение для каждого из параметров в операторе INSERT: в моем примере выше есть два значения параметров (префикс "@" указывает значение параметра для SQL), поэтому мне понадобятся два вызова
AddWithValue
поставлять им:
using (SqlConnection con = new SqlConnection(strConnect))
{
con.Open();
using (SqlCommand cmd = new SqlCommand("INSERT INTO myTable (myColumn1, myColumn2) VALUES (@C1, @C2)", con))
{
cmd.Parameters.AddWithValue("@C1", myValueForColumn1);
cmd.Parameters.AddWithValue("@C2", myValueForColumn2);
cmd.ExecuteNonQuery();
}
}
Вы предоставляете только один в своем примере, но вы говорите ему ожидать 4 v alues.
В-четвертых, имена параметров должны совпадать в
AddWithValue
вызов и оператор INSERT: в вашем вызове отсутствует префикс"@".
В-пятых, SQL использует запятые в качестве разделителей, а не Терминаторов:
(@C1, @C2)
это прекрасно, но
(@C1, @C2,)
это синтаксическая ошибка, так как между последней запятой и закрытой скобкой нет ничего.