1

我有一个带有各种表的 SQL 数据库,用于保存有关产品的信息(它用于在线商店),并且我正在用 C# 进行编码。有与给定产品相关的选项,如前所述,记录的有关这些选项的信息在保存时分布在几个表中。

现在,当我在 CMS 中编辑此产品时,我会看到现有产品选项的列表,我可以添加到该列表中或从中删除,正如您所期望的那样。

当我保存产品时,我需要检查记录是否已经存在,如果存在则更新它,如果不存在则保存新记录。我试图找到一种有效的方法来做到这一点。我维护与产品选项相关联的 ID 非常重要,因此不幸的是,每次都清除它们并重新保存它们是不可行的。

再次描述,可能更清楚:想象一下,当我加载产品时,我有一组选项,这些选项被加载到内存中,并根据用户的选择添加/删除。当他们单击“保存”时,我需要检查哪些选项是更新的,哪些是列表中的新选项。

有什么有效的方法建议吗?

谢谢。

4

3 回答 3

1

我通常通过执行以下操作来做到这一点:

  1. 对于每个项目,执行一个更新查询,如果该项目存在,它将对其进行更新。
  2. 每次更新后,检查更新了多少行(在 SQL Server 中使用 @@ROWCOUNT)。如果更新了零行,则执行插入以创建行。

或者,如果您创建一个防止重复行的唯一约束,您可以执行相反的操作:

  1. 对于每个项目,尝试插入它。
  2. 如果插入因约束而失败(检查错误代码),请改为执行更新。
于 2011-02-02T18:13:26.110 回答
1

如果您希望实现的效率与到数据库的往返次数有关,那么您可以编写一个存储过程来为您进行更新或插入。

但是,在大多数情况下,如果您的表上有适当的主键或唯一索引,则不必首先避免 SELECT,这应该非常快。

如果效率是服务器端的优雅或精简代码,那么我会考虑使用某种 ORM,例如 Entity Framework 4.0。使用适当的 ORM 架构,您几乎可以停止考虑数据库记录和 INSERT/UPDATE,而只需处理内存中的对象集合。

于 2011-02-02T18:17:46.023 回答
0

对 ID 运行选择查询检查。如果存在,则需要更新。如果它不存在,那么您需要插入。

如果没有更多细节,我真的不确定还能告诉你什么。这是相当标准的。

于 2011-02-02T18:08:22.553 回答