【发布时间】:2018-08-27 03:46:14
【问题描述】:
我正在使用 ADO.NET 和参数化查询(未命名的参数和 ExecuteNonQuery 方法)写入 SQL Server 和 MySQL dBase(应用程序必须与两者无关)。两者都有,所有表的主键都是自动递增的。
使用 SQL Server,我可以将“CommandText”设置为以下内容,在这种情况下,参数化查询和 SELECT 以原子方式执行:
INSERT INTO myTable (param1, param2, param3) VALUES (?, ?, ?);SELECT MAX(ID) FROM myTable;
这可确保返回的 ID(主键)是与参数化查询对应的 ID。
不幸的是,对于 MySQL,“;SELECT...”会产生语法错误。如何使用 ADO.NET 和 MySQL 通过 SELECT 查询原子地执行参数化查询?
提前感谢您的帮助!
【问题讨论】:
-
你想使用
last_insert_id()和一个允许你同时运行两个查询的接口函数。 -
请注意,如果多个用户同时运行语句,
SELECTMAX(ID)方法可能不会返回刚刚插入的值,除非您在具有可序列化隔离级别的事务中执行查询。 MySQL 和 SQL Server 都有返回分配值的专有方法(SCOPE_IDENTITY()和last_insert_id()),但这需要不同的查询,您可以按照 @GordonLinoff 的建议进行抽象。 -
非常感谢大家的帮助!根据大家的建议,我不再使用 Select Max(ID)。而是使用 SQL Server 在 INSERT 语句中添加 OUTPUT 子句(此处建议:stackoverflow.com/questions/10999396/…)。对于 MySQL,我按照建议使用 select last_insert_id()。一切顺利!
标签: mysql ado.net executenonquery