调用多个存储过程的最快代码是什么?

时间:2010-10-27 14:00:56

标签: c# sql sql-server stored-procedures .net-4.0

解决方案1:

foreach (var item in itemList)
{
   myContext.ExecuteStoreCommand("EXEC MyProc {0};", item); // Insertion
}

解决方案2:

StringBuilder sb = new StringBuilder();
foreach (var item in itemList)
{
   sb.AppendLine(String.Format("EXEC MyProc {0};", item)); // Insertion
}
myContext.ExecuteStoreCommand(sb.ToString());

6 个答案:

答案 0 :(得分:8)

第二个更快(一次调用数据库而不是多次),首先更安全,因为它可以防止SQL注入。

答案 1 :(得分:5)

两者都是第二个受sql injection约束,这是肯定的

通过阅读thisthis,我同意kekekela

答案 2 :(得分:3)

解决方案2更快,因为它只对myContext.ExecuteStoreCommand进行一次调用,因此方法调用通过context对象的开销更少

答案 3 :(得分:2)

我猜解决方案2因为应用程序和数据库之间的I / O较少。如果速度是你所关心的,你可以通过System.Diagnostics.Stopwatch utility进行调试来检查自己。

答案 4 :(得分:1)

这听起来像是一个很容易测试的小优化的机会。

可能他们的速度非常接近。

答案 5 :(得分:1)

你没有提到的那个。

准备一个SqlCommand,其存储过程的名称为CommandText,CommandType设置为CommandType.StoredProcedure,并且params已正确添加。

除了不使用即席查询(每次都必须重新分析)所带来的性能提升之外,您还可以将大部分当前的SQL注入问题扼杀在萌芽状态。