C# 使用ListBox的“智能”SQL更新

C# 使用ListBox的“智能”SQL更新,c#,sql-server,.net-4.0,listbox,sql-update,C#,Sql Server,.net 4.0,Listbox,Sql Update,我正在开发一个项目,通过C访问sql server 2012中的数据库,并对其执行CRUD修改。以下是主要形式: 右侧的两个列表框用于处理中间表多对多关系中包含的信息。下面是它们的工作原理:基本上,您可以从组合框中选择类型和能力,然后单击“添加”,并将它们添加到相应的列表框中。要删除列表框中的项目,只需选择一个项目,然后单击“删除”。 下面是另一个可以消除任何疑问的打印: 在我这里提供的第一份打印资料中,您将看到“Bulbasaur”数据。PokémonID=1由“Bulbasaur”表示;Ty

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

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

在我这里提供的第一份打印资料中,您将看到“Bulbasaur”数据。PokémonID=1由“Bulbasaur”表示;TypeID=1和12分别为“草”和“毒”;而AbilityID=1表示“过度生长”

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


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

基本上,您的意思是您只想将更改发送到数据库:

添加任何以前没有的技能; 删除数据库中已删除的所有技能 如果是这种情况,那么您需要能够执行的是简单的集合操作:

集管接头 集相交 设置差异 虽然可以使用简单的数组或列表执行这些操作,但使用实际的集合实现(如通用哈希集)要高效得多。通过使用集合或哈希表的正确实现,可以实现线性时间性能


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

我建议您结合以下几点:

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

2考虑使用运算符以及任何必要的左或右连接来比较表值参数的内容,实质上是表本身与当前表中的数据


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

如果您想继续回答您的问题,请检查您之前的问题并标记正确答案,甚至投票,我们会花时间为您提供任何答案:对下面的答案有什么想法吗?