Możesz wstawić wiele wierszy za pomocą jednej instrukcji SQL, jak na przykład:
INSERT INTO myTable (col1, col2, col3) VALUES ('myval1', 'myval2', 'myval3'), ('myotherval1', 'myotherval2', 'myotherval3'), ('anotherval1', 'anotherval2', 'anotherval3');
Aktualizacja:
MarkR ma rację w swoim komentarzu - jeśli zbierasz dane od użytkownika lub kompilujesz informacje, możesz dynamicznie zbudować zapytanie za pomocą czegoś takiego:
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("INSERT INTO myTable (col1, col2, col3) VALUES ");
for(int i=0;i<myDataCollection.Count;i++) {
stringBuilder.Append("(" + myDataCollection[i].Col1 + ", " + myDataCollection[i].Col2 + ", " + myDataCollection[i].Col3 + ")");
if (i<myDataCollection.Count-1) {
stringBuilder.Append(", ");
} else {
stringBuilder.Append(";");
}
}
string insertStatement = stringBuilder.ToString();
Dwa ważne punkty do zapamiętania:
- Jeśli akceptujesz dane wejściowe od użytkownika, jest to bardzo ważne w celu oczyszczenia wszystkich danych wejściowych użytkownika, w przeciwnym razie złośliwi użytkownicy mogą zmodyfikować/usunąć/upuścić całą bazę danych. Aby uzyskać więcej informacji, wyszukaj w Google „Wstrzyknięcia SQL”.
- Używam klasy StringBuilder, zamiast używać prymitywu ciągu i po prostu dołączać (tj. string s ="Wstaw..."; s+="blah blah blah"), ponieważ jest to StringBuilder szybciej dołączający, ponieważ nie jest traktowany jako tablica, więc nie musi zmieniać swojego rozmiaru podczas dołączania do niego.