当具有相同的查询,但不同的参数查询数据库,是它更好地:多次执行相同的SQL查询时重用SqlCommand会更好吗?
- 做一个单一的使用,
- 或创建两个单独的查询?使用单一的
实施例:
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()
。
另一方面,第一个示例更明确地表明查询在两种情况下都是相同的,并且只有参数更改。
你说得对,第二个解决方案更干净。除非您打算进行超级性能调优,否则不应该重复使用相同的SqlCommand。 – Davita 2011-01-06 23:56:40
也许你应该把插入代码放到一个单独的函数中并调用它两次。 – 2011-01-07 00:00:19