SQL code to insert multiple rows in ms-access table

后端 未结 8 1683
北荒
北荒 2020-12-15 14:01

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

8条回答
  •  轮回少年
    2020-12-15 14:33

    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;
            }
        }
    }
    

提交回复
热议问题