我在 C# 中有一个插入方法。基本上如下,其中 url 是表中的唯一约束:
INSERT INTO pages
(url) VALUES ('http://www.google.com');
在一个查询中,我想得到:
- 插入行或已存在条目的 id
- 插入的行数(不计算已经存在的重复项)
我最初使用 ExecuteNonQuery 调用插入,并捕获 MySQL 重复异常(可以使用 INSERT IGNORE 但很高兴知道它没有因为查询的另一部分而失败)。这使我能够准确计算实际插入的行数,但没有提供在重复的情况下检索 id 的方法(如果行是重复的,command.LastInsertedId 返回 -1)。
然后我将语句更改为以下内容:
INSERT INTO pages
(url) VALUES ('http://www.google.com')
ON DUPLICATE KEY UPDATE id= LAST_INSERT_ID(id);
这将正确更新 command.LastInsertedId 属性,但当然不再引发异常,并且由于 UPDATE catch 从 ExecuteNonQuery 返回 1 并且似乎无法确定该行是插入还是重复。
使用 .NET (C#) 适配器(最好使用单个语句)确定记录 ID 和插入行数时,我最好的选择是什么?
有没有办法可以设置查询中受影响的行数?有没有一种方法可以在不显着性能下降的情况下为我提供两条信息?