解决方案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());
答案 0 :(得分:8)
第二个更快(一次调用数据库而不是多次),首先更安全,因为它可以防止SQL注入。
答案 1 :(得分:5)
两者都是第二个受sql injection约束,这是肯定的
答案 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注入问题扼杀在萌芽状态。