當具有相同的查詢,但不同的參數查詢數據庫,是它更好地:多次執行相同的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