При запросе данных с тем же запросом, но разными параметрами, что лучше:Лучше ли повторно использовать SqlCommand при выполнении одного и того же запроса SQL несколько раз?
- сделать это в одном использовании,
- или создать два отдельных запросов?
Пример один с помощью:
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
Возможно, вы должны поместить код вставки в отдельную функцию и вызвать его дважды. –