gpt4 book ai didi

c# - 插入并返回插入的行数(非重复)和记录的 ID(新的或重复的)

转载 作者:行者123 更新时间:2023-11-29 03:41:37 25 4
gpt4 key购买 nike

我在 C# 中有一个插入方法。本质上如下,其中 url 是表中的唯一约束:

INSERT INTO pages
(url) VALUES ('http://www.google.com');

在单个查询中我想得到:

  1. 插入行或已存在条目的id
  2. 插入的行数(不包括已经存在的重复项)

我最初是使用 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 捕获从 ExecuteNonQuery 返回 1,而且似乎无法确定该行是插入的还是重复的。

使用 .NET (C#) 适配器确定记录 ID 和插入行数的最佳选择是什么,最好使用单个语句?

有没有一种方法可以设置查询中受影响的行数?有没有一种方法可以在不显着降低性能的情况下为我提供这两种信息?

最佳答案

我不确定这是否适用于 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

关于c# - 插入并返回插入的行数(非重复)和记录的 ID(新的或重复的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13169338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com