C# 减少数据库调用的数量

C# 减少数据库调用的数量,c#,.net,winforms,sql-server-2008,C#,.net,Winforms,Sql Server 2008,我有一个存储过程,它接受五个参数并对表执行更新 Update Table Set field = @Field Where col1= @Para1 and Col2=@Para and Col3=@Para3 and col4 =@aPara4 从用户界面,您可以为所有条件参数选择多个值。 例如,您可以选择2个需要匹配数据库表中Col1的选项(需要作为@Para1传递) 因此,我将所有选定的值存储在单独的列表中 目前,我正在使用foreach循环进行更新 foreach (var g i

我有一个
存储过程
,它接受五个参数并对表执行更新

Update Table
Set field = @Field
Where col1= @Para1 and Col2=@Para and Col3=@Para3 and col4 =@aPara4
从用户界面,您可以为所有条件参数选择多个值。 例如,您可以选择2个需要匹配数据库表中Col1的选项(需要作为@Para1传递)

因此,我将所有选定的值存储在单独的列表中

目前,我正在使用foreach循环进行更新

  foreach (var g in _list1)
            {
                foreach (var o in _list2)
                {
                    foreach (var l in _list3)
                    {
                        foreach (var a in _list4)
                        {
                           UpdateData(g, o, l,a);
                        }
                    }
                }
            }
我确信这不是一个好方法,因为这将调用数据库调用的号码。是否有任何方法可以忽略循环并进行最少数量的db调用以获得相同的结果

更新


我正在寻找表值参数以外的其他方法,一种可能的方法是使用每个条件将多个值传递给存储过程。这将减少代码中的循环,并且仍然可以提供您所需要的功能


如果我没有弄错的话,它们是在SQL Server 2008中引入的,因此只要您不必支持2005或更早版本,就可以使用它们。

一种可能的方法是使用每个条件将多个值传递给存储过程。这将减少代码中的循环,并且仍然可以提供您所需要的功能


如果我没有弄错的话,它们是在SQL Server 2008中引入的,因此只要您不必支持2005或更早版本,它们就可以使用。

只要您可以自由更新存储过程的结构;我建议的方法是使用一个表值参数,而不是多个参数


服务器和数据库代码中的一个很好的例子可以在以下位置找到:

只要您有自由更新存储过程的结构;我建议的方法是使用一个表值参数,而不是多个参数

服务器和数据库代码中都有一个很好的例子,可以在以下位置找到:

考虑使用企业库中的MS来执行UpdateDataSet命令

本质上,您将构建一个datatable,其中每一行都是一个参数集,然后针对打开的连接执行参数集的“批处理”

当然,您也可以不用它来做同样的事情,方法是构建一个包含多个update命令的字符串并对DB执行它。

考虑使用企业库中的MS来执行UpdateDataSet命令

本质上,您将构建一个datatable,其中每一行都是一个参数集,然后针对打开的连接执行参数集的“批处理”


当然,你也可以不用它,通过构建一个包含多个update命令的字符串,并对数据库执行它。

为什么要使用存储过程呢?在我看来,您不应该使用SP来执行简单的CRUD操作。存储过程的真正功能是用于繁重的计算和诸如此类的事情


表值参数将是我的选择,但既然您正在寻找其他方法,为什么不采用更简单的方法,在服务器端代码上动态构造一个批量/批量更新查询,并在DB上运行它?

为什么要使用存储过程来实现这一点?在我看来,您不应该使用SP来执行简单的CRUD操作。存储过程的真正功能是用于繁重的计算和诸如此类的事情


表值参数将是我的选择,但既然您正在寻找其他方法,为什么不走更简单的方法,只是动态地在服务器端代码上构建一个大容量/大容量更新查询,并运行它与DB?

< P> >,因为表值参数对您是限制的,您可以考虑基于XML的方法:

  • 构建包含要传递的四列的XML文档
  • 将存储过程的签名更改为接受单个XML值参数,而不是四个标量参数
  • 更改存储过程的代码,以基于您获得的XML执行更新
  • 使用使用四个嵌套循环在内存中构造的XML调用新存储过程一次

这将减少往返次数,并加快总体执行时间。下面是一个示例,说明如何使用XML一次插入多行;您的情况有些相似,因此您应该能够使用本文中概述的方法。

< P>因为表值参数对您是限制的,您可以考虑基于XML的方法:

  • 构建包含要传递的四列的XML文档
  • 将存储过程的签名更改为接受单个XML值参数,而不是四个标量参数
  • 更改存储过程的代码,以基于您获得的XML执行更新
  • 使用使用四个嵌套循环在内存中构造的XML调用新存储过程一次

这将减少往返次数,并加快总体执行时间。下面是一个示例,说明如何使用XML一次插入多行;您的情况有些类似,因此您应该能够使用该文章中概述的方法。

您可以将查询带到该表单:

updatetable Set field=@field,其中{}中的col1和{}中的Col2以及{}中的Col3和{}中的col4


并通过以下方式传递参数:

您可以将查询带到此窗体:

updatetable Set field=@field,其中{}中的col1和{}中的Col2以及{}中的Col3和{}中的col4


并以这种方式传递参数:

SP就是这么做的吗?您是否可以在没有SP的情况下自由执行此更新?您是否可以控制DB架构?具体来说,是否允许创建用户定义的类型