2009-10-05 7 views

Répondre

16

SqlLes commandes sont assez légères. Vous êtes sûr d'en créer un nouveau à chaque fois.

Il existe des complications avec les commandes paramétrées où vous devez effacer et réinitialiser tous les paramètres, et à ce stade, créer une nouvelle commande est propre, facile à comprendre et efficace.

En outre, il est généralement possible d'utiliser une nouvelle SqlConnection à chaque fois. La mise en commun automatique des connexions est la «magie» qui rend ce système efficace.

J'utilise ceci:

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 pour les conseils de fermer et de connexions rouvrir. Faire cela dans un TransactionScope le promouvra immédiatement à une transaction DTC, qui si elle n'est pas nécessaire blesse les performances et peut introduire des bogues si DTC n'est pas correctement configuré. – Andy

+0

@Andy: Pourquoi voter en bas quand j'ai dit "habituellement OK"? La plupart des gens n'auront pas le problème que vous décrivez. –

+1

Ce n'est pas "généralement OK". Il suffit de rechercher sur Internet combien de fois les gens ont été mordus par la promotion DTC depuis que TransactionScope a été introduit. Le conseil habituel est de réutiliser une seule connexion par transaction/unité de travail. – Andy

Questions connexes