在单个ODBC ExecuteNonQuery(C#)中执行多个插入语句

6

我正在向数据库中插入多行数据,并尝试将它们连接在一起以提高性能。

但是,我收到一个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>

接着我在同一个数据库上运行了以下代码:


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个回答

15

1
这个救了我的命,但只有一个小修正,我发现它是'option'而不是'options',即option=67108864; 还有一个更新的链接:https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-configuration-connection-parameters.html - padraigf

4
是的,ODBC不支持批处理。(编辑:请参见@Jean-Do的答案,以获得更现代化的解决方案。)但是还有另一个选择:
  1. 使用MySQL .NET Connector而不是ODBC。
  2. 然后使用MySQL的替代INSERT语句:INSERT INTO test(id, name) VALUES ('1', 'Foo'), ('2', 'bar');

请注意不要删除html标签。

@RobertPenridge 目前唯一的问题是第一个短语,而在它被写下来的时候(2010年)它是正确的。 - rsenna

0

它无法处理批处理(使用;分隔多个语句),因为这将需要双向通信。恐怕您必须在循环中执行并多次访问数据库。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接