保存前检查项目是否存在

时间:2011-02-02 18:06:16

标签: c# asp.net save updating

我有一个SQL DB,其中包含各种表格,用于保存产品信息(用于在线商店),而且我用C#进行编码。有一些与给定产品相关的选项,如上所述,有关这些选项的信息在保存时分布在几个表中。

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

当我保存产品时,我需要检查记录是否已经存在,如果是,则更新它,如果没有则保存新记录。我正在努力找到一种有效的方法。我保持与产品选项相关的ID是非常重要的,因此每次清除它们并重新保存它们是不幸的。

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

有效做到这一点的任何建议吗?

感谢。

3 个答案:

答案 0 :(得分:1)

我通常通过执行以下操作来执行此操作:

  1. 对于每个项目,执行更新查询,如果项目存在,将更新项目。
  2. 每次更新后,检查更新的行数(使用SQL Server中的@@ ROWCOUNT)。如果更新了零行,请执行插入以创建行。
  3. 或者,如果您创建一个阻止重复行的唯一约束,则可以执行相反的操作:

    1. 对于每个项目,请尝试插入。
    2. 如果插入因约束而失败(请检查错误代码),请执行更新。

答案 1 :(得分:1)

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

在大多数情况下,首先没有必要首先避免SELECT,只要你的表上有适当的主键或唯一索引,这应该非常快。

如果效率是在服务器端优雅或减少代码方面,那么我会考虑使用某种ORM,例如Entity Framework 4.0。使用适当的ORM体系结构,您几乎可以不再考虑数据库记录和INSERT / UPDATE,只需使用内存中的对象集合。

答案 2 :(得分:0)

运行选择查询以检查ID。如果存在则需要更新。如果它不存在则需要插入。

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