Multiple insert statements in single ODBC ExecuteNonQuery (C#)

10,556

Solution 1

Yes, ODBC does NOT support batch processing. (EDIT: See @Jean-Do's answer for a more up to date solution.)

But there is another option:

  1. Use the MySQL .NET Connector instead of ODBC.
  2. Then use the MySQL alternative INSERT statement: INSERT INTO test(id, name) VALUES ('1', 'Foo'), ('2', 'bar');.

Solution 2

Batching is actually supported by MySQL ODBC driver v5+, you just need to click on the Details button of the ODBC control panel (if on Windows) and check the "Allow multiple statements" checkbox.

Alternatively, uses OPTIONS=67108864 on you odbc connection string.

More information here : http://dev.mysql.com/doc/refman/5.0/en/connector-odbc-configuration-connection-parameters.html

Share:
10,556
pvel
Author by

pvel

Updated on June 21, 2022

Comments

  • pvel
    pvel almost 2 years

    I'm inserting multiple rows into a DB, and joining them together in an attempt to improve performance. I get an ODBCException telling me my SQL syntax is wrong. But when I try it in the mysql commandline client, it works just fine.. I ran a simplified test to describe the process.

    Command Line Client:

    
    mysql> create table test (`id` int, `name` text);
    Query OK, 0 rows affected (0.05 sec)
    
    mysql> INSERT INTO test(id, name) VALUES ('1', 'Foo');INSERT INTO test(id, name) VALUES ('2', 'bar');
    Query OK, 1 row affected (0.00 sec)
    
    Query OK, 1 row affected (0.00 sec)
    
    mysql>
    

    After that I ran this code on the same DB:

    
    comm.CommandText = "INSERT INTO test(id, name) VALUES ('1', 'Foo');INSERT INTO test(id, name) VALUES ('2', 'bar');";
    comm.ExecuteNonQuery();
    

    which gives me the following error:

    
    +       base    {"ERROR [42000] [MySQL][ODBC 5.1 Driver][mysqld-5.1.51-community]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO test(id, name) VALUES ('2', 'bar')' at line 1"} System.Data.Common.DbException {System.Data.Odbc.OdbcException}
    
    
  • padraigf
    padraigf over 5 years
    This saved my ass, but just a small correction, I found it is 'option' with no 's', i.e. option=67108864; Also an updated link: dev.mysql.com/doc/connector-odbc/en/…
  • rsenna
    rsenna over 5 years
    @RobertPenridge The only thing currently wrong is the first phrase, and it was right at the time it was written (2010).