单个ODBC ExecuteNonQuery(C#)中的多个插入语句

时间:2010-11-10 13:29:42

标签: c# mysql odbc

我在数据库中插入多行,并将它们连接在一起以尝试提高性能。 我得到一个ODBCException告诉我我的SQL语法是错误的。但是当我在mysql命令行客户端中尝试它时,它工作得很好.. 我运行了一个简化的测试来描述这个过程。

命令行客户端:


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>

之后我在同一个DB上运行了这段代码:


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

这给了我以下错误:


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

3 个答案:

答案 0 :(得分:12)

MySQL ODBC驱动程序v5 +实际上支持批处理,您只需要单击ODBC控制面板的“详细信息”按钮(如果在Windows上)并选中“允许多个语句”复选框。

或者,在odbc连接字符串上使用OPTIONS = 67108864。

此处提供更多信息:http://dev.mysql.com/doc/refman/5.0/en/connector-odbc-configuration-connection-parameters.html

答案 1 :(得分:4)

是的,ODBC不支持批处理。(编辑:请参阅@ Jean-Do的答案以获取更新的解决方案。)

但还有另一种选择:

  1. 使用MySQL .NET Connector代替ODBC。
  2. 然后使用MySQL替代INSERT语句:INSERT INTO test(id, name) VALUES ('1', 'Foo'), ('2', 'bar');

答案 2 :(得分:1)

它无法处理批处理(使用;分隔多个语句),因为这需要双向通信。我担心你必须在循环中进行多次访问数据库。

事实上,我从未能够使用任何托管服务提供商进行批处理。