Cuando se consulta la base de datos con la misma consulta pero con diferentes parámetros, ¿es mejor:¿Es mejor reutilizar SqlCommand al ejecutar la misma consulta SQL varias veces?
- lo hacen en un solo usando,
- o para crear dos consultas separadas?
ejemplo de un solo usando:
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.");
}
ejemplo del mismo código utilizando dos consultas separadas:
// 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.");
}
En mi opinión, la segunda debe ser preferible , porque:
- hace que sea más claro ver dónde está dispuesto el comando SQL y cuántas veces se ejecuta,
- es más fácil de modificar si, en el futuro, por alguna razón, la consulta debe modificarse en un caso, pero no en el otro,
- el primero hace que sea fácil olvidar el
SqlCommand.Parameters.Clear()
.
Por otro lado, la primera muestra es más explícita sobre el hecho de que la consulta es la misma en ambos casos, y que solo cambian los parámetros.
Tiene razón, la segunda solución es más limpia. No debe volver a utilizar el mismo SqlCommand a menos que vaya a hacer un ajuste de mega-mega rendimiento. – Davita
Quizás deba colocar el código de inserción en una función separada y llamarlo dos veces. –