1

我正在开发一个项目,该项目通过 C# 访问 sql server 2012 中的数据库并对其执行 CRUD 修改。这是主要形式:

在此处输入图像描述

右侧的两个列表框都用于处理包含在中间表(多对多关系)中的信息。以下是它们的工作原理:基本上,您从组合框中选择类型和能力,然后单击“添加”,它们将添加到相应的列表框中。要删除列表框中的项目,您只需选择一项,然后单击“删除”。这是另一个打印以消除任何疑问:

在此处输入图像描述

在我在这里提供的第一张印刷品上,您将看到“Bulbasaur”数据。PokémonID​​ = 1 由“Bulbasaur”表示;TypeID = 1 和 12 分别是 'Grass' 和 'Poison';并且 AbilityID = 1 是“过度生长”。

我试图使用 sql 查询(SqlCommand、SqlDataReader 等)创建一个更新函数(update_click),但没有删除神奇宝贝及其类型(和能力)的整个关联,然后重新添加它们,基于关于列表框的新修改。我想避免它,以便在某些神奇宝贝可能拥有数千种类型和能力的情况下节省一些内存......

可能吗?如有必要,我可以将我的 C# 项目发送给您以获取更多详细信息。

4

2 回答 2

0

从本质上讲,这听起来像您所说的您想做的只是将更改“发送”到数据库:

  • 添加以前没有的任何能力;
  • 删除数据库中已删除的所有能力

如果是这种情况,那么您需要做的是简单的集合操作:

  • 设置联合
  • 设置相交
  • 设置差异

虽然您可以使用简单的数组或列表来执行这些操作,但使用实际的集合实现(例如通用 HashSet<>)效率更高。通过使用集合或哈希表的正确实现,您可以获得线性时间性能。

我希望这有助于为您指明正确的方向..

于 2013-01-31T02:09:26.090 回答
0

我建议以下组合:

1)使用表值参数将所有数据(在列表框中的当前状态)一次发送到您的 T-SQL 查询或存储过程

2) 考虑使用EXCEPTand/orINTERSECT运算符(以及任何必要的 LEFT 或 RIGHT JOIN)将表值参数(本质上是表本身)的内容与基础表中当前的数据进行比较

3)相应地更新/删除/插入

于 2013-01-31T02:17:17.000 回答