I\'m trying to speed up my code and the bottleneck seems to be the individual insert statements to a Jet MDB from outside Access via ODBC. I need to insert 100 rows at a tim
Not that I am aware of. And I have felt this pain before. The good news is that if you wrap the insert in a transaction and don't close the connection between each call (eg--pass the command as a parameter) then it is orders of magnitude quicker than open()->INSERT->close() is.
Use a code pattern something like:
using (DbConnection conn = new OdbcConnection())
using (DbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "INSERT INTO foo(bar) VALUES (@bar)";
DbParameter p = cmd.CreateParameter();
p.ParameterName = "@bar";
cmd.CommandType = CommandType.Text;
conn.Open();
using (DbTransaction tran = conn.BeginTransaction())
{
cmd.Transaction = tran;
try
{
for (int i = 0; i < 1000; i++)
{
p.Value = i;
cmd.ExecuteNonQuery();
}
tran.Commit();
conn.Close();
}
catch (Exception)
{
tran.Rollback();
throw;
}
}
}