我在C#中有一个插入方法。基本上如下,其中url是表中唯一的约束:
INSERT INTO pages
(url) VALUES ('http://www.google.com');
在一个查询中,我想得到:
我最初使用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和插入行数的最佳选择是什么?最好用一个语句?
有没有办法可以设置查询中受影响的行数?有没有一种方法可以为我提供两条信息而不会显着下降?
答案 0 :(得分:0)
我不确定这是否适用于mySql,但我会采用INSERT + SELECT方法。类似的东西:
declare @prevID <column type>
select @prevID = id from pages where url = 'http://www.google.com'
if @prevID is null
begin
insert into pages(url) values ('http://www.google.com')
select 1, @@identity
end
else
select 0, @prevID