Você pode inserir várias linhas usando uma única instrução SQL da seguinte forma:
INSERT INTO myTable (col1, col2, col3) VALUES ('myval1', 'myval2', 'myval3'), ('myotherval1', 'myotherval2', 'myotherval3'), ('anotherval1', 'anotherval2', 'anotherval3');
Atualização:
MarkR está certo em seu comentário - se você estiver coletando dados de um usuário ou compilando informações, poderá criar a consulta dinamicamente com algo como:
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();
Dois pontos importantes a serem observados:
- Se você estiver aceitando a entrada de um usuário, é muito importante para limpar todas as entradas do usuário, caso contrário, usuários mal-intencionados podem modificar/excluir/descartar todo o seu banco de dados. Para obter mais informações, pesquise "Injeções de SQL" no Google.
- Estou usando a classe StringBuilder, em vez de usar uma string primitiva e simplesmente anexar (ou seja, string s ="Insert..."; s+="blah blah blah") porque o StringBuilder é mais rápido em anexar, porque ele não é tratado como uma matriz e, portanto, não precisa ser redimensionado à medida que você anexa a ele.