使用ListBox的“智能”SQL更新

时间:2013-01-31 02:00:08

标签: c# sql-server .net-4.0 listbox sql-update

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

enter image description here

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

enter image description here

在我提供的第一张照片上,您会看到“Bulbasaur”数据。 PokémonID​​= 1由'Bulbasaur'代表; TypeID = 1和12分别是'Grass'和'Poison';和AbilityID = 1是'过度生长'。

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

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

2 个答案:

答案 0 :(得分:0)

基本上听起来你说你想做的只是“将更改”发送到数据库:

  • 添加以前不存在的任何能力;
  • 删除数据库中但已被删除的所有异能

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

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

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

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

答案 1 :(得分:0)

我建议结合使用:

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

2)考虑使用EXCEPT and/or INTERSECT运算符(以及任何必要的LEFT或RIGHT JOIN)来比较表值参数(本质上是表本身)的内容与当前基础表中的数据< / p>

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