2
我在C#中有一个插入方法。本质上,下面,其中URL是在表中唯一contraint:插入并返回插入的行数(非重复)和记录的ID(新的或重复的)
INSERT INTO pages
(url) VALUES ('http://www.google.com');
在一个单一的查询我想获得:
- 无论是插入行或条目的ID已经存在
- 插入(不包括已存在的重复)
我原先调用插入上述使用的ExecuteNonQuery和捕捉MYS所见的行数QL重复异常(可能使用了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财产,当然不再抛出一个异常,因为更新渔获从的ExecuteNonQuery返回1,看似提供没有办法确定该行是插入还是重复。
在使用.NET(C#)适配器确定记录的id和插入行数方面,最好是使用单个语句来确定最佳选择是什么?
有没有一种方法可以设置我的查询中受影响的行数?有没有一种方法可以为我提供两条信息,而不会有明显的性能下降?