@W3bbo:For what it's worth. Using Sql2005 on my dev machine (so no network involved).
Using your method, but within a transaction, it inserts 15,000 records in 3s.
var start = DateTime.Now;
using (SqlConnection con = GetConnection())
{
var tran = con.BeginTransaction();
SqlCommand cmd = con.CreateCommand();
cmd.Transaction = tran;
cmd.CommandText = "insert into test (value) values (@value)";
cmd.Parameters.Add("@value", SqlDbType.Int);
foreach (int r in recordsToInsert)
{
cmd.Parameters["@value"].Value = r;
cmd.ExecuteNonQuery();
}
tran.Commit();
}
var end = DateTime.Now;
tbOutput.Text = string.Format("Elapsed time {0}", (end - start));
Using a stored procedure and batching all 15,000 inserts into one command, about 0.4s
var start = DateTime.Now;
using (SqlConnection con = GetConnection())
{
var tran = con.BeginTransaction();
SqlCommand cmd = con.CreateCommand();
cmd.Transaction = tran;
var sb = new StringBuilder();
foreach (int r in recordsToInsert)
{
sb.AppendFormat("exec Insert_Test {0};", r);
}
cmd.CommandText = sb.ToString();
cmd.ExecuteNonQuery();
tran.Commit();
}
var end = DateTime.Now;
tbOutput.Text = string.Format("Elapsed time {0}", (end - start));