2009-10-05 4 views
11

Potrzebuję wysłać listę poleceń do SQL 2008 za pomocą ADO.NET, aby wykonać ją jeden po drugim. Czy powinienem utworzyć nową komendę SQLC dla każdego wysyłanego zapytania SQL? Lub użyj tego samego polecenia SQLC i po prostu zmień właściwość CommandText? Dzięki, NestorUtwórz nowe polecenie SQLCommand lub użyj go ponownie.

Odpowiedz

16

SqlCommands są dość lekkie. Za każdym razem możesz bezpiecznie tworzyć nowe.

Istnieją komplikacje z parametrami polecenia, w których trzeba wyczyścić i zresetować wszystkie parametry, i w tym momencie tworzenie nowego polecenia jest czyste, łatwe do zrozumienia i skuteczne.

Poza tym zwykle można użyć nowego SqlConnection za każdym razem. Automatyczne, wbudowane buforowanie połączeń to "magia", która sprawia, że ​​jest to efektywne.

Używam tego:

public void ExecuteQuery(string query) 
{ 
    this.ExecuteQuery(query, null); 
} 

public void ExecuteQuery(string query, Dictionary<string, object> parameters) 
{ 
    using (SqlConnection conn = new SqlConnection(this.connectionString)) 
    { 
     conn.Open(); 

     using (SqlCommand cmd = conn.CreateCommand()) 
     { 
      cmd.CommandText = query; 

      if (parameters != null) 
      { 
       foreach (string parameter in parameters.Keys) 
       { 
        cmd.Parameters.AddWithValue(parameter, parameters[parameter]); 
       } 
      } 

      cmd.ExecuteNonQuery(); 
     } 
    } 
} 
+0

Downvoting za radę, aby zamknąć i ponownie otwarte połączenia. Wykonanie tego w ramach transakcji TransactionScope natychmiast spowoduje jej wypromowanie do transakcji DTC, która w razie potrzeby może zaszkodzić wydajności i wprowadzić błędy, jeśli kod DTC nie jest poprawnie skonfigurowany. – Andy

+0

@Andy: Po co głosować, gdy mówię "zwykle w porządku"? Większość ludzi nie będzie miała problemu, który opisujesz. –

+1

To nie jest "zwykle w porządku". Wystarczy, że przeszukasz internet pod kątem tego, ile razy osoby nieoczekiwanie zostały ukąszone przez promocję DTC od czasu wprowadzenia TransactionScope. Zwykle zaleca się ponowne wykorzystanie pojedynczego połączenia na transakcję/jednostkę pracy. – Andy