2011-08-28 3 views
0

Est-ce que SqlTransaction effectue une opération par lots sans accès répétitif à la base de données? Je ne sais pas puisque SqlTransaction semble regrouper un tas de commandes SQL ensemble et finalement valider dans la base de données. Cependant, chaque commande exécute un ExecuteNonQuery(), ce qui entraîne un accès à la base de données.Opération par lots avec ADO.NET

public List<Task> SubmitSheet(List<Task> tList) 
{ 
    SqlConnection conn = A2.Controller.Utils.conn; 
    SqlTransaction submitTransaction = null; 
    try 
    { 
     conn.Open(); 
     submitTransaction = conn.BeginTransaction(); 
     foreach (Task t in tList) { 
      SqlCommand submitCmd = new SqlCommand("SubmitTask", conn); 
      submitCmd.CommandType = CommandType.StoredProcedure; 
      submitCmd.Transaction = submitTransaction; 
      submitCmd.Parameters.Add("@tid", SqlDbType.Int).Value = t.Id; 
      submitCmd.ExecuteNonQuery(); 
     } 
     submitTransaction.Commit(); 
    }   
    finally { 
     if (conn.State == ConnectionState.Open) conn.Close(); 
    } 
    return tList; 
} 
+4

non, il suffit de tester avec votre Sql-Profiler préféré. BTW: cela n'a rien à voir avec asp.net – Carsten

+0

Si vous êtes sur SQL Server 2008, vous pouvez utiliser les paramètres de valeur table pour soumettre le lot d'identifiants à la procédure stockée. –

+0

@CKoenig Vous voulez dire, il va accéder à la base de données pour chaque commande? – Amumu

Répondre