【发布时间】:2011-06-05 00:13:59
【问题描述】:
查询同一个查询但参数不同的数据库时,是不是更好:
- 一次性使用,
- 还是创建两个单独的查询?
单用示例:
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。
-
也许您应该将插入代码放入单独的函数中并调用两次。
标签: c# refactoring readability