Kiedy przeglądając bazę danych z tego samego zapytania, ale z różnymi parametrami jest lepiej:Czy lepiej jest ponownie użyć polecenia SqlCommand podczas wykonywania tego samego zapytania SQL kilka razy?
- zrobić to w jednym użyciu,
- lub utworzyć dwa oddzielne zapytania?
Przykład jedno z:
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.");
}
Przykład ten sam kod za pomocą dwóch oddzielnych zapytania:
// 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.");
}
moim zdaniem, druga musi być korzystne , ponieważ:
- powoduje, że lepiej jest zobaczyć, gdzie polecenie SQL jest usuwane i ile razy jest ono wykonywane, jest łatwiejsze do zmodyfikowania, jeśli w przyszłości z jakiegoś powodu zapytanie musi zostać zmodyfikowane w jednym przypadku, ale nie w drugim,
- pierwszy łatwo zapomnieć o
SqlCommand.Parameters.Clear()
.
Z drugiej strony pierwsza próbka jest bardziej jednoznaczna na temat tego, że zapytanie jest takie samo w obu przypadkach i że zmieniają się tylko parametry.
Masz rację, drugie rozwiązanie jest bardziej czyste. Nie powinieneś ponownie używać tej samej SqlCommand, chyba że zamierzasz dokonać hiper-mega tuningu wydajności. – Davita
Może powinieneś umieścić kod wstawiania w oddzielnej funkcji i wywołać go dwa razy. –