OriginalGriff
Хм.
Посмотрите на свой код:
for (int j = 0; j < dataGridView2.Rows.Count; j++)
{
string query = "insert into Rough(itemName)values('" + dataGridView2.Rows[j].Cells[0].Value + "')";
...
dataGridView2.Rows.Clear();
Таким образом, как только вы один раз обошли цикл, вы удалили из него все остальные строки ... Переместите clear в after the loop, и он будет работать лучше.
Но... здесь есть куча других неправильных вещей.
1) Не создавайте жесткий код строк подключения-они должны быть в конфигурационном файле или подобном файле, иначе вам придется перекомпилировать ваше приложение для каждой новой установки.
2) соединение, команда и подобные объекты - это дефицитные ресурсы, и вы должны избавиться от них, когда закончите. Самый простой способ-это нам а
using
блок:
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();
}
}
3) Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого всегда используйте параметризованные запросы.
Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:
SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.
Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?