gpt4 book ai didi

c# - 多次执行相同的 SQL 查询时重用 SqlCommand 是否更好?

转载 作者:可可西里 更新时间:2023-11-01 08:07:41 24 4
gpt4 key购买 nike

当使用相同的查询但不同的参数查询数据库时,是否更好:

  • 一次性完成,
  • 还是创建两个单独的查询?

单次使用示例:

using (SqlCommand addProduct = new SqlCommand(@"insert into [Products].[Products] ([Name], [Price]) values (@name, @price)", sqlConnection))
{
// Insert the first product.
addProduct.Parameters.AddWithValue("@name", "Product 1");
addProduct.Parameters.AddWithValue("@price", 41F);
int countAffectedRows = addProduct.ExecuteNonQuery();
Debug.Assert(countAffectedRows == 1, "Wrong number of rows affected.");

addProduct.Parameters.Clear();

// Insert the second product.
addProduct.Parameters.AddWithValue("@name", "Product 2");
addProduct.Parameters.AddWithValue("@price", 49.9);
countAffectedRows = addProduct.ExecuteNonQuery();
Debug.Assert(countAffectedRows == 1, "Wrong number of rows affected.");
}

使用两个单独查询的相同代码示例:

// Insert the first product.
using (SqlCommand addProduct = new SqlCommand(@"insert into [Products].[Products] ([Name], [Price]) values (@name, @price)", sqlConnection))
{
addProduct.Parameters.AddWithValue("@name", "Product 1");
addProduct.Parameters.AddWithValue("@price", 41F);
int countAffectedRows = addProduct.ExecuteNonQuery();
Debug.Assert(countAffectedRows == 1, "Wrong number of rows affected.");
}

// Insert the second product.
using (SqlCommand addProduct = new SqlCommand(@"insert into [Products].[Products] ([Name], [Price]) values (@name, @price)", sqlConnection))
{
addProduct.Parameters.AddWithValue("@name", "Product 2");
addProduct.Parameters.AddWithValue("@price", 49.9);
int countAffectedRows = addProduct.ExecuteNonQuery();
Debug.Assert(countAffectedRows == 1, "Wrong number of rows affected.");
}

在我看来,第二个肯定是首选,因为:

  • 可以更清楚地看到SQL命令的位置和执行次数,
  • 如果将来由于某种原因必须在一种情况下修改查询,而在另一种情况下则不需要,则修改起来会更容易,
  • 第一个很容易忘记 SqlCommand.Parameters.Clear()

另一方面,第一个示例更明确地说明了两种情况下的查询相同,只是参数发生了变化。

最佳答案

除非您打算调用 Prepare,否则重用命令实例的好处很小.

如果您要多次(数十次或更多次)运行命令,那么您可能想要创建命令、准备它、循环执行它,然后处理它。如果您多次运行该命令,性能提升非常显着。 (不过,您可以在准备之前添加一次参数——而不是像您在第一个代码示例中那样每次都删除并重新添加它们。您应该每次更改参数的时间,而不是创建新参数。)

如果您只打算运行该命令几次,性能不是问题,您应该选择您喜欢的任何一种方式。每次创建命令的好处是它很容易提取到方法中,因此您不会重复自己。

关于c# - 多次执行相同的 SQL 查询时重用 SqlCommand 是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4621261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com