C#-SQL: Comment exécuter un lot de StoredProcedure?

Edit:
Mon problème n'est plus un problème: je dois refaire mes performances, tests et j'ai fais une fatale erreur stupide: j'avais oublier un x1000 pour obtenir secondes de millisecondes :/
Désolé les gars.

Pour info:

- Je fais un peu 1900 des mises à jour par seconde à partir de mon PC vers le serveur de Base de données sur le réseau local.

- 3.200 mises à jour par seconde si les programmes sont sur la même machine que DB.

- 3.500 mises à jour par seconde à partir de mon PC sur le serveur de Base de données je n'ai pas re-créer et re-ouvrir une nouvelle occurrence de SQLConnection.

- 5.800 mises à jour par seconde, avec un texte de lot.
Pour ma 10.000 lignes, si c'prendre 5 secondes, c'est ok pour mes programmes. Désolé de devoir vous inquiéter.

En fait, j'utilise un stockées SQL prodedure pour créer une ligne dans ma base de données pour éviter les injection SQL. En C#, j'ai la méthode suivante:

public void InsertUser(string userCode)
{
   using (SqlConnection sqlConnection = new SqlConnection(this.connectionString))
   {
      SqlCommand sqlCommand = new SqlCommand("InsertUser", sqlConnection);
      sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
      sqlCommand.Parameters.Add(new SqlParameter("@UserCode", userCode));
      sqlConnection.Open();
      sqlCommand.ExecuteNonQuery();///0.2 seconds !ERROR HERE! 0.2ms here,NOT 0.2sec!!!
   }
} 

Il woks grande quand j'ai une ou deux lignes à insérer. Mais si j'ai besoin de créer 1.000 utilisateurs et 10.000 produits et 5000 animaux de compagnie, ce n'est pas la meilleure solution: je vais perdre un temps énorme dans netwok de transport.

Je crois, sans enregistrement il, que je peux utiliser seulement une quantité limitée de rappel. Donc, je ne veux pas appeler 10.000 fois:

sqlCommand.BeginExecuteNonQuery()

Une autre façon de créer un texte de lot, mais il y a une Injection SQL de risque (et c'est moche).

N', il est un "SqlCommandList' objet que gérer le .Net? Comment dois-je faire de gros de l'écriture dans la base de données? Ce que le bon patern pour qui?

  • Je vous recommande d'utiliser "sqlCommand.Prepare();" avec le type de paramètre, ce qui devrait améliorer le temps d'exécution de la deuxième requête au moins.